spring Cloud是一個基於Spring Boot實現的雲應用開發工具,它爲基於JVM的雲應用開發中的配置管理、服務發現、斷路器、智能路由、微代理、控制總線、全局鎖、決策競選、分佈式會話和集羣狀態管理等操做提供了一種簡單的開發方式。 須要JAVA Spring Cloud大型企業分佈式微服務雲構建的B2B2C電子商務平臺源碼 一零三八七七四六二六html
Spring Cloud與Dubbo對比spring
提到Dubbo,我想順便提下ESB,目前央視新華社也在用ESB來作任務編排,這裏先比較下Dubbo和ESB:bash
ESB(企業數據總線),通常採用集中式轉發請求,適合大量異構系統集成,側重任務的編排,性能問題可經過異構的方式來進行規避,沒法支持特別大的併發。架構
Dubbo(服務註冊管理),採用的是分佈式調用,註冊中心只記錄地址信息,而後直連調用,適合併發及壓力比較大的狀況;其側重服務的治理,將各個服務顆粒化,各個子業務系統在程序邏輯上完成業務的編排。併發
迴歸主題,Spring Cloud和Dubbo又有什麼不一樣那,首先,咱們看下有什麼相同之處,它們兩都具有分佈式服務治理相關的功能,都可以提供服務註冊、發現、路由、負載均衡等。說到這,Dubbo的功能好像也就這麼多了,可是Spring Cloud是提供了一整套企業級分佈式雲應用的完美解決方案,可以結合Spring Boot,Docker實現快速開發的目的,因此說Dubbo只有Spring Cloud的一部分RPC功能,並且也談不上誰好誰壞。不過,Dubbo項目現已中止了更新,淘寶內部由hsf替代dubbo,我想這會有更多人傾向Spring Cloud了。app
從開發角度上說,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-boot
配置服務 Spring Cloud提供了Config Server,它有在分佈式系統開發中作外部配置的功能,經過Config Server咱們能夠集中存儲全部應用的配置文件。Config Server支持Git或者在文件系統中放置配置文件(GitLab),一般咱們使用不一樣格式來區分不一樣應用的不一樣配置文件。雲計算環境下,習慣上使用YAML配置,並且通常配置文件的位置都放在類路徑下的config目錄下,配置文件規則:應用名+profile.yml:微服務
[html] view plain copy
/{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依賴庫
這裏我會羅列下經常使用的一些依賴包,爲了更好理解每一個依賴所負責的區域,我仍是用一張和以前相似的圖來展現各塊的功能:
經常使用依賴包以下:
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 頁面分發路由依賴