????????微服務(或微服務架構)是一種云原生架構方法,其中單個應用程序由許多松散耦合且可獨立部署的較小組件或服務組成。本單元主要介紹微服務架構的定義、微服務的特征、微服務架構面臨的挑戰、Spring Cloud 定義、Spring Cloud 核心組件、Spring Cloud Alibaba 定義、Spring Cloud Alibaba 組件等相關知識。
一、了解微服務架構
1. 微服務架構的定義
????????微服務架構(Microservices Architecture)是一種云原生的架構模式,它將一個大型單體應用拆分為多個獨立部署、松散耦合、輕量級的小型服務。每個服務專注于單一業務功能,并通過輕量級協議(如HTTP/REST或gRPC)進行通信。
2. 微服務的特征
-
獨立部署:每個微服務可以獨立開發、測試、部署和擴展,不影響其他服務。
-
松耦合:服務之間通過定義良好的API交互,減少依賴。
-
單一職責:每個服務只負責一個特定的業務功能。
-
技術異構性:不同服務可以采用不同的編程語言、數據庫或技術棧。
-
去中心化治理:團隊可以自主選擇適合自身服務的技術方案。
-
容錯性:單個服務故障不會導致整個系統崩潰。
3.?單體應用架構、垂直應用架構、分布式架構、SOA和微服務架構
3.1?單體應用架構
????????所有功能模塊集中在一個代碼庫中,打包為單一應用部署。
3.2?垂直應用架構
????????按業務拆分為多個獨立單體應用(如電商拆分為訂單、用戶、商品系統)。
3.3?分布式架構
????????分布式架構把工程分成服務層和表現層兩個部分,服務層中包含業務邏輯,表現層只需處理和頁面的交互。
3.4?SOA架構
????????在分布式架構下,當服務越來越多時,容量的評估、小服務資源的浪費等問題逐漸顯現,需要增加一個注冊中心對集群進行實時管理。
3.5?微服務架構
????????微服務架構在某種程度上是 SOA,它更加強調服務的“徹底拆分”。簡單地說,微服務架構就是將單體應用進一步拆分成更小的服務,每個服務都是一個可以獨立運行的項目。
3.6?五種架構模式對比分析
架構類型 | 優點 | 缺點 | 適用場景 |
---|---|---|---|
單體應用架構 (Monolithic) | -?開發簡單:代碼集中,調試方便。 -?部署簡單:單個應用包,運維成本低。 -?事務管理容易:ACID 事務保證數據一致性。 | -?耦合度高:修改一個功能可能影響整個系統。 -?擴展性差:只能整體擴展,無法按需伸縮。 -?技術棧單一:難以引入新語言或框架。 -?維護困難:代碼臃腫后難以重構。 | 小型項目、初創企業、低并發業務。 |
垂直應用架構 (Vertical) | -?按業務拆分:不同功能獨立部署,減少耦合。 -?可針對性優化:不同業務可采用不同技術棧。 -?擴展性提升:可按業務模塊單獨擴展。 | -?重復開發:公共功能(如用戶認證)需重復實現。 -?數據一致性難:跨系統交互需額外處理。 -?系統間調用復雜:依賴 HTTP/RPC,性能較低。 | 中型系統,業務模塊相對獨立(如電商:訂單、商品分離)。 |
分布式架構 (Distributed) | -?高性能:通過 RPC(如 Dubbo)實現高效通信。 -?模塊化:服務可獨立開發部署。 -?容錯能力:單點故障不影響整體。 | -?復雜度高:需處理網絡延遲、分布式事務等。 -?運維成本高:需管理多個節點和中間件。 -?調試困難:跨服務問題追蹤復雜。 | 高并發、高性能需求場景(如金融交易系統)。 |
SOA (面向服務架構) | -?服務復用:通過 ESB(企業服務總線)整合服務。 -?標準化接口:基于 SOAP/WSDL,適合企業集成。 -?松耦合:服務可獨立演進。 | -?ESB 易成瓶頸:中心化架構,性能受限。 -?笨重:XML/SOAP 協議冗余,效率低。 -?部署復雜:依賴大量中間件。 | 大型企業系統整合(如ERP、銀行核心系統)。 |
微服務架構 (Microservices) | -?高內聚低耦合:服務職責單一,獨立擴展。 -?技術異構性:不同服務可用不同技術棧。 -?彈性伸縮:按需擴容,資源利用率高。 -?快速迭代:小團隊專注單個服務。 | -?運維復雜:需容器化、CI/CD、監控等配套。 -?分布式問題:數據一致性、事務管理難度大。 -?網絡開銷:服務間通信增加延遲。 | 互聯網級應用、云原生場景(如電商平臺、社交App)。 |
二、了解Spring Cloud
1. Spring Cloud 定義
Spring Cloud 是基于 Spring Boot 的一套微服務治理框架,提供了一系列工具(如服務發現、配置中心、負載均衡、熔斷器等),簡化分布式系統的開發。
2. Spring Cloud 核心組件
(1) 服務注冊與發現
-
Eureka(Netflix 開源)
-
服務提供者注冊到 Eureka Server,消費者通過服務名調用。
-
適用場景:中小規模 Spring Cloud 項目。
-
缺點:2.x 版本停止維護,推薦替代方案(如 Nacos)。
-
-
Nacos(Alibaba 開源)
-
支持服務注冊發現 + 動態配置管理,兼容 Spring Cloud 和 Dubbo。
-
優勢:AP/CP 模式可切換,適合云原生場景。
-
(2) 負載均衡
-
Ribbon
-
客戶端負載均衡,集成于 OpenFeign 或 RestTemplate。
-
策略:輪詢、隨機、加權等。
-
-
Spring Cloud LoadBalancer(官方新推薦)
-
替代 Ribbon,支持 Reactive 編程(WebFlux)。
-
(3) 服務調用
-
OpenFeign
-
聲明式 REST 客戶端,通過接口注解(
@FeignClient
)定義調用。 -
示例:
@FeignClient(name = "order-service") public interface OrderClient {@GetMapping("/orders/{id}")Order getOrder(@PathVariable Long id); }
-
(4) 熔斷與降級
-
Hystrix(已停更)
-
通過?
@HystrixCommand
?實現熔斷和降級邏輯。
-
-
Resilience4j(推薦)
-
輕量級容錯庫,支持熔斷、限流、重試等。
-
-
Sentinel(Alibaba 開源)
-
實時監控流量,支持熔斷、熱點限流、系統自適應保護。
-
(5) API 網關
-
Spring Cloud Gateway(官方推薦)
-
基于 WebFlux 的高性能網關,支持動態路由、過濾器和限流。
-
示例路由配置:
spring:cloud:gateway:routes:- id: user-serviceuri: lb://user-servicepredicates:- Path=/api/users/**
-
-
Zuul(Netflix 舊版)
-
基于 Servlet 阻塞模型,性能較低,逐漸被淘汰。
-
(6) 分布式配置中心
-
Spring Cloud Config
-
將配置存儲在 Git/SVN,通過?
@RefreshScope
?實現動態刷新。
-
-
Nacos Config
-
更強大的替代方案,支持配置版本管理和灰度發布。
-
3.?Spring Boot 與 Spring Cloud 的關系
????????Spring Boot 是 Spring 的一套快速配置腳手架,用戶可以基于 Spring Boot 快速開發單個微服務,Spring Cloud 是基于 Spring Boot 實現的云應用開發工具;Spring Boot 專注于快速、方便集成的單個微服務個體,Spring Cloud 專注于全局的服務治理框架;Spring Boot 使用默認大于配置的理念,很多集成方案已經幫用戶選擇好了,Spring Cloud 的很大一部分是基于 Spring Boot 來實現的。
????????Spring Boot 可以離開 Spring Cloud 獨立使用,但是 Spring Cloud 離不開 Spring Boot,具有依賴關系。
三、Spring Cloud Alibaba 介紹
1. 概述
????????Spring Cloud Alibaba?是阿里巴巴開源的微服務解決方案,基于?Spring Cloud?標準生態構建,提供了一系列適用于云原生和分布式架構的組件。它整合了阿里巴巴在雙11等高并發場景下的實踐經驗,為微服務開發提供更強大、更穩定的支持。
2. 核心組件
組件 | 功能 | 替代 Spring Cloud 原生組件 |
---|---|---|
Nacos | 服務注冊與發現 + 動態配置中心(支持 AP/CP 模式) | Eureka + Config |
Sentinel | 流量控制、熔斷降級、系統自適應保護 | Hystrix / Resilience4j |
Seata | 分布式事務解決方案(支持 AT、TCC、Saga 模式) | 無官方替代(Spring Cloud 無完整方案) |
RocketMQ | 分布式消息隊列(高吞吐、低延遲) | RabbitMQ / Kafka |
Dubbo | 高性能 RPC 框架(可選,與 Spring Cloud 整合) | OpenFeign + RestTemplate |
Alibaba Cloud OSS | 對象存儲服務(文件上傳、下載等) | 無直接替代 |
3.?與 Spring Cloud 原生組件的對比
需求 | Spring Cloud 原生方案 | Spring Cloud Alibaba 方案 | 優勢比較 |
---|---|---|---|
服務注冊與發現 | Eureka(停止維護) | Nacos | Nacos 支持動態配置 + 更高可用性 |
熔斷降級 | Hystrix(停止維護) | Sentinel | Sentinel 支持實時監控 + 流量控制 |
分布式事務 | 無完整方案 | Seata | Seata 提供多模式事務支持 |
消息隊列 | 需整合 Kafka/RabbitMQ | RocketMQ | RocketMQ 更適合高并發、順序消息場景 |
????????微服務架構通過拆分單體應用,提高靈活性和可擴展性,但也帶來分布式系統的挑戰。Spring Cloud 和 Spring Cloud Alibaba 提供了一系列工具來簡化微服務的開發、治理和運維,使開發者能更專注于業務邏輯。