1. 分佈式的優與劣
與傳統的單體架構相比,分佈式系統具有以下優勢:
- 增大了系統的容量。我們的業務量越來越大,就需要多臺機器來應對這種大規模的應用場景。因此我們可以使用分佈式的架構,來垂直或是水平的拆分業務;
- 加強了系統的可用性。我們的業務越來越關鍵,需要提供整個系統架構的可用性,這樣就不能存在單點故障。所以,通過分佈式架構來冗餘系統,提高系統的可用性;
- 使系統模塊化,可以提高模塊的重用度,同時系統的擴展性也更高了;
- 提高了開發和發佈速度,因爲軟件服務模塊被拆分,開發和發佈都可以並行;
不過,世界上不存在完美的技術方案,採用任何技術都有得有失,都是一種trade-off。也就是說,分佈式系統在消除上述問題的同時,也給我們帶來了其他問題。
- 架構設計變得複雜,尤其是分佈式的事務
- 部署變得複雜,一次可能需要部署多個服務
- 隨着系統的吞吐量變大,響應時間會變長
- 技術可以多樣性,服務變多,運維複雜度會變得很複雜
- 測試和查錯的複雜度增大,學習曲線也增大
綜上所述的,分佈式的優缺點可以概括爲下表
選項 | 傳統單體架構 | 分佈式服務化架構 |
---|---|---|
新功能開發 | 需要時間 | 容易開發和實現 |
部署 | 不經常且容易部署 | 經常部署、部署複雜 |
隔離性 | 故障影響範圍大 | 故障影響範圍小 |
架構設計 | 難度小 | 難度級係數增加 |
系統性能 | 響應時間快、吞吐量小 | 響應時間慢、吞吐量大 |
系統運維 | 運維簡單 | 運維複雜\ |
技術 | 技術單一且封閉 | 技術多樣性且開放 |
測試和查錯 | 簡單 | 複雜 |
系統擴展性 | 擴展性差 | 擴展性好 |
系統管理 | 重點在於開發成本 | 重點在於服務治理和調度 |
分佈式的難點在於系統的設計,以及管理和運維。所以,分佈式在架構在解決“單點”和“性能容量”問題的同時,也新增了一堆的問題。對於這些新增的問題,就需要各式各樣的技術和手段來解決。
2. 分佈式的關鍵技術
從2010年後,出現了微服務的架構,使分佈式更進一步的發展,它爲構造分佈式的計算應用程序提供了更好的方法。這種架構更加的鬆耦合,每個微服務都能獨立完整的運行,後端單體的數據庫也被分散到不同的服務中。在服務間通過一個引擎進行服務編排或整合,一般這種引擎可以是工作流引擎,也可以是網關。再加上像容器化的調度技術(如Kubernetes)的輔助,使的分佈式在當下變得更加流行。
分佈式系統有以下五個關鍵技術:
- 全棧系統監控
- 服務/資源調度
- 流量調度
- 狀態/數據調度
- 開發和運維的自動化
而最後一項—開發和運維的自動化,是需要把前四項都做到了,纔有可能實現的。所以,最爲關鍵的是下邊四項技術,即應用整體監控、資源和服務調度、狀態和數據調度及流量調度,它們是構建分佈式最最核心的東西。