聊聊分佈式系統

語言: CN / TW / HK

隨着系統容量要求越來越大,系統可用性要求越來越高,分佈式系統幾乎已成為現在後端架構設計的必選之路,沒有人再會在單體和分佈式架構之間糾結了。那麼分佈式系統帶來了哪些優劣勢?

優勢: 1. 模塊化、系統模塊重用度更高,開發和發佈速度可以並行而變得更快 2. 系統擴展性更高 3. 團隊協作流程也得到改善

劣勢: 1. 架構設計更復雜,尤其是分佈式事務 2. 系統吞吐量變大,響應時間會變長 3. 運維複雜度因為服務變多而變得複雜 4. 測試和查錯複雜度增大 5. 技術多元化,維護和運維複雜度增大

一、分佈式系統的發展

image.png

  • 20世紀90年代前主要是單體架構,軟件模塊高度耦合。之前的SOA架構其實和單體架構沒有太多區別、都是高度耦合在一起。當你調用一個服務時、這個服務會調用另一個服務、然後又調用另一個服務、於是整個系統就轉起來了。這個本質上就是比較耦合的做法。

  • 2000年左右出現了比較鬆耦合的SOA架構,這個架構需要一個標準的協議或中間件來聯動其它相關的服務(ESB)。服務之間都是通過中間件的標準協議相互依賴,IOC和DIP設計思想就是此架構的實踐。

  • 在2010年後,出現了微服務架構,這個架構更為鬆耦合。每個微服務獨立完整地運行,後端單體的數據也被微服務架構分散到不同的服務中。而它與傳統SOA的差別在於,服務間的整合需要一個服務編排或是服務整合的引擎。

微服務的出現使得開發速度變得更快、隔離性高,但是集成測試、運維和服務管理更加複雜。所以需要一套比較好的微服務PaaS平台。如Spring Cloud、Dubbo等微服務框架,還有Kubernetes提供的各式各樣的部署和調度方式。

二、分佈式系統的技術棧

構建分佈式系統的目的是增大系統容量、提高系統的可用性。也就是完成下面兩件事:

  • 大流量處理。通過集羣技術把大量併發請求的負載分散到不同的機器上。
  • 關鍵業務保護。提高後台服務可用性,把故障隔離起來阻止多米諾骨牌效應。

總體來説一是提高整體架構的性能,服務更多的併發和流量;二是提高系統的穩定性,讓系統的可用性更高。

2.1、提高性能

  • 緩存系統:有效提高系統的訪問能力。
  • 負載均衡系統:水平擴展關鍵技術,讓更多機器共同分擔一部分流量請求。
  • 異步調用:通過消息隊列對請求做排隊處理、把前端的請求峯值給“削平”了,而後端通過自己能夠處理的速度來處理請求。
  • 數據分區和鏡像:數據分區把數據按一定的方式分成多個區,不同的數據來分擔不同區的流量。數據鏡像把一個數據庫鏡像成多份一樣的數據,這樣就不需要數據路由中間件了。

2.2、提高穩定性

  • 服務拆分:一是為了隔離故障、二是為了重用服務模塊。
  • 服務宂餘:去除單點故障,支持服務彈性伸縮,以及故障遷移。
  • 限流降級:系統扛不住壓力時,通過限流或者功能降級的方式停掉一部分服務,或是拒絕一部分用户,確保整個系統穩定。
  • 高可用架構:多租户隔離、災備多活、或是數據可以在其中複製保持一致性的集羣。
  • 高可用運維:DevOps的CI/CD(持續集成、持續部署)。

總體來説分佈式系統的關鍵技術,如下: - 全棧系統監控 - 服務、資源調度 - 流量調度 - 狀態、數據調度 - 開發和運維的自動化

image.png

三、微服務PaaS平台

PaaS平台應該具有分佈式、服務化、自動化部署、高可用、敏捷以及分層開發的特徵,並可與IaaS實現良好的聯動。 image.png

  • 服務化是PaaS的本質。軟件模塊重用,服務治理,對外提供能力是PaaS的本質。
  • 分佈式是PaaS的根本特性。多租户隔離、高可用、服務編排是PaaS的基本特性。
  • 自動化是PaaS的靈魂。自動化部署安裝運維,自動化伸縮調度是PaaS的關鍵。

PaaS平台的總體架構

image.png - PaaS調度層:PaaS的自動化和分佈式對於高可用高性能的管理。 - PaaS能力服務層:PaaS真正提供給用户的服務和能力。 - PaaS的流量調度:與流量調度相關的東西,包括對高併發的管理。 - PaaS的運營管理:軟件資源庫、軟件接入、認證和開放平台門户。 - PaaS的運維管理:DevOps相關。