原標題是<不懂可以問,但是不要裝逼>一:看系統架構,后來覺得不妥,還是改改吧。
所有內容不涉及系統架構,只涉及設計架構中注意的要素,方向有了,架構自然就出來了。細節、代碼后續再貼出來,感謝大牛X-Ts提供后續代碼指導,此部分內容同樣借鑒之前的老師的指導。
從層次看網站系統架構:
一、前端架構
1. 瀏覽器優化技術:通過優化響應頁面,為瀏覽器頁面的加載和現實提速,常用的有頁面緩存,合並HTTP減少請求次數、頁面壓縮等。
2. 前端的分布式:靜態資源,如JS、CSS等文件不是在專門的服務器集群上(開發過程中,可使用公共的二級域名,前期並非放在獨立的服務器上,為后續的業務擴大化作擴展),和Web應用動態業務的相關內容做分離,通過最短路徑獲取內容。
3. 圖片資源服務:此處指用戶上傳的圖片,並非網站的按鈕以及LOGO(這些文件屬於上段提到的靜態資源)。
4. 反響代理:提供頁面緩存。
5. DNS:將域名解析成地址,利用dns可以實現dns的負載均衡。
二、應用層架構:業務邏輯的處理。
1、開發框架:一個好的開發框架是關注點分離的,各層各行其事,易於協作。頁面渲染,動態內容和靜態頁面模板集成起來,最終集合一起顯示給用戶。一款優秀的模板引擎能在開發中干凈、整潔、關注點分離透徹等。
2、負載均衡:將多台應用服務器組成一個集群,通過負載均衡將用戶請求分發到不同的服務器上,減少服務器壓力,通過冗余技術,達到軟雙機熱備效果。
3、Seesion維護:此目的實現高可用的應用服務器集群,應用服務器設置為無狀態,不保存用戶請求的上下文,但需要保持用戶會話狀態,可使用軟技術實現Seesion管理。。。
4、動態頁面靜態化:訪問量大而不頻繁更新的動態頁面,使其靜態化,根據請求HTTP的請求原理,到達優化加速的手段,此處反向代理,CDN,瀏覽器緩存等。
5、業務拆分:業務增多,子系統新增,形成了規模小的子產品,獨立開發、實施、維護,降低系統的耦合度,便於系統中數據庫分庫。
6、虛擬化服務器:將一台物理機虛擬化多台虛擬服務器,利用較少的資源構建高可用的應用服務器集群。微軟提供了Hyper-V
三、服務層架構:
1、分布式消息:利用消息隊列,實現業務之間,業務、服務之間的異步消息的傳遞,同時解決業務間低耦合的關系。
2、分布式服務:SOA
3、分布式緩存:軟分布式緩存,不一定要從集群上解決,要盡可能的利用軟件、應用程序。
4、分布式配置:動態配置分布式緩存等,例如,加入可配置參數列表,即可添加分布式緩存服務器。
四、存儲層架構:數據、文件持久化的存儲訪問與管理服務。
1、分布式文件:圖片或其他資源數量較大,如圖片,網頁,視頻,伸縮性設計分布式文件系統,當前有很成熟的相關的軟系統架構。
2、關系型數據庫:通過在應用程序的數據庫訪問層增加數據庫訪問路由功能,通過業務配置將數據庫的訪問路由到不同的物理數據庫上,為后續分布式也打下基礎。
3、NoSql:其讀寫速度非常快,遠優越於關系型數據庫,當然各版本在內存管理,數據模型等各有優缺點,做緩存等毋庸置疑。
4、數據同步:數據庫同步技術已經很成熟,多數據庫之間同步也存在很多的壓力。可通過DB的事務日志或者Nosql寫Log,同步到其他數據點,根據Log進行重演。
五、后台框架:
1、搜索引擎:網站內部引擎,若對數據增量及全量更新、構建索引,可通過后台系統定時執行,同時可以借鑒第三方成熟的框架,如Lucene.Net、HubbleDotNet等
2、數據倉庫:提供完整的離線數據,提供數據分析以及數據挖掘服務。
3、數據采集與監控: 采集的數據以圖表的形式展示,對網站的監控運作狀況有及時的了解,當然還有更先進的運維方式。
4、瀏覽器數據采集:在網頁中嵌入JS腳本或通過其他手段獲取采集用戶瀏覽器的環境以及操作行為,分析其行為,對用戶的友好度以及系統的安全性等做數據采集。
5、服務器業務數據采集:采集服務端用戶的操作日志。
6、系統監控:采集的數據以圖表的形式展示,對網站的監控運作狀況有及時的了解,當然還有更先進的運維方式。
7、系統預警:數據未正常采集,超過了系統的閾值,系統承載的負載過高,通過郵件、短信、語音電話等發出相關的信號。
六、安全架構:
Web攻擊:當前,以Http請求的方式發起的攻擊,最大危害是XSS和SQL注入。代碼的規范性有待注意。
當然還是有其他的一些CSRF攻擊、Error Code、HTML注釋、文件上傳、路徑遍歷、表單Token、
數據保護:敏感信息加密傳送。