微服務架構落地及其演進
微服務架構的定義:
圖片
如何篩選微服務:
圖片
三種場景可以考慮使用微服務
(Are you tall enough?)
- 規(guī)模大(團隊超過10人)
- 業(yè)務復雜度高(系統(tǒng)超過5個子模塊)
- 需要長期演進(項目周期超過半年)
其他因素篩選微服務
- 軟件功能變化頻繁,快速迭代,縮短交付周期為核心的業(yè)務。
- 模塊有獨立的生命周期,服務復用,降本增效,減少重復造輪子
- 有獨立的隔離性需求和擴展性需求(容錯)
- 簡化的外部依賴(Facade模式場景)
如何拆分微服務:
圖片
拆分
- Domain-Driven Design (DDD)
- Domain(領域): 領域是指與某個特定問題相關的知識領域和行為。在設計微服務時,首先要識別和定義業(yè)務領域。
- Bounded Context(界限上下文): 界限上下文定義了領域的邊界。在拆分微服務時,要確保每個服務有明確的邊界,獨立承擔特定的業(yè)務功能。
- 業(yè)務功能模塊化
將系統(tǒng)按照業(yè)務功能拆分成多個模塊,每個模塊對應一個或多個微服務。例如:訂單服務、用戶服務、支付服務等。
垂直拆分
圖片左側展示了不同層次的架構設計,從實體層到接口適配層再到控制層,可以根據(jù)這些層次進行垂直拆分,使每個微服務獨立處理特定的功能。
構建
12-Factor App 方法論
- I. 基準代碼: 一份基準代碼,多份部署。每個微服務應該有自己的代碼庫。
- II. 依賴: 顯式聲明和隔離依賴關系。確保微服務之間的依賴關系清晰明確。
- III. 配置: 在環(huán)境中存儲配置。將配置和代碼分離,以便在不同環(huán)境中輕松部署。
- IV. 后端服務: 把后端服務當作附加資源。微服務應能夠獨立調用其他后端服務。
- V. 構建、發(fā)布、運行: 嚴格分離構建和運行階段。確保每個微服務的構建和運行環(huán)境一致。
- VI. 進程: 以一個或多個無狀態(tài)進程運行應用。微服務應該無狀態(tài),方便擴展。
- VII. 端口綁定: 通過端口綁定提供服務。每個微服務獨立運行并監(jiān)聽自己的端口。
- VIII. 并發(fā): 通過進程模型進行擴展。根據(jù)需要動態(tài)擴展微服務實例。
- IX. 易處理: 快速啟動和優(yōu)雅終止,確保最大化健壯性。微服務應快速啟動并能平滑關閉。
- X. 環(huán)境等價: 盡可能的保持開發(fā)、預發(fā)布、線上環(huán)境相同。確保不同環(huán)境的一致性。
- XI. 日志: 把日志當作事件流。集中管理和分析日志。
- XII. 管理進程: 后臺管理任務作為一次性進程運行。后臺任務應獨立運行。
DevOps 實踐
自動化部署:使用CI/CD管道實現(xiàn)代碼的自動構建、測試和部署。
持續(xù)監(jiān)控:對微服務的運行狀態(tài)進行持續(xù)監(jiān)控,確保服務的高可用性。
技術選型
選擇合適的技術棧和工具來支持微服務的開發(fā)和運維。例如:Spring Boot、Docker、Kubernetes等。
微服務架構的兩種建設思路:
圖片
SpringCloud的技術生態(tài):
圖片
Spring Cloud提供了一整套微服務架構的解決方案,通過服務注冊與發(fā)現(xiàn)、配置管理、消息隊列、分布式跟蹤、服務熔斷等組件,幫助開發(fā)者構建高可用、高擴展性的微服務系統(tǒng)。這張生態(tài)圖展示了各個組件之間的關系和作用,是理解Spring Cloud生態(tài)系統(tǒng)的一個很好的參考。
Service(服務)
- 服務注冊:使用Eureka或Consul進行服務注冊。
- 服務調用:通過Feign進行服務調用,依賴Ribbon實現(xiàn)負載均衡。
- 服務跟蹤:使用Sleuth進行分布式服務跟蹤。
- 服務熔斷:使用Hystrix實現(xiàn)服務熔斷,Turbine用于集群監(jiān)控。
- 依賴管理:使用CLI服務調用腳本,任務調度和數(shù)據(jù)流(Data Flow)管理。
- 大數(shù)據(jù):通過JPA封裝JDBC連接大數(shù)據(jù)。
- 配置管理:通過Config Server管理配置,支持本地和遠程Git倉庫。
Consumer(消費者)
- 消息消費:通過Spring Cloud Stream與RabbitMQ或Kafka集成,實現(xiàn)消息隊列的消費。
- 服務發(fā)現(xiàn):通過Eureka或Consul發(fā)現(xiàn)服務。
- 服務安全:通過Security實現(xiàn)服務的安全管理。
- 網(wǎng)關:使用Zuul實現(xiàn)網(wǎng)關功能,處理外部請求。
- 服務配置:在服務啟動時通過Config Server獲取配置信息。
Spring Boot Bus
- 廣播消息:用于整個服務集群統(tǒng)一廣播消息,例如刷新配置。
其他組件
- Cluster管理:使用Redis和其他集群管理工具(如Cluster)管理集群。
- 容器化部署:使用Docker和Linux進行容器化部署,支持命令行(CLI)調用服務。
消息隊列
- 消息發(fā)布與訂閱:使用Spring Cloud Stream集成RabbitMQ和Kafka,實現(xiàn)消息的發(fā)布與訂閱。
配置管理
- Config Server:管理配置文件,支持從本地或遠程Git倉庫獲取配置,Spring Boot應用在啟動時會從Config Server獲取配置。
安全與網(wǎng)關
- Security:提供服務的安全認證與授權。
- Zuul:作為網(wǎng)關,處理外部請求并路由到相應的服務。
分布式跟蹤
- Sleuth:提供分布式系統(tǒng)的請求跟蹤。
- Turbine:用于監(jiān)控Hystrix的集群服務。
負載均衡
- Ribbon:在Feign調用時,Ribbon提供負載均衡功能。
任務調度與數(shù)據(jù)流
- Task:用于任務調度。
- Data Flow:管理數(shù)據(jù)流。
微服務和SpringCloud的架構復雜性:





























