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