1. 程式人生 > >基於Spring Boot和Spring Cloud實現微服務架構學習(四)

基於Spring Boot和Spring Cloud實現微服務架構學習(四)

feign 方法調用 規則 實現 uri ati .com 阻止 無法

Spring Cloud介紹

Spring Cloud是一個基於Spring Boot實現的雲應用開發工具,它為基於JVM的雲應用開發中的配置管理、服務發現、斷路器、智能路由、微代理、控制總線、全局鎖、決策競選、分布式會話和集群狀態管理等操作提供了一種簡單的開發方式。

Spring Cloud與Dubbo對比

提到Dubbo,我想順便提下ESB,目前央視新華社也在用ESB來做任務編排,這裏先比較下Dubbo和ESB:

ESB(企業數據總線),一般采用集中式轉發請求,適合大量異構系統集成,側重任務的編排,性能問題可通過異構的方式來進行規避,無法支持特別大的並發。

Dubbo(服務註冊管理),采用的是分布式調用,註冊中心只記錄地址信息,然後直連調用,適合並發及壓力比較大的情況;其側重服務的治理,將各個服務顆粒化,各個子業務系統在程序邏輯上完成業務的編排。

回歸主題,Spring Cloud和Dubbo又有什麽不同那,首先,我們看下有什麽相同之處,它們兩都具備分布式服務治理相關的功能,都能夠提供服務註冊、發現、路由、負載均衡等。說到這,Dubbo的功能好像也就這麽多了,但是Spring Cloud是提供了一整套企業級分布式雲應用的完美解決方案,能夠結合Spring Boot,Docker實現快速開發的目的,所以說Dubbo只有Spring Cloud的一部分RPC功能,而且也談不上誰好誰壞。不過,Dubbo項目現已停止了更新,淘寶內部由hsf替代dubbo,我想這會有更多人傾向Spring Cloud了。

從開發角度上說,Dubbo常與Spring、zookeeper結合,而且實現只是通過xml來配置服務地址、名稱、端口,代碼的侵入性是很小的,相對Spring Cloud,它的實現需要類註解等,多少具有一定侵入性。

Spring Cloud子項目

Spring Cloud包含了多個子項目(針對分布式系統中涉及的多個不同開源產品),之前在第一章節也介紹這些,比如:Spring Cloud Config、Spring Cloud Netflix、Spring Cloud CloudFoundry、Spring Cloud AWS、Spring Cloud Security、Spring Cloud Commons、Spring Cloud Zookeeper、Spring Cloud CLI等項目,可以跳至(一)看下。

配置服務

Spring Cloud提供了Config Server,它有在分布式系統開發中做外部配置的功能,通過Config Server我們可以集中存儲所有應用的配置文件。Config Server支持Git或者在文件系統中放置配置文件(GitLab),通常我們使用不同格式來區分不同應用的不同配置文件。雲計算環境下,習慣上使用YAML配置,而且一般配置文件的位置都放在類路徑下的config目錄下,配置文件規則:應用名+profile.yml:

/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties

Spring Cloud提供了註解@EnableConfigServer來啟動配置服務。

服務發現

Spring Cloud通過Netflix OSS的Eureka來實現服務發現,服務發現的主要目的是為了讓每個服務之間可以互相通信。Eureka Server為微服務的註冊中心。談到Spring Cloud Netflix,它是Spring Cloud的子項目之一,主要提供的模塊包括:服務發現(Eureka),斷路器(Hystrix),智能路有(Zuul),客戶端負載均衡(Ribbon)等。

Spring Cloud使用註解的方式提供了Eureka服務端(@EnableEurekaServer)和客戶端(@EnableEurekaClient)。

路由網關

路由網關的主要目的是為了讓所有的微服務對外只有一個接口,我們只需訪問一個網關地址,即可由網關將所有的請求代理到不同的服務中。Spring Cloud是通過Zuul來實現的,支持自動路由映射到在Eureka Server上註冊的服務。Spring Cloud提供了註解@EnableZuulProxy來啟用路由代理。

負載均衡

Spring Cloud提供了Ribbon和Feign作為客戶端的負載均衡。在Spring Cloud下,使用Ribbon直接註入一個RestTemplate對象即可,此RestTemplate已做好負載均衡的配置;而使用Feign只需定義個註解,有@FeignClient註解的接口,然後使用@RequestMapping註解在方法上映射遠程的REST服務,此方法也是做好了負載均衡配置。

斷路器

斷路器(Circuit Breaker)主要是為了解決當某個方法調用失敗的時候,調用後備方法來替代失敗的方法,已達到容錯/阻止級聯錯誤的功能。Spring Cloud使用@EnableCircuitBreaker來啟用斷路器支持,使用@HystrixCommand的fallbackMethod來指定後備方法。(@HystrixCommand(fallbackMethod="fallbackOper"))

Spring Cloud還提供了一個控制臺來監控斷路器的運行情況,通過@EnableHystrixDashboard註解開啟。

Spring Cloud依賴庫

這裏我會羅列下常用的一些依賴包,為了更好理解每個依賴所負責的區域,我還是用一張和之前類似的圖來展示各塊的功能:

技術分享圖片

常用依賴包如下:完整項目的源碼來源 技術支持2147775633

spring-cloud-starter-parent 具備spring-boot-starter-parent同樣功能並附加Spring Cloud的依賴

spring-cloud-starter-config 默認的配置服務依賴,快速自動引入服務的方式,端口8888

spring-cloud-config-server/client 用戶自定義配置服務的服務端/客戶端依賴

spring-cloud-starter-eureka-server 服務發現的Eureka Server依賴

spring-cloud-starter-eureka 服務發現的Eureka客戶端依賴

spring-cloud-starter-hystrix/zuul/feign/ribbon 斷路器(Hystrix),智能路有(Zuul),客戶端負載均衡(Ribbon)的依賴

angular-ui-router 頁面分發路由依賴

基於Spring Boot和Spring Cloud實現微服務架構學習(四)