分佈式系統的技術棧
前言
最近在拜讀耗子兄-分佈式系統技術棧一文,如今記錄下本身學到的東西前端
構建分佈式系統的目的
- 提升總體架構的吞吐量,服務更多的併發和流量。
- 大流量處理,經過集羣技術把大規模併發請求的負載分散到不一樣的機器上。
- 提升系統的穩定性,讓系統的可用性更高。
- 關鍵業務保護。提升後臺服務的可用性,把故障隔離起來阻止多米諾骨牌效應(雪崩效應),若是流量過大,須要對業務降級,以保護關鍵業務
提升系統的性能
- 緩存系統:緩存分區、緩存更新、緩存命中
- 負載均衡系統(網關係統):負載均衡、服務路由、服務發現
- 異步調用:消息隊列、消息持久、異步事務
- 數據鏡像:數據同步、讀寫分流、數據一致性
- 數據分區:分區策略、數據訪問層、數據一致性
緩存系統
- 能夠提升快速訪問能力。
- 從前端瀏覽器、網絡、後端服務、底層數據庫、文件系統、硬盤和CPU,全都有緩存。
- 對於分佈式緩存系統,首先須要一個緩存集羣,其中須要一個Proxy來作緩存的分片和路由
負載均衡
異步調用
- 經過消息隊列來對請求作排隊處理,把前端請求進行削峯,後端請求根據本身的處理速度來處理請求。
- 優勢:增長系統的吞吐量
- 缺點:實時性比較差,同時還會引入消息丟失的問題,因此須要對消息進行持久化,這會形成有狀態的節點,從而增長服務調度的難度。
數據分區和數據鏡像
- 把數據按照必定的方式分紅多個區,不一樣的數據來分擔不一樣區的流量,這須要一個數據路由的中間件,會致使跨庫Join和跨庫事務很是複雜。
- 數據鏡像:把多個數據庫備份,多個節點能夠提供數據讀寫功能,節點間在內部實現數據同步。缺點:數據一致性問題。
- 在初期使用讀寫分離的數據鏡像方式,後期採用分庫分表方式。
提升系統穩定性
- 服務拆分(服務治理):服務調用、服務依賴、服務隔離
- 服務冗餘(服務調度):彈性伸縮、故障轉移、服務發現
- 限流降級:異步隊列、降級控制、服務熔斷
- 高可用架構:多租戶系統、災備多活、高可用服務
- 高可用運維:全棧監控、DevOps、自動化運維
服務拆分
- 隔離故障
- 重用服務模塊
- 服務拆分完以後,會引入服務調用間的依賴問題。
服務冗餘
- 去除單點故障,並能夠支持服務的彈性伸縮以及故障轉移。
- 對於一些有狀態的服務來講,冗餘這些有狀態的服務會帶來更高的複雜性。
- 當其中一個進行彈性伸縮時,須要考慮數據的複製或從新分片,遷移的時候還要遷移數據到其餘機器上。
限流降級
- 當系統流量超過系統承載時,只能經過限流或者功能降級的方式來處理。
高可用架構
高可用運維
- DevOps中的CI(持續集成)/CD(持續部署)。
- 應該有一條很流暢的軟件發佈管線,包括足夠的自動化測試,還能夠作好相應的灰度發佈,以及線上系統的自動化控制。