分佈式系統的技術棧

分佈式系統的技術棧

前言

最近在拜讀耗子兄-分佈式系統技術棧一文,如今記錄下本身學到的東西前端

構建分佈式系統的目的

  • 提升總體架構的吞吐量,服務更多的併發和流量。
    • 大流量處理,經過集羣技術把大規模併發請求的負載分散到不一樣的機器上。
  • 提升系統的穩定性,讓系統的可用性更高。
    •  關鍵業務保護。提升後臺服務的可用性,把故障隔離起來阻止多米諾骨牌效應(雪崩效應),若是流量過大,須要對業務降級,以保護關鍵業務

提升系統的性能

  • 緩存系統:緩存分區、緩存更新、緩存命中
  • 負載均衡系統(網關係統):負載均衡、服務路由、服務發現
  • 異步調用:消息隊列、消息持久、異步事務
  • 數據鏡像:數據同步、讀寫分流、數據一致性
  • 數據分區:分區策略、數據訪問層、數據一致性

緩存系統

  • 能夠提升快速訪問能力。
  • 從前端瀏覽器、網絡、後端服務、底層數據庫、文件系統、硬盤和CPU,全都有緩存。
  • 對於分佈式緩存系統,首先須要一個緩存集羣,其中須要一個Proxy來作緩存的分片和路由

負載均衡

  • 是作水平擴展的關鍵技術。

異步調用

  • 經過消息隊列來對請求作排隊處理,把前端請求進行削峯,後端請求根據本身的處理速度來處理請求。
  • 優勢:增長系統的吞吐量
  • 缺點:實時性比較差,同時還會引入消息丟失的問題,因此須要對消息進行持久化,這會形成有狀態的節點,從而增長服務調度的難度。

數據分區和數據鏡像

  • 把數據按照必定的方式分紅多個區,不一樣的數據來分擔不一樣區的流量,這須要一個數據路由的中間件,會致使跨庫Join和跨庫事務很是複雜。
  • 數據鏡像:把多個數據庫備份,多個節點能夠提供數據讀寫功能,節點間在內部實現數據同步。缺點:數據一致性問題。
  • 在初期使用讀寫分離的數據鏡像方式,後期採用分庫分表方式。

提升系統穩定性

  • 服務拆分(服務治理):服務調用、服務依賴、服務隔離
  • 服務冗餘(服務調度):彈性伸縮、故障轉移、服務發現
  • 限流降級:異步隊列、降級控制、服務熔斷
  • 高可用架構:多租戶系統、災備多活、高可用服務
  • 高可用運維:全棧監控、DevOps、自動化運維

服務拆分

  • 隔離故障
  • 重用服務模塊
  • 服務拆分完以後,會引入服務調用間的依賴問題。

服務冗餘

  • 去除單點故障,並能夠支持服務的彈性伸縮以及故障轉移。
  • 對於一些有狀態的服務來講,冗餘這些有狀態的服務會帶來更高的複雜性。
    • 當其中一個進行彈性伸縮時,須要考慮數據的複製或從新分片,遷移的時候還要遷移數據到其餘機器上。

限流降級

  • 當系統流量超過系統承載時,只能經過限流或者功能降級的方式來處理。

高可用架構

  • 主要時爲了避免出現單點故障。

高可用運維

  • DevOps中的CI(持續集成)/CD(持續部署)。
  • 應該有一條很流暢的軟件發佈管線,包括足夠的自動化測試,還能夠作好相應的灰度發佈,以及線上系統的自動化控制。
相關文章
相關標籤/搜索