分布式,避免高併發

2021-08-29 05:27:16 字數 1889 閱讀 7037

高併發(high concurrency)是網際網路分布式系統架構設計中必須考慮的因素之一,它通常是指,通過設計保證系統能夠同時並行處理很多請求。

吞吐量:單位時間內處理的請求數量。

qps:每秒響應請求數。在網際網路領域,這個指標和吞吐量區分的沒有這麼明顯。

網際網路分布式架構設計,提高系統併發能力的方式,方**上主要有兩種:垂直擴充套件(scale up)與水平擴充套件(scale out)

垂直擴充套件:提公升單機處理能力。垂直擴充套件的方式又有兩種:

(1)增強單機硬體效能,例如:增加cpu核數如32核,公升級更好的網絡卡如萬兆,公升級更好的硬碟如ssd,擴充硬碟容量如2t,擴充系統記憶體如128g;

(2)提公升單機架構效能,例如:使用cache來減少io次數,使用非同步來增加單服務吞吐量,使用無鎖資料結構來減少響應時間;

在網際網路業務發展非常迅猛的早期,如果預算不是問題,強烈建議使用「增強單機硬體效能」的方式提公升系統併發能力,因為這個階段,公司的戰略往往是發展業務搶時間,而「增強單機硬體效能」往往是最快的方法。

不管是提公升單機硬體效能,還是提公升單機架構效能,都有乙個致命的不足:單機效能總是有極限的。所以網際網路分布式架構設計高併發終極解決方案還是水平擴充套件。

常見網際網路分布式架構如上,分為:

(2)反向**層:系統入口,反向**

(3)站點應用層:實現核心應用邏輯,返回html或者json

(4)服務層:如果實現了服務化,就有這一層

(5)資料-快取層:快取加速訪問儲存

(6)資料-資料庫層:資料庫固化資料儲存

整個系統各層次的水平擴充套件,又分別是如何實施的呢?

四、分層水平擴充套件架構實踐

反向**層的水平擴充套件,是通過「dns輪詢」實現的:dns-server對於乙個網域名稱配置了多個解析ip,每次dns解析請求來訪問dns-server,會輪詢返回這些ip。

當nginx成為瓶頸的時候,只要增加伺服器數量,新增nginx服務的部署,增加乙個外網ip,就能擴充套件反向**層的效能,做到理論上的無限高併發。

當web後端成為瓶頸的時候,只要增加伺服器數量,新增web服務的部署,在nginx配置中配置上新的web後端,就能擴充套件站點層的效能,做到理論上的無限高併發。

站點層通過rpc-client呼叫下游的服務層rpc-server時,rpc-client中的連線池會建立與下游服務多個連線,當服務成為瓶頸的時候,只要增加伺服器數量,新增服務部署,在rpc-client處建立新的下游服務連線,就能擴充套件服務層效能,做到理論上的無限高併發。如果需要優雅的進行服務層自動擴容,這裡可能需要配置中心裡服務自動發現功能的支援。

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

網際網路資料層常見的水平拆分方式有這麼幾種,以資料庫為例:

按照範圍水平拆分

高併發(high concurrency)是網際網路分布式系統架構設計中必須考慮的因素之一,它通常是指,通過設計保證系統能夠同時並行處理很多請求。

提高系統併發能力的方式,方**上主要有兩種:垂直擴充套件(scale up)與水平擴充套件(scale out)。前者垂直擴充套件可以通過提公升單機硬體效能,或者提公升單機架構效能,來提高併發性,但單機效能總是有極限的,網際網路分布式架構設計高併發終極解決方案還是後者:水平擴充套件。

網際網路分層架構中,各層次水平擴充套件的實踐又有所不同:

(1)反向**層可以通過「dns輪詢」的方式來進行水平擴充套件;

(2)站點層可以通過nginx來進行水平擴充套件;

(3)服務層可以通過服務連線池來進行水平擴充套件;

(4)資料庫可以按照資料範圍,或者資料雜湊的方式來進行水平擴充套件;

額外還可以通過使用快取,以及動態頁面生成來緩解高併發

各層實施水平擴充套件後,能夠通過增加伺服器數量的方式來提公升系統的效能,做到理論上的效能無限。

高併發與分布式

一提到高併發很多人就會想到分布式,那麼二者到底有什麼區別呢?併發和分布是完全不同的概念。分布是將任務分發到不同的點上去,一般分布式最多的就是分布式計算。通過某種分布式程式設計方式,在不同的系統上利用各自的cpu,記憶體等進行計算,將結果匯集至控制中心,進行處理。比如最有名的就是分布式計算天氣的氣候阿...

高併發 分布式事務

一 2pc two phase commitment 請求進來,生成全域性雪花id,存本地執行緒變數,存request請求頭部head 消費者請求走服務1,自己做hystrix熔斷 服務裡面以標籤配置事務,事務做切點的攔截,切面幹事情,開啟子執行緒,且把子執行緒阻塞,一旦放開阻塞走提交。請求主線程繼...

高併發分布式佇列設計

訊息佇列提供了分布式集群系統架構中各個服務模組之間的訊息通訊,主 要解決應用解耦,非同步訊息,流量削鋒等問題,實現高效能,高可用,可伸縮 和最終一致性架構,其模型如下 應用解耦 模組之間僅依賴 通知 而沒有直接的介面呼叫,所以不存在依賴 可擴充套件性 佇列支援高可用部署,水平擴充套件容量和吞吐量 生...