大家好,我是陳一。如果文章對你有幫助,請留下一個寶貴的三連哦~ 萬分感謝!
目錄
一、Spring Cloud 是什么?
二、Spring Cloud 核心組件?
1. 服務發現 - Eureka?
2. ?負載均衡 - Ribbon?
3. 斷路器 - Hystrix?
??4. 網關 - Zuul?
三、Spring Cloud 應用場景?
四、面試真題
1. SpringCloud 和 Dubbo有那些區別?
2.?SpringBoot 和 SpringCloud,請談談你對他們的理解
3. Spring Cloud Config是如何實現配置中心的?
4.?雙十一期間,訂單服務調用庫存服務出現超時怎么解決
五、總結
一、Spring Cloud 是什么?
Spring Cloud 并不是一個單獨的框架,而是一系列框架的集合。它基于 Spring Boot 構建,提供了構建分布式系統的各種工具和組件,幫助開發者快速搭建可靠、可擴展的分布式系統。就好比你要搭建一個大型游樂場,Spring Cloud 就像是一套完整的搭建工具包,里面有建造過山車軌道的組件(服務發現)、管理游客流量的組件(負載均衡)等等,讓你能更輕松地把游樂場搭建起來。?
二、Spring Cloud 核心組件?
組件 | 作用 | 常用配置項 | 替代方案 |
---|---|---|---|
Eureka | 服務注冊中心 | 心跳間隔(30s)、失效時間(90s) | Nacos |
Ribbon | 負載均衡器 | 輪詢/隨機/響應時間權重 | LoadBalancer |
OpenFeign | 聲明式HTTP客戶端 | 超時時間、重試次數 | RestTemplate |
Hystrix | 服務熔斷 | 熔斷閾值(20次)、恢復時間(5s) | Sentinel |
Gateway | API網關 | 路由規則、過濾器鏈 | Zuul |
1. 服務發現 - Eureka?
作用:
Eureka 就像是游樂場里的游客信息中心。在分布式系統中,各個服務(可以想象成游樂場里的不同游樂設施)會向 Eureka 注冊自己的信息,包括服務地址、端口等。當其他服務需要調用某個服務時,就可以到 Eureka 這里來查找服務的位置。?
工作原理:?
服務提供者啟動后,會定期向 Eureka Server 發送心跳,告訴 Eureka 自己還 “活著”。?
服務消費者在調用服務前,先從 Eureka Server 獲取服務列表,然后根據一定的規則選擇一個服務實例進行調用。?
示例圖:
?
?
2. ?負載均衡 - Ribbon?
作用:Ribbon 如同游樂場入口處的排隊引導員。當有多個服務實例提供相同的服務時(比如有多個相同的旋轉木馬設施),Ribbon 會負責把客戶端的請求均衡地分配到這些實例上,避免某個實例壓力過大,而其他實例卻閑置。?
工作方式:?它會和 Eureka 配合使用,從 Eureka 獲取到服務實例列表后,在客戶端根據不同的負載均衡算法(如隨機、輪詢等)來選擇一個實例進行請求發送。?
負載均衡算法對比表格:??
算法名稱? | 描述? | 應用場景? |
輪詢? | 依次將請求分配到每個實例? | 實例性能相近時? |
隨機? | 隨機選擇一個實例? | 對負載均衡精度要求不高時? |
加權輪詢? | 根據實例權重分配請求,權重高的分配更多請求? | 實例性能有差異時? |
3. 斷路器 - Hystrix?
作用:Hystrix 像是游樂場里的安全閘。在分布式系統中,服務之間的調用可能會因為各種原因失敗(比如某個游樂設施臨時故障),如果大量的請求因為調用失敗而一直等待,會占用大量資源,甚至導致整個系統崩潰。Hystrix 通過熔斷機制,當某個服務調用失敗率達到一定閾值時,就會自動熔斷,不再繼續嘗試調用,而是直接返回一個預設的結果,避免故障擴散。?
工作流程:?
- 當請求調用服務時,Hystrix 會監控調用的成功和失敗次數。?
- 如果失敗率超過設定的閾值,斷路器就會打開,后續一段時間內的請求不再實際調用服務,而是直接返回 fallback(備用)結果。?
- 經過一段時間后,斷路器會進入半開狀態,嘗試放行少量請求,如果這些請求成功,斷路器就會關閉,恢復正常調用;如果失敗,斷路器再次打開。?
??4. 網關 - Zuul?
作用:Zuul 如同游樂場的大門。它是整個分布式系統對外的統一入口,所有外部請求都會先經過 Zuul。Zuul 可以對請求進行路由、過濾等操作,比如檢查游客(請求)是否有門票(權限),決定將游客引導到哪個游樂設施(服務)。?
功能:?
- 路由功能:根據請求的 URL 等信息,將請求轉發到對應的服務實例。?
- 過濾功能:可以在請求進入系統前或響應返回前,對請求和響應進行處理,如身份驗證、日志記錄等。?
三、Spring Cloud 應用場景?
1. 電商系統?
- 服務拆分:電商系統包含商品管理、訂單管理、用戶管理等多個功能模塊。可以將每個模塊拆分成獨立的服務,使用 Spring Cloud 進行管理。例如,商品服務負責管理商品信息的增刪改查,訂單服務負責處理訂單相關業務。通過服務發現和負載均衡,確保各個服務高效運行。?
- 高并發處理:在促銷活動期間,大量用戶同時訪問系統,可能會導致某些服務壓力過大。Hystrix 斷路器可以防止因某個服務故障而引發整個系統的雪崩效應。同時,Ribbon 負載均衡可以將用戶請求均勻分配到各個服務實例上,提高系統的并發處理能力。?
- 安全與權限管理:Zuul 網關可以對所有進入系統的請求進行身份驗證和權限檢查,確保只有合法用戶能夠訪問相應的服務,保障系統的安全性。?
2. 在線教育平臺?
- 課程服務:課程服務包含課程視頻播放、課程資料下載等功能。通過 Spring Cloud 的服務發現和負載均衡,將課程服務的請求分配到多個實例上,保證大量用戶同時觀看課程時的流暢性。?
- 用戶互動:如直播互動、評論等功能,可能涉及多個服務之間的調用。Hystrix 斷路器可以在某個服務出現故障時,保障其他服務的正常運行,提升用戶體驗。?
四、面試真題
1. SpringCloud 和 Dubbo有那些區別?
Spring Cloud 拋棄了Dubbo的RPC通信,采用的是基于HTTP的REST方式
Dubbo采用的是RPC調用,SpringCloud采用http的REST方式,
在一定程度上犧牲了調用上的性能,但是降低了代碼的強依賴性,是微服務架構更加靈活
2.?SpringBoot 和 SpringCloud,請談談你對他們的理解
SpringBoot可以離開SpringCloud獨立使用,開發項目,但SpringCloud離不開SpringBoot,屬于依賴關系;
Spring Cloud之所以離不開Spring Boot,是因為Spring Boot為構建微服務提供了必要的快速開發基礎、統一的依賴管理與啟動機制、強大的自動配置能力、嵌入式服務支持以及一致的開發體驗。這些特性使得Spring Cloud能夠專注于提供微服務架構層面的高級抽象和工具集,而無需重新實現Spring Boot已經解決的基礎問題,二者緊密結合,共同構成了構建現代微服務架構的強大工具鏈。
SpringBoot專注于快速、方便的開發單個個體微服務,SpringCloud關注全局的服務治理框架;
3. Spring Cloud Config是如何實現配置中心的?
Spring Cloud Config Server作為配置中心,從Git倉庫或其他配置存儲中讀取配置信息,客戶端通過Config Client組件從Config Server拉取配置,并自動更新。
4.?雙十一期間,訂單服務調用庫存服務出現超時怎么解決
-
設置Hystrix熔斷規則:20次調用失敗后熔斷5秒
-
降級方案:返回默認庫存信息+異步補單
-
配合儀表盤監控熔斷狀態
五、總結
Spring Cloud 框架通過提供一系列強大的組件,幫助開發者輕松構建分布式系統,解決了分布式系統中的服務發現、負載均衡、容錯處理、網關等關鍵問題。在實際項目中,根據不同的業務場景合理運用 Spring Cloud 的各個組件,能夠顯著提升系統的性能、可靠性和可擴展性。無論是面試還是在實際開發中,深入理解 Spring Cloud 都是非常有價值的。
翻過這座山,他們就會聽到你的故事!歡迎在評論區交流~