1. 大型網站架構演化發展歷程html
1). 初始階段的網站架構:聚集各類免費開源軟件及一臺廉價服務器前端
2). 應用服務和數據服務分離:算法
a. 應用服務器須要處理大量的業務邏輯,所以須要更快更強大的CPU數據庫
b. 數據庫服務器須要更快速磁盤檢索和數據緩存,所以須要更快的磁盤和更大的內存後端
c. 文件服務器須要存儲大量的用戶上傳的文件,所以須要更大硬盤瀏覽器
3). 使用緩存改善網站性能:二八定律,本地緩存與遠程分佈式緩存緩存
4). 使用應用服務器集羣改善網站的併發處理能力安全
5). 數據庫讀寫分離性能優化
6). 使用反向代理和CDN加速網站相應:CDN和反向代理的基本原理都是緩存,區別在於CDN部署在網絡提供商的機房,使用戶在請求網站服務時,能夠從距離本身最近的網絡提供商機房獲取數據;而反向代理則服務器
部署在網站的中心機房,當用戶請求到達中心機房後,首先訪問的服務器是反向代理服務器,若是反向代理服務器中緩存着用戶請求的資源,就將其直接返回給用戶。
使用CDN和反向代理的目的,一方面加快用戶訪問速度,另外一方面也減輕後端服務器的負載壓力。
7). 使用分佈式文件系統和分佈式數據庫系統:分佈式數據庫是網站數據庫拆分的最後手段,只有在單表數據規模很是龐大時才使用。不到不得已,網站更經常使用的數據庫拆分手段是業務分庫,將不一樣業務的數據庫部
署在不一樣的物理服務器上。
8). 使用NoSQL和搜索引擎:應用服務器則經過一個統一數據訪問模塊訪問各類數據,減輕應用程序管理諸多數據源的麻煩。
9). 業務拆分
10). 分佈式服務
2. 網站架構模式:
分層 、分割、分佈式、集羣、緩存、異步、冗餘、自動化、安全
3. 瞬時響應:網站的高性能架構
1). Web前端性能優化
a. 瀏覽器訪問優化:
b. CDN加速:
c. 反向代理:緩存靜態資源
2). 應用服務器性能優化:
a. 分佈式緩存:網站性能優化的第必定律:優先考慮使用緩存優化性能。
b. 異步操做:使用消息隊列將調用異步化,可改善網站的擴展性。事實上使用消息隊列還可改善網站系統的性能。消息隊列具備很好的削峯做用。須要適當修改業務流程進行配合。
c. 使用集羣
d. 代碼優化:多線程,資源複用(單例,線程池等),數據結構:hash等,垃圾回收
4. 萬無一失:網站的可用性架構
1). 高可用的應用:
a. 經過負載均衡進行無狀態服務的失效轉移:對於應用服務器集羣,實現這種服務可用狀態實時監測、自動轉移失敗任務的機制是負載均衡。負載均衡服務器經過心跳監測機制判斷服務器是否可用。
b. 應用服務器集羣的Session管理:利用獨立部署的Session服務器(集羣)統一管理Session應用服務器每次讀寫Session時,都訪問Session服務器。
2). 高可用的應用:
a. 分級管理:運維上將服務器進行分級管理,核心應用和服務優先使用更好的硬件,在運維響應速度上也格外迅速。同時在服務部署上也進行必要的隔離,避免故障的連鎖反應。低優先級的服務經過啓動不一樣的線程
或者部署在不一樣的虛擬機上,核心服務和數據甚至要部署在不一樣的地址數據中心。
b. 超時設置:
c. 異步調用:
d. 服務降級:在網站訪問高峯期,爲了保證核心應用和功能的正常運行,須要對服務進行降級。降級有兩種手段:拒絕服務及關閉服務。
拒絕服務:拒絕低優先級應用的調用,減小服務調用併發數,確保核心應用正常使用;或者隨機拒絕部分請求調用,節省資源,讓另外一部分請求得以成功,避免要死你們一塊兒死的慘劇。
關閉功能:關閉部分不重要的服務,或者服務內部關閉部分不重要的功能,以節省系統開銷,爲重要的服務和功能讓出資源。
e. 冪等性設計:保證服務重複調用的和調用一次產生的結果相同,即服務具備冪等性。
3). 高可用的數據:保證數據存儲高可用的手段主要是數據備份和失效轉移機制。
4). 高可用網站的軟件質量保證:
a. 網站發佈:一般經過發佈腳原本完成發佈。發佈過程當中,每次關閉的服務器都是集羣中的一小部分,並在發佈完成後當即能夠訪問,所以整個發佈過程不影響用戶使用。
b. 自動化測試:自動化測試工具能夠一鍵完成系統部署,測試數據生成、測試執行、測試報告生成等所有測試過程
c. 預發佈驗證:沙箱測試,與真實線上環境儘可能保持一致。
d. 代碼控制:a. 主幹開發,分支發佈:b. 分支開發,主幹發佈:
這兩種方式各有優缺點。主幹開發,分支發佈,主幹代碼反應目前整個應用的狀態,一目瞭然,便於管理和控制,也利於持續集成。分支開發,主幹發佈方式,各個分支獨立進行,互不干擾,可使不一樣發佈週期的開發
在同一應用中進行。
e. 自動化發佈:人干預越少,自動化程度越高,引入故障的可能性就越小,火車準點到達,你們按時下班的可能性就越大。
f. 灰度發佈:
5). 網站運行監控:不容許沒有監控的系統上線。
a. 監控數據採集:用戶行爲日誌收集;服務器性能監控
b. 監控管理:系統報警;失效轉移;自動優雅降級
5. 永無止境:網站的伸縮性架構
1). 應用服務器集羣的伸縮性設計:DNS域名解析負載均衡;反向代理負載均衡;數據鏈路層負載均衡,例如:LVS(Linux Virtual Server)
2). 負載均衡算法:輪詢;加權輪詢;隨機;最少鏈接;源地址散列
3). 數據存儲服務器集羣的伸縮性設計:關係型數據庫集羣的伸縮性設計(主從讀寫分離;數據分庫);NoSQL數據庫的伸縮性設計
6. 隨需應變:網站的可擴展性架構
1). 構架可擴展的網站架構:開發低耦合系統是軟件設計的終極目標之一。
軟件架構師最大的價值不在於掌握多少先進的技術,而在於將具備將一個大系統分紅N個耦合的子模塊的能力,這些子模塊包含橫向的業務模塊,也包括縱向的基礎技術模塊。
2). 利用分佈式消息隊列下降系統耦合性:事件驅動架構(發佈與訂閱);分佈式消息隊列
3). 利用分佈式服務打造可複用的業務平臺:Web Service與企業級分佈式服務;分佈式服務框架設計(dubbo)
7. 固若金湯:網站的安全架構
1). 攻擊與防護:詳見:http://www.cnblogs.com/Jtianlin/p/5136340.html
2). 信息加密技術及密匙安全管理:單向散列加密;對稱加密;非對稱加密;密匙的安全管理: