聊聊分散式系統

語言: 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相關。