更新時間:2022-10-10 09:35:05 來源:動力節(jié)點 瀏覽1759次
大家在學習Java的時候會學到Spring Cloud 教程,如果你去 Spring Cloud 的主頁,你會看到以下內(nèi)容:
Spring Cloud 為開發(fā)者提供了工具來快速構(gòu)建分布式系統(tǒng)中的一些常見模式(例如配置管理、服務發(fā)現(xiàn)、斷路器、智能路由、微代理、控制總線、一次性令牌、全局鎖、領導選舉、分布式會話,集群狀態(tài)) - Spring Cloud DocsSpring Cloud 不是一個單獨的項目,而是它們的一個集群。
下面顯示的只是這個保護傘下存在的項目的一小部分示例。
讓我們快速介紹一下 Spring Cloud 旗下的一些重要項目
Spring Cloud Netflix
Netflix 是最早使用微服務架構(gòu)的組織之一。在這個項目下,已經(jīng)有大量項目開源供公眾使用。Eureka、Hystrix 和 Zuul 是其中比較受歡迎的。
Spring Cloud 配置
該項目利用 Git 或 SVN 存儲庫為集中配置管理提供了一個框架。
Spring Cloud 總線
這使微服務和基礎設施組件能夠在分布式設置中相互通信。
現(xiàn)在讓我們看看我們在開發(fā)微服務應用程序時面臨的挑戰(zhàn),以及 Spring Cloud 為它們提供的解決方案。
配置管理
在具有微服務架構(gòu)的系統(tǒng)中,存在大量相互通信的小型微服務:
這些微服務中的每一個都需要跨多個環(huán)境執(zhí)行。在給定的環(huán)境中,可能會運行該微服務的多個實例。這意味著運維團隊需要為每個微服務管理大量配置信息。
Spring Cloud Config Server 為此類配置管理提供了解決方案
Spring Cloud 提供了一種方法,其中所有微服務的跨環(huán)境的所有配置都存儲在 Git 存儲庫中。Spring Cloud Config Server 然后將此信息公開給所有微服務。
將配置存儲在這樣一個集中的位置使運營團隊更容易管理應用程序/架構(gòu)。
考慮以下示例。
CurrencyCalculationService 微服務與另一個微服務 CurrencyExchangeService 進行通信。目前,CurrencyExchangeService 的三個實例正在運行。有可能在任何時間點都可以添加更多實例,或者可以刪除現(xiàn)有實例。
我們需要 CurrencyCalculationService 能夠在當時可用的實例之間分配負載。
需要動態(tài)找出當時 CurrencyExchangeService 的實例數(shù)量,并在它們之間分配負載。
該解決方案涉及多個組件。
服務注冊
所有微服務都向命名服務器注冊。Spring Boot 提供的選項之一是 Eureka。
服務發(fā)現(xiàn)
當任何微服務想要與另一個微服務通信時,它會詢問命名服務器。在上面的示例中,CurrencyCalculationService 可以向 Eureka 命名服務器詢問正在運行的 CurrencyExchangeService 實例。反過來,命名服務會將這些實例的 URL 提供回 CurrencyConversionService。
這有助于在通信微服務的實例之間建立動態(tài)關系。
負載均衡
當同一微服務有多個實例時,您希望在它們之間分配負載。Spring Cloud 提供的選項之一是客戶端負載平衡框架 Ribbon。
CurrencyCalculationService 使用 Ribbon 并跨 CurrencyExchangeService 的實例分發(fā)請求。
Feign 框架幫助我們編寫更簡單的 RESTful 客戶端。
在微服務架構(gòu)中,您需要完全了解微服務中發(fā)生的事情。
為了跟蹤請求,您需要為其分配一個唯一標識符。Spring Cloud Sleuth 有助于為每個請求分配一個標識符。您可以使用 Zipkin 之類的分布式跟蹤解決方案跨多個組件跟蹤請求。
所有的微服務都有一些共同的特性——安全性、日志記錄、分析等等。實現(xiàn)這些通用功能的最佳位置是什么?
API 網(wǎng)關為此類挑戰(zhàn)提供了很好的解決方案。
Netflix Zuul API 網(wǎng)關是實現(xiàn) API 網(wǎng)關的絕佳解決方案。
容錯
如果微服務宕機了怎么辦?其他微服務如何響應?
Hystrix 有助于提高微服務的容錯能力。
在本文中,我們查看了 Spring Cloud 項目,發(fā)現(xiàn)它是各種項目的保護傘。這些中的每一個都解決了與微服務相關的特定問題。重要的問題包括服務注冊、服務發(fā)現(xiàn)、負載分配、事件跟蹤、服務監(jiān)控和容錯。