網際網路三高架構論文
網際網路三高架構論述
陶鯨澤
摘要:網際網路有三高架構,三高分別是:高併發,高效能,高可用。其中最關注的軟體質量的屬性是:效能、可用性、伸縮性、擴充套件性、安全性這幾個方面。而構建此類系統,最常見的架構模式有:橫向分層、縱向分割、分散式化、叢集化、使用快取、使用非同步模式、使用冗餘、自動化。
關鍵詞:高併發,高效能,高可用
1高併發
1.1 什麼是高併發
⾼併發是互聯⽹分散式系統架構設計中必須考慮的因素之⼀,它通常是指,通過設計保證系統能夠同時並⾏處理很多請求。
⾼併發相關常⽤的⼀些指標有響應時間,吞吐量,每秒查詢率
響應時間:系統對請求做出響應的時間。例如系統處理⼀個HTTP請求需要200ms,這個200ms就是系統的響應時間。
吞吐量:單位時間內處理的請求數量。
QPS:每秒響應請求數。在互聯⽹領域,這個指標和吞吐量區分的沒有這麼明顯。
併發⽤戶數:同時承載正常使⽤系統功能的⽤戶數量。
1.2怎麼提高程式的高併發
提高程式高併發的兩種方法:垂直擴充套件與⽔平擴充套件
垂直擴充套件:提升單機處理能⼒,垂直擴充套件的⽅式⼜有兩種:
(1)增強單機硬體效能。
(2)提升單機架構效能。
⽔平擴充套件:增加伺服器數量,一旦伺服器數量增加就能線性擴充系統性能。
2高效能
2.1什麼是效能:
效能,是一個速度的概念,單位時間內可以處理的任務數量,效能的影響因素大多與
2.2 效能與CPU的關係
CPU越快,應用的效能一定越好嗎?
絕對的。只不過CPU和應用效能提升可能不成線性增長的關係,因為應用可能是IO密集型,應用效能還會受到IO阻塞的影響。
CPU越多,應用的效能一定越好嗎?
大部分情況是的。如果大量鎖存在,效能提升可能會大打折扣,因為並行能力會被鎖住,又變成單執行緒執行了,沒有最大的發揮多CPU的作用。
伺服器越多,效能一定越好嗎?
大部分情況是的。但是單個伺服器的效率可能會是下降的,資料一致性問題、同步問題、鎖問題,這些都會導致單個伺服器的效率下降,所以不是線性相關。
關於CPU利用率:
如果只是考慮應用對CPU利用效率的話:單核=多核=多伺服器
單程序/單執行緒的系統對於伺服器資源的利用率更高。
到多核的系統中,就會因為鎖的問題,多工同步的問題,作業系統排程的問題,造成一定的資源浪費。而分散式系統中,這些浪費也會更嚴重。
怎樣更好的更有效的利用伺服器資源呢?
避免因為IO阻塞讓CPU閒置,導致CPU的浪費;
避免多執行緒間增加鎖來保證同步,導致並行系統序列化;
避免建立、銷燬、維護太多程序、執行緒,導致作業系統浪費資源在排程上;
3高可用
3.1 什麼是高可用
”高可用“就是可以正常提供服務。通常會使用下面三個指標來衡量
MTBF:系統可用時長。
MTTR:系統從故障後到恢復正常所耗費的時間。
SLA:服務等級協議,用於評估服務可用性等級。計算公式是 MTBF/(MTBF+MTTR)。
假設系統一直能夠提供服務,我們說系統的可用性是100%。
3.2 怎麼解決高可用
所以在常用的架構設計中,主要通過2個方面來解決高可用:
垂直分層,將各個服務不用層上的應用進行切割,從而降低每層服務的複雜度,達到降低整體出錯的概率。
水平冗餘, 就是在每一層上進行多個服務的冗餘,再加上故障的自動轉移,就可以提高服務的可用性。
3.3常見的網際網路分層架構
常見網際網路分散式架構如上,分為:
(1)客戶端層:典型呼叫方是瀏覽器browser或者手機應用APP
(2)反向代理層:系統入口,反向代理
(3)站點應用層:實現核心應用邏輯,返回html或者json
(4)服務層:如果實現了服務化,就有這一層
(5)資料-快取層:快取加速訪問儲存
(6)資料-資料庫層:資料庫固化資料儲存
整個系統的高可用,又是通過每一層的冗餘+自動故障轉移來綜合實現的
參考文獻:
1:b站up主文章《聊聊網際網路"三高"架構》;
2:百度文庫(網際網路架構如何實現高併發);