架構設計中要考慮的核心五要素;
性能、可用性、擴展性、伸縮性、安全性
性能
性能的測試指標
-
響應時間
應用執行一個操作需要的時間,包括從發出請求開始到收到最后響應數據所需要的時間。響應時間是系統最重要的性能指標,直觀地反映了系統的“快慢”。下表列出了一些常用的系統操作需要的響應時間。 -
並發數
系統能夠同時處理請求的數目 - 吞吐量
單位時間內系統處理的請求數量;
如:TPS、QPS(每秒查詢數)
隨着並發數的增大,吞吐量隨着增大;
超過閾值后,並發數繼續增大,吞吐量下降,直到吞吐量降為0,網站宕機;
理解上述3個指標:類比高速公路行車
吞吐量就是每天通過的車輛數
並發數是正在行駛的車輛
響應時間是車速
性能測試方法
- 性能測試
以預期設定的性能值為目標,測試是否能滿足預期 - 負載測試
不斷加壓到安全臨界值 - 壓力測試
超過安全負載直到崩潰下的最大負載
下圖中的橫坐標表示消耗的系統資源,縱坐標表示系統處理能力(吞吐量)。在開始階段,隨着並發請求數目的增加,系統使用較少的資源就達到較好的處理能力(a~b段),這一段是網站的日常運行區間,網站的絕大部分訪問負載壓力都集中在這一段區間,被稱作性能測試,測試目標是評估系統性能是否符合需求及設計目標;隨着壓力的持續增加,系統處理能力增加變緩,直到達到一個最大值(c點),這是系統的最大負載點,這一段被稱作負載測試。測試目標是評估當系統因為突發事件超出日常訪問壓力的情況下,保證系統正常運行情況下能夠承受的最大訪問負載壓力;超過這個點后,再增加壓力,系統的處理能力反而下降,而資源消耗卻更多,直到資源消耗達到極限(d點),這個點可以看作是系統的崩潰點,超過這個點繼續加大並發請求數目,系統不能再處理任何請求,這一段被稱作壓力測試,測試目標是評估可能導致系統崩潰的最大訪問負載壓力。
性能測試反應的是系統在實際生產環境中使用時,隨着用戶並發訪問數量的增加,系統的處理能力。與性能曲線相對應的是用戶訪問的等待時間(系統響應時間),如圖所示。
在日常運行區間,可以獲得最好的用戶響應時間,隨着並發用戶數的增加,響應延遲越來越大,直到系統崩潰,用戶失去響應。
性能測試報告
測試結果報告應能夠反映上述性能測試曲線的規律,閱讀者可以得到系統性能是否滿足設計目標和業務要求、系統最大負載能力、系統最大壓力承受能力等重要信息,下表是一個簡單示例。
可用性
高可用的應用服務器
構建高可用的應用服務器關鍵是session的處理,如果能使得每天機器上處理的請求都無狀態,即可實現應用服務器的線性伸縮;服務器宕機后也可隨時將請求放到其它機器上再次處理;
而對於需要處理狀態信息的應用,解決方案是讓每台機器使用共享的Session服務器,本地上還是無狀態特征;
高可用的服務
設計要點
- 分級管理
區別核心應用和一般應用;在流量增加到超過網站的處理能力時,為了保證核心應用的可用性,可以將一般應用的服務停止,將資源讓位給核心服務;
比如博客中的博文顯示和博客的評論功能; - 超時設置
- 異步調用
- 服務降級
eg:twitter:隨機拒絕部分請求 - 冪等性設計
保證多次調用結果一致
高可用的數據
CAP原理
一個提高服務的存儲系統無法同時滿足以下三個條件
一致性(Consistency)
數據可用性(Avalibility)
分區耐受性(Patition Tolerance,系統具有跨網絡分區的伸縮性)
WEB架構設計中,通常為了保證高可用性,會犧牲一致性;
數據一致性分為:強一致、用戶一致、最終一致;
大型WEB站點一般只保證數據的最終一致性;
擴展性
在網站新增業務產品時,實現對現有產品無影響,透明上線新產品。
主要手段
- 事件驅動
利用消息隊列實現 - 分布式服務
將業務和可復用服務分離開
伸縮性
通過不斷向集群中加入服務器的手段來緩解不斷上升的用戶並發訪問壓力。
可能加入的服務器有以下4類,其伸縮性能各不相同;
應用服務器
通過設計實現集群內服務器對等,使用合適的負載均衡可保證良好的伸縮性;
緩存服務器
緩存服務器伸縮性良好,但新加入服務器后可能導致緩存路由失效;
通過改進緩存路由算法,比如Memcached的一致性Hash,可實現加入新的緩存服務器后對原有緩存的影響盡量減少;
數據庫服務器
很難做到大規模集群的可伸縮性
實現方式有:讀寫分離、數據表分庫
(單表拆分:Cobar)
也可考慮伸縮性方案在數據庫之外實現(通過路由分區)
NoSql產品
Nosql數據庫就是為海量數據而生,可輕松實現集群規模的線性伸縮;
(Hbase使用Zookeeper選舉master)
安全性
99.99%的設計標准:無單點、在線更新、自動切換
附:思維導圖
卓越亞馬遜地址: 《大型網站技術架構》
點擊查看原圖
Posted by: 大CC | 13APR,2014
博客:blog.me115.com [訂閱]
微博:新浪微博