微服務 (Microservices) vs 單體式 (Monolithic) 系統比較

MicroservicesMonolithic
部署 (Deployment)應用程式基於特定的業務能力界定多個微服務,每個微服務爲獨立可各別被部署應用程式只有一個單元的主體
耦合性 (Coupling)每個微服務已元件化,彼此間的溝通只透過 API 連結,因而形成良好的寬鬆耦合 (loose coupling)功能模組之間沒有良好的隔離而造成緊密耦合 (tight coupling)
延展性 (Scalability)可以視微服務的負載情形而各別擴展系統資源只能對系統整體採以複製 (clone) 的方式擴展
開發 (Development)可以依微服務的性質採不同的實現技術;每個微服務的實作團隊可以並行分工開發只能選擇一種特定的實作技術;團隊的分工大都採以模組的切割,或依據分層的技術,需要較高的專案管理 Effort
維護性 (Maintenance)每個微服務可以個別獨立建置、部署與維護由於只有單體式的系統,所以管理與維護會依系統規模度而有着等比複雜度的提昇
適用系統性質平台 (Platform)、產品 (Product)專案 (Project)
適合系統規模大型涵蓋多個業務範疇 (如 ERP) 的系統小型團隊建構規模較小的系統
適合雲端服務非常適合系統規模越大,就越難以部署至雲端平台上
系統開發難易度• 需有總體架構規劃,架構師 (Architect) 或架構團隊需有效界定微服務的邊界 (Bounded Context),以及制定微服務間的 API 協定
• 微服務平行分工的開發團隊需高度正向的密切溝通,持續整合不僅涵蓋技術,也包括人
因大都採以資料導向 (data oriented) 的開發模式,所以初期開發容易;但隨着系統規模度與變動性的議題,很容易導致複雜度的提昇,系統易淪於僵化而難以維護
軟體思維顧問

專職軟體輔導與教育訓練的獨立顧問。輔導企業資訊單位如何有效組織系統開發與維護;輔導開發人員達成有效的專業分工。傳授如何把軟體作軟 (Keeping Software Soft)的技能,得以提昇系統的彈性/延展,並進而創造系統的再利用價值。

Personal