
單體架構與微服務架構對比Spring Cloud 微服務入門指南—1.1 什么是單體架構單體架構Monolithic Architecture是指把應用的所有功能模塊全部打進同一個程序里部署后跑在同一個進程中的架構模式。它是傳統軟件開發中最常見、最基礎的架構形態。## 1.2 單體架構優缺點單體架構的優點優點說明開發簡單直觀代碼都在一個工程里不用處理分布式問題IDE 友好、調試方便小團隊能快速啟動部署方便快捷打一個 WAR/JAR 包即可發布不需要容器編排和服務編排測試容易集成端到端測試起一個應用就行不用為服務間依賴做一堆 mock集成測試覆蓋率高性能開銷小模塊間是進程內調用沒有網絡和序列化開銷響應延遲低技術棧統一團隊只學一套技術體系培訓和招人成本低事務一致性簡單本地事務就能保證數據一致不用碰分布式事務單體架構的缺點缺點說明代碼高度耦合功能一多模塊邊界就模糊改一處牽全身維護成本漲得很快擴展困難只能整個應用一起擴容沒法單獨給某個高負載模塊擴容資源利用率低技術棧受限全局一套選型想給某個模塊換技術很難新技術的采用受制于歷史包袱部署影響面大改一處就要全量發布風險高一次發布可能讓整個系統不可用啟動越來越慢代碼膨脹后啟動時間從幾秒漲到幾分鐘開發體驗和彈性伸縮都受影響團隊協作困難多團隊改同一個代碼庫沖突頻繁合并和發布的協調成本很高單點故障風險任何一個模塊的內存泄漏或異常都可能拖垮整個進程故障隔離能力弱技術債務累積改不動、不敢改的模塊越來越多架構腐化加劇新人上手門檻持續升高二、微服務架構上面介紹了單體架構這時候就要引入微服務架構了。2.1 什么是微服務架構微服務架構Microservices Architecture是把單一應用拆成一組小型、獨立部署的服務的架構風格。每個服務圍繞一個明確的業務能力構建跑在自己的進程里服務間通過輕量級通信機制如 HTTP/REST、消息隊列協作。簡單來說單體架構就像是把一堆藥材堆在一起而微服務架構則是把這堆藥材按功效做了分類。2.2 單體架構 與 微服務架構對比對比維度單體架構微服務架構架構理念一個應用包含一切每個服務做好一件事通信機制進程內方法調用零網絡開銷網絡遠程調用存在序列化與網絡開銷數據管理共享單一數據庫每服務獨享數據庫數據邊界清晰部署粒度全量構建全量部署單服務獨立構建獨立部署擴展能力整體復制無法精準擴容按服務負載獨立擴縮容故障隔離弱一處異常全盤崩潰強故障可隔離在單個服務運維復雜度低一套部署一套監控高需服務治理、分布式監控、容器編排適用階段項目初期、小型應用、團隊≤10人業務復雜、團隊規模化、需快速迭代選型建議架構選型沒有絕對優劣關鍵是匹配業務階段。項目初期優先用單體架構快速驗證業務模式當業務復雜度上升再逐步向微服務演進。盲目提前微服務化只會帶來不必要的復雜度。2.3 微服務架構優缺點微服務解決了單體的擴展瓶頸但也引入了分布式系統固有的復雜度。要不要上微服務需要把好處和代價都看明白。微服務架構的優點優點說明獨立部署與交付每個服務能獨立構建、測試、部署發布周期從周級縮短到天級甚至小時級CI/CD 友好彈性擴展可以只給某個高負載服務單獨擴容資源利用率高成本可控故障隔離單個服務故障不會拖垮全局配合熔斷降級能做到優雅降級而不是雪崩技術演進靈活單個服務能獨立重構、升級甚至重寫技術債務可控、迭代靈活可復用與可組合服務以 API 暴露能力可被多個前端或第三方復用沉淀企業能力中心微服務架構的缺點缺點說明分布式復雜性網絡不可靠、調用可能超時、服務可能宕機要處理重試、冪等、超時、降級等難題運維成本高服務從 1 個變成 N 個需要容器編排K8s、配置中心、服務網格、全鏈路監控等基礎設施支撐數據一致性難跨服務事務無法用本地 ACID 保證要引入 Saga、TCC、消息最終一致性等分布式事務方案服務通信開銷網絡調用帶來序列化/反序列化和網絡延遲開銷對時延敏感場景要專門優化調試與排障困難一個請求跨多個服務傳統單機調試失靈要依賴分布式鏈路追蹤如 Sleuth/Zipkin定位問題接口契約管理服務間 API 變更需版本管理和兼容性控制否則容易引發調用方故障測試復雜度高端到端測試要編排多服務依賴環境搭建和 mock 成本明顯上升安全邊界擴大服務間網絡通信帶來新的攻擊面需要服務間鑒權與 mTLS 等機制2.4 微服務拆分拆分是微服務落地最核心也最難的環節。拆得好系統清晰好維護拆得不好服務是拆了但耦合還在。拆分原則拆分的第一原則是圍繞業務能力拆而不是按技術分層拆。按技術分層拆的意思是把用戶接口數據訪問這些技術層單獨拆成服務這樣做每個業務變更都要橫跨多個服務協作服務自治就名存實亡了。而拆分方式也主要分為按模塊縱向拆分和抽取公共模塊橫向拆分。拆分時還要注意以下原則高內聚低耦合經常一起變更的功能放進同一個服務跨服務調用越少越好。單一職責一個服務對應一個明確的業務能力避免大而全。獨立數據所有權拆服務的同時把數據邊界劃好每個服務獨占自己的數據存儲禁止別的服務直接連它的數據庫表。三、Spring Cloud前面主要介紹微服務相關的概念接下來將簡單介紹微服務項目中常見的一個微服務架構——Spring CloudSpring Cloud 是什么Spring Cloud是基于 Spring Boot 構建的、面向微服務架構的一站式治理框架可以理解成微服務架構的基礎設施全家桶服務注冊發現、配置管理、API 網關、負載均衡、熔斷降級、分布式鏈路追蹤都有對應的組件。有個很形象的區分Spring Boot 解決單個微服務怎么快速構建Spring Cloud 解決多個微服務怎么協作治理。而且 Spring Cloud 本身是一套規范和抽象底層實現可以替換——比如服務注冊發現既可以用 Netflix 的 Eureka也可以用阿里的 NacosSpring Cloud 定義統一接口具體實現由各家提供。它的核心價值是你不用從零搭建分布式基礎設施靠注解和自動配置就能快速接入服務治理能力把精力放在業務邏輯本身。