1. 程式人生 > >大型網站核心架構要素

大型網站核心架構要素

目標 利用 保存數據 量化 代理服 均衡 速度 自動化測試 擴展性

1.性能——響應時間決定用戶

問題本質——用戶視角的網站性能:用戶的感受包括用戶計算機和網站服務器通信的時間網站服務器處理的時間用戶計算機瀏覽器構造請求解析響應數據的時間

即影響用戶體驗的有用戶計算機的性能網絡運營商寬帶服務的差異網站服務器性能(也跟網站代碼實現有關)用戶使用瀏覽器解析html的速度

開發人員視角的網站性能指標有:

(1)響應時間:從請求到收到最後響應數據的時間(如果測試的目標程序本身需要花費的時間極少,一般通過測試多次執行需要的總響應時間除以次數)。

(2)並發數:系統同時能夠處理請求的數目 ,反映系統的負載特性(通過多線程模擬並發的方式,為了模擬實際用戶,兩次請求之間加入一個隨機等等時間,這個時間間被稱作思考時間)。

註:網站系統用戶數>>網站在線用戶數>>網站並發用戶數

(3)吞吐量:單位時間內系統處理的請求數,體現系統的整體處理能力。

註:對於網站,吞吐量的衡量可以用‘請求數/秒’,‘頁面數/秒’,‘訪問人數/天’,‘處理的業務數/小時’等,常量化指標有:TPS(每秒事務數),HPS(每秒HTTP請求數),QPS(每秒查詢數)等。

(4)性能計數器:描述服務器或操作系統性能的一些數據指標,包括System Load、對象與線程數、內存使用、CPU使用、磁盤與網絡I/O等,這些指標也是系統監控的重要參數,可以對這些指標設置報警閾值,當監控系統發現性能計數器超過閾值時,就會報警。

註:System Load,即系統負載,指當前被CPU執行和等待被執行的進程數總和,反映系統忙閑程度(多核CPU情況下,完美情況是所有CPU都在使用,沒有進程在等待處理,所以Load的理想值是CPU數目,linux系統中用top命令查看,顯示的三個浮點數分別表示最近1分鐘,10分鐘,15分鐘的運行隊列平均進程數)

性能測試方法:見性能測試

主要優化手段:

(1)瀏覽器端:

瀏覽器緩存

使用頁面壓縮

合理布局頁面

減少Cookie傳輸

(2)CDN:將網站靜態內容分發至離用戶最近的網絡服務商機房,讓用戶通過最短訪問路徑獲取數據。

(3)反向代理服務器:緩存熱點文件,加快請求響應速度,減輕應用服務器壓力

(4)應用服務器端:

服務器本地緩存

分布式緩存

③通過異步操作將請求發送至消息隊列等待後續處理,加快請求響應及實現削峰;

集群

(5)代碼層面:多線程改善內存管理等。

(6)數據庫服務器端:索引緩存SQL優化,另外,方興未艾的NoSQL數據庫通過優化數據模型、存儲結構、伸縮性等手段在性能方面的優勢日趨明顯

衡量網站性能的一些指標:響應時間TPS系統性能計數器等。通過測試這些指標以確定系統設計是否達到目標。這些目標也是網站監控的重要參數,通過監控這些指標可以分析系統瓶頸,預測網站容量,並對異常指標進行報警,保障系統可用性

對於網站而言,性能符合預期僅僅是必要條件,因為無法預知網站可能會面臨的訪問壓力,所以必須要考察系統在高並發訪問情況下,超出負載設計能力的情況下可能會出現的性能問題

網站需要長時間持續運行,還必須保證系統在持續運行且訪問壓力不均勻的情況下保持穩定的性能特性

2.可用性——你能保證幾個9?

網站高可用設計的前提是必然會出現服務器宕機,而高可用設計的目標就是當服務器宕機的時候,服務或者應用依然可用。

提高可用性的方法:

(1)主要手段——冗余:

①應用服務器:多臺應用服務器通過負載均衡設備組成一個集群共同對外提供服務,任何一臺服務器宕機,只需把請求切換即可(前提是應用服務器沒保存會話信息)

②存儲服務器:對數據進行實時備份,當服務器宕機時將數據訪問轉移到可用服務器上,並進行數據恢復,以保證其他服務器宕機時數據依然可用

除了上述,還需要軟件開發過程的質量保證,通過預發布驗證、自動化測試、自動化發布、灰度發布等手段,減少將故障引入線上環境的可能,避免故障範圍擴大

3.伸縮性:通過不斷向集群中添加服務器的手段來緩解不斷上升的用戶並發訪問壓力和不斷增長的數據存儲需求

(1)衡量標準:

  ①是否可以多臺服務器構建集群?

  ②是否容易向集群中添加新服務器?

  ③加入服務器後是否能提供無差別服務?

④集群中可容納的服務器數量是否有限制?

(2)主要手段:

  ①應用服務器:使用合適的負載均衡設備(應用服務器上不保存數據);

  ②緩存服務器:加入新服務器可能使緩存路由失效,對嚴重依賴緩存的應用可能會導致崩潰,所以需要改進緩存路由算法保證緩存數據的可訪問性;

  ③數據庫服務器:關系數據庫支持數據復制,主從熱備,但是很難做到大規模集群的可伸縮性。所以集群伸縮性方案必須在數據庫之外實現,通過路由區分等手段將部署有多個數據庫的服務器組成一個集群;nosql對伸縮性的支持通常都很好。

4.擴展性——不痛不癢新業務就上線了

衡量標準:增加新業務時是否對現有產品透明無影響,不需要任何改動或者很少改動既有業務功能就可以上線新產品。

主要手段:

(1)事件驅動架構:通常利用消息隊列實現,將消息產生和消息處理分開,可以透明地增加生產者任務或消費者任務

(2)分布式服務:將業務和可復用服務分離,通過分布式服務框架調用。

5.安全性

安全架構:保護網站不受惡意訪問和攻擊,保護網站重要數據不被竊取

衡量標準:針對現存和潛在的各種攻擊與竊密手段,是否有可靠的應對策略。

大型網站核心架構要素