現在的架構很多,各種各樣的,如高併發架構、異地多活架構、容器化架構、微服務架構、高可用架構、彈性化架構等,還有和這些架構相關的管理型的技術方法,如 DevOps、應用監控、自動化運維、SOA 服務治理、去 IOE 等等,還有很多。
那什麼是分散式系統?
分散式系統是支援分散式處理的軟體系統,是由通訊網路互聯的多處理機體系結構上執行任務的系統。包括分散式作業系統、分散式程式設計語言及其編譯系統、分散式檔案系統分散式資料庫系統等,當然這些也是分散式的關鍵技術。
使用分散式系統主要有:
- 1.增大系統容量。我們的業務量越來越大,而要能應對越來越大的業務量,一臺機器的效能已經無法滿足了,我們需要多臺機器才能應對大規模的應用場景。所以,我們需要垂直或是水平拆分業務系統,讓其變成一個分散式的架構。
- 2.加強系統可用。我們的業務越來越關鍵,需要提高整個系統架構的可用性,這就意味著架構中不能存在單點故障。這樣,整個系統不會因為一臺機器出故障而導致整體不可用。所以,需要通過分散式架構來冗餘系統以消除單點故障,從而提高系統的可用性。
- 3.因為模組化,所以系統模組重用度更高
- 4.因為軟體服務模組被拆分,開發和釋出速度可以並行而變得更快
- 5.系統擴充套件性更高
- 6.團隊協作流程也會得到改善
分散式系統的型別有三種:
- 1.分散式處理,但只有一個總資料庫,沒有區域性資料庫
- 2.分層式處理,每一層都有自己的資料庫
- 3.充分分散的分散式網路,沒有中央控制部分,各節點之間的聯絡方式又可以有多種,如鬆散的聯接,緊密的聯接,動態的聯接,廣播通知式的聯接等
然後來對比一下單體應用和分散式架構的優缺點:
傳統單體框架 | 分散式服務化框架 | |
---|---|---|
新功能開發 | 需要時間 | 容易開發和實現 |
部署 | 不經常且容易部署 | 經常釋出,部署複雜 |
隔離性 | 故障影響範圍大 | 故障影響範圍小 |
架構設計 | 難度小 | 難度級數增加 |
系統效能 | 響應時間快,吞吐量小 | 響應時間慢,吞吐量大 |
系統運維 | 運維簡單 | 運維複雜 |
新人上手 | 研究曲線大(應用邏輯) | 研究曲線大(架構邏輯) |
技術 | 技術單一且封閉 | 技術多樣且開放 |
測試和差錯 | 簡單 | 複雜 |
系統擴充性 | 擴充性很差 | 擴充性很好 |
系統管理 | 重點在於開發成本 | 重點在於服務治理和排程 |
- 1.從上面的表格可以看到,分散式系統雖然有一些優勢,但也存在一些問題
- 2.架構設計變得複雜(尤其是其中的分散式事務)
- 3.部署單個服務會比較快,但是如果一次部署需要多個服務,部署會變得複雜
- 4.系統的吞吐量會變大,但是響應時間會變長
- 5.運維複雜度會因為服務變多而變得很複雜
- 6.架構複雜導致學習曲線變大
- 7.測試和查錯的複雜度增大
- 8.技術可以很多樣,這會帶來維護和運維的複雜度
- 9.管理分散式系統中的服務和排程變得困難和複雜
所以總結一下,分散式系統架構的難點在於系統設計,以及管理和運維。所以分散式系統架構在解決了一些問題的同時,也增加了其他的問題,這就需要不斷的再用各種各樣的技術跟手段去解決這些新增的問題。後續會跟上分散式系統架構的搭建以及使用。