微服務架構的優勢與劣勢
優勢:
1. 高度模塊化,邊界清晰
模塊化帶來高內聚、低耦合,提升重用能力。例如我們在代碼中使用類來實現模塊化。
隨著系統的演化,我們會產生各種類庫、組件來實現模塊化,并且能在跨團隊之間實現重用。
微服務則是以服務的形式,在更高的層面實現模塊化,各個團隊各自獨立開發與維護自己的服務,并提供給其他團隊使用。
2. 可獨立部署。
微服務可以由單個團隊進行獨立開發、獨立部署,不需要很多其他的團隊來協助。
3. 兼容不同的技術棧
微服務是分散式治理,不存在集中式管理的問題。各個團隊可以按照自己擅長的技術棧來提供微服務,對于微服務的使用方來講,根本不需要關注提供方的技術棧。
盡管微服務可以兼容不同的技術棧,但在公司內或者一個大部門內還是建議盡量統一技術棧,可以在一定程度上減少成本。
劣勢:
1. 分布式帶來的高度復雜性
相對于單體應用中開發人員會十分清晰各個模塊如何運作,微服務帶來的分布式會導致開發人員可能并不完整地知道整個大系統、大業務是如何運作的。
2. 最終一致性問題
微服務中各個團隊的數據是分散式治理的,不同團隊是允許有對同一概念的數據有不同的拷貝的。例如電商系統中的訂單數據,A團隊可以有自己的拷貝,B團隊可以有自己的拷貝,C團隊也可以有自己的拷貝。當A團隊對訂單數據進行了修改時,就需要將相關被修改的數據同步到B與C團隊。這里就涉及數據一致性的問題,需要有對應的數據一致性方案,否則就會造成業務上出現不能接受的結果。
3. 運維復雜
分布式系統有著數量龐大的各種服務,各種服務自己需要相互協同。在可靠性、穩定性、監控、容量規劃方面都有很高的要求。
4. 測試復雜性
以往的單體應用中,單個測試團隊可以完整地覆蓋整個應用的各個場景。但到了分布式系統中,各個微服務是分散到各個不同的系統中,而不同的系統又由不同的團隊來負責。那么測試的時候就需要聯合多個團隊進行測試,測試的復雜性就變得非常高。
想要了解更多政策信息可以咨詢中培課程顧問李老師18911709446(同微信)