單體架構的好處
1.應用開發簡單
2.易於對應用程序進行大規模的更改
3.測試相對簡單直觀
4.部署簡單明了
5.橫向擴展容易
單體架構的壞處
1.過度的復雜度
系統本身過於龐大和復雜,以至於任何一個開發者都很難以理解它的全部。
這種極度的復雜度會形成惡性循環,由於代碼難以理解,因此開發人員更改更容易出錯,每一次更改系統更復雜,更難懂。
2.開發速度緩慢
因為應用太大,每啟動一次都需要很長的時間,因此從編輯到構建、運行再到測試這個周期花費的時間越來越長。
3.代碼部署的周期很長,而且容易出問題
程序更改部署到生產環境的時間變得更長.
代碼庫復雜,以至於一個更改可能引起的影響是未知的。
開發團隊分為多個小組,當需要發布的時候漫長的合並和測試時間非常長。
4.難以擴展
不能做到按需擴展,只能是擴展整個系統。
5.交付可靠的單體應用是一項挑戰
單體程序缺乏可靠性,這個問題導致了頻繁的系統故障和宕機。
應用程序缺乏故障隔離,因為所有模塊都運行在同一個進程當中
6.需要長期以來某一個可能已經過時的技術棧
團隊長期使用一套相同的技術,單體架構使得采用新的框架和編程語言變的及其困難。
微服務架構
1.x軸: 多個相通實例之間實現請求的負載均衡
2.Y軸: 根據功能將應用程序拆分成服務
3.Z軸: 根據請求的屬性路由請求
X軸:多個相通實例之間實現請求的負載均衡
在負載均衡器之后運行應用程序的多個實例,負載均衡器在N個相同的實例之間分配請求,這是提高應用程序吞吐量和可用性的好方法.
Z軸: 根據請求的屬性路由請求
不同於X軸,Z軸根據請求當中的某一個條件來路由請求。下面例子中每個應用程序負責一部分id的用戶。對於應用程序需要處理增加的事務和數據量時,Z軸擴展是一種很好的擴展方式.
Y軸: 根據功能將應用程序拆分成服務
X軸和Z軸擴展有效地提升了應用程序的吞吐量和可用性,然而這兩種方式都沒有解決日益增長的開發問題和應用復雜性。所以我們需要采用Y軸擴展,也就是功能分解,把一個單體應用分成一組服務。
微服務定義:把應用程序功能性分解為一組服務的架構風格