1. 程式人生 > 其它 >網際網路三高架構設計

網際網路三高架構設計

網際網路三高架構:高併發、高效能、高可用技術

 

0  引言

當下時代發展下業務場景的迅速變化,對於系統架構的要求針對高併發,高可用,高效能的要求更是越來越高本文針對“三高”展開敘述。

1      高併發

1.1.1高併發的關心的問題

高併發是現在網際網路分散式框架設計必須要考慮的因素之一,它是可以保證系統能被同時並行處理很多請求,對於高併發來說,它的指標有:響應時間及吞吐量。

1.1.1.1  響應時間

系統對進來的請求反應的時間,比如你開啟一個頁面需要1秒,那麼這1秒就是響應時間。

1.1.1.2  吞吐量

吞吐量是指每秒能處理多少請求數量,好比你吃飯,每秒能吃下多少顆米飯。秒查詢率:秒查詢率是指每秒響應請求數,和吞吐量差不多。併發使用者數:同時承載正常使用系統功能的使用者數量。例如一個即時通訊系統,同時線上量一定程度上代表了系統的併發使用者數。

1.1.2高併發的巨集觀⽬標

    ⾼併發絕不意味著只追求⾼效能。從巨集觀角度看,⾼併發系統設計的⽬標有三個:⾼效能、⾼可⽤,以及⾼可擴充套件。就是所謂的“三⾼”,三⾼不是孤⽴的,⽽是相互⽀撐的。⾼效能:效能體現了系統的並⾏處理能⼒,在有限的硬體投⼊下,提⾼效能意味著節省成本。同時,效能也反映了⽤戶體驗,響應時間分別是100毫秒和1秒,給⽤戶的感受是完全不同的。⾼可⽤:表⽰系統可以正常服務的時間。另外,如果系統只能做到90%可⽤,也會⼤⼤拖累業務。⾼擴充套件:表⽰系統的擴充套件能⼒,流量⾼峰時能否在短時間內完成擴容,更平穩地承接峰值流量,⽐如雙11活動、明星離婚等熱點事件。

2  常見的網際網路分層架構

 

常見網際網路分散式架構如上,分為:客戶端層:典型呼叫方是瀏覽器browser或者應用APP。反向代理層:系統入口,反向代理。站點應用層:實現核心應用邏輯,返回HTML或者JSON。服務層:如果實現了服務化,就有這一層。資料-快取層:快取加速訪問儲存。資料-資料庫層:資料庫固化資料儲存。

2     分層水平擴充套件架構實現高併發架構

2.1.1  反向代理層的水平擴充套件

反向代理層的水平擴充套件,是通過“DNS輪詢”實現的:dns-server對於一個域名配置了多個解析ip,每次DNS解析請求來訪問dns-server,會輪詢返回這些ip。當nginx成為瓶頸的時候,只要增加伺服器數量,新增nginx服務的部署,增加一個外網ip,就能擴充套件反向代理層的效能,做到理論上的無限高併發。

2.1.2  站點層的水平擴充套件

站點層的水平擴充套件,是通過“nginx”實現的。通過修改nginx.conf,可以設定多個web後端。當web後端成為瓶頸的時候,只要增加伺服器數量,新增web服務的部署,在nginx配置中配置上新的web後端,就能擴充套件站點層的效能,做到理論上的無限高併發。

2.1.3  服務層的水平擴充套件

服務層的水平擴充套件,是通過“服務連線池”實現的。站點層通過RPC-client呼叫下游的服務層RPC-server時,RPC-client中的連線池會建立與下游服務多個連線,當服務成為瓶頸的時候,只要增加伺服器數量,新增服務部署,在RPC-client處建立新的下游服務連線,就能擴充套件服務層效能,做到理論上的無限高併發。

如果需要優雅的進行服務層自動擴容,這裡可能需要配置中心服務自動發現功能的支援。

2.1.4  資料層的水平擴充套件

  在資料量很大的情況下,資料層(快取,資料庫)涉及資料的水平擴充套件,將原本儲存在一臺伺服器上的資料(快取,資料庫)水平拆分到不同伺服器上去,以達到擴充系統性能的目的。

這裡需要注意的是,通過水平拆分來擴充系統性能,與主從同步讀寫分離來擴充資料庫效能的方式有本質的不同。

通過水平拆分擴充套件資料庫效能:每個伺服器上儲存的資料量是總量的1/n,所以單機的效能也會有提升;n個伺服器上的資料沒有交集,那個伺服器上資料的並集是資料的全集;資料水平拆分到了n個伺服器上,理論上讀效能擴充了n倍,寫效能也擴充了n倍(其實遠不止n倍,因為單機的資料量變為了原來的1/n)。   通過主從同步讀寫分離擴充套件資料庫效能:每個伺服器上儲存的資料量是和總量相同;n個伺服器上的資料都一樣,都是全集;理論上讀效能擴充了n倍,寫仍然是單點,寫效能不變。

4  結束語

併發量,是一個容量的概念,服務可以接受的最大任務數量,動態的看待它,還需要把效能考慮進去。效能,是一個速度的概念,單位時間內可以處理的任務數量。高併發和高效能是緊密相關的,提高應用的效能,是肯定可以提高系統的併發能力的。應用效能優化的時候,對於計算密集型和IO密集型還是有很大差別,需要分開來考慮。

增加伺服器資源(CPU、記憶體、伺服器數量),絕大部分時候是可以提高應用的併發能力和效能(前提是應用能夠支援多工平行計算,多伺服器分散式計算才行),但也是要避免其中的一些問題,才可以更好的更有效率的利用伺服器資源。

【分散式架構】“高併發” -- 詳解 - Honnnnl - 部落格園 (cnblogs.com)