Spring Cloud是什麼?

Spring Cloud是一個相對比較新的微服務框架,今年(2016)才推出1.0的release版本. 雖然Spring Cloud時間最短, 但是相比Dubbo等RPC框架, Spring Cloud提供的全套的分佈式系統解決方案。

Spring Cloud 爲開發者提供了在分佈式系統(配置管理,服務發現,熔斷,路由,微代理,控制總線,一次性token,全居瑣,leader選舉,分佈式session,集羣狀態)中快速構建的工具,使用Spring Cloud的開發者可以快速的啓動服務或構建應用、同時能夠快速和雲平臺資源進行對接。

我們先簡單闡述下Spring Cloud中文社區對四個基礎關鍵組件的描述:

社區地址:http://springcloud.cn/

Spring Cloud Config配置中心

微服務框架-SpringCloud簡介

Spring Cloud Config就是我們通常意義上的配置中心。Spring Cloud Config-把應用原本放在本地文件的配置抽取出來放在中心服務器,本質是配置信息從本地遷移到雲端。從而能夠提供更好的管理、發佈能力。

Spring Cloud Config分服務端和客戶端,服務端負責將git(svn)中存儲的配置文件發佈成REST接口,客戶端可以從服務端REST接口獲取配置。但客戶端並不能主動感知到配置的變化,從而主動去獲取新的配置,這需要每個客戶端通過POST方法觸發各自的/refresh。

Spring Cloud Netflix 服務發現

微服務框架-SpringCloud簡介
Spring Cloud Eureka提供在分佈式環境下的服務發現,服務註冊的功能。

Spring Cloud Netflix,該項目是Spring Cloud的子項目之一,主要內容是對Netflix公司一系列開源產品的包裝,它爲Spring Boot應用提供了自配置的Netflix OSS整合。

通過一些簡單的註解,開發者就可以快速的在應用中配置一下常用模塊並構建龐大的分佈式系統。它主要提供的模塊包括:服務發現(Eureka),斷路器(Hystrix),智能路由(Zuul),客戶端負載均衡(Ribbon)等。

Spring cloud Hystrix 熔斷器

微服務框架-SpringCloud簡介

斷路器(Cricuit Breaker)是一種能夠在遠程服務不可用時自動熔斷(打開開關),並在遠程服務恢復時自動恢復(閉合開關)的設施。

斷路器(Cricuit Breaker)是一種能夠在遠程服務不可用時自動熔斷(打開開關),並在遠程服務恢復時自動恢復(閉合開關)的設施,Spring Cloud通過Netflix的Hystrix組件提供斷路器、資源隔離與自我修復功能。

Spring Cloud Zuul 服務網關

微服務框架-SpringCloud簡介

Spring Cloud Eureka提供在分佈式環境下的服務發現,服務註冊的功能。

Spring Cloud Netflix,該項目是Spring Cloud的子項目之一,主要內容是對Netflix公司一系列開源產品的包裝,它爲Spring Boot應用提供了自配置的Netflix OSS整合。通過一些簡單的註解,開發者就可以快速的在應用中配置一下常用模塊並構建龐大的分佈式系統。它主要提供的模塊包括:服務發現(Eureka),斷路器(Hystrix),智能路有(Zuul),客戶端負載均衡(Ribbon)等。

當然Spring Cloud還有額外擴展的其它很多組件,包括了服務鏈路監控和跟蹤(很關鍵的一個功能),消息總線,數據流處理,批量任務處理等。而對於整個Spring Cloud微服務框架簡單來說,即是:

你只要劃分到你的微服務組件和模塊,並定義好需要暴露的API接口,那麼剩下的整個開發和傳統方式沒有太大的區別,你開發完成的組件集成起來就是一個分佈式可擴展的微服務環境。裏面設計到的接口發佈,服務註冊,服務調用和路由,服務監控,健康檢測和流控等都會由微服務框架來幫你完成。

正是有了成熟的微服務框架,我們才更應該將微服務架構設計重心從技術底層轉移到組件劃分和接口設計上。


SpringCloud和Dubbo的區別問題

對於兩者的區別在如下文章有詳細描述可以參考:

http://blog.didispace.com/microservice-framework/

可以看到SpringCLoud能夠提供的基礎能力要多於Dubbo,Dubbo可以看作是SpringCLoud簡單實現。

Dubbo是RPC服務治理框架,和Spring Cloud一樣具備服務註冊、發現、路由、負載均衡等能力。但是沒有配置中心,完整的好用全鏈路監控,需要採用開源的解決方案定製或者自研。Spring cloud的配置中心,全鏈路監控等組件。從目前來看,Spring Cloud國內中小型企業用的比較多,大型企業可能需要對其需要的組件進行定製化處理。

但是也需要看到Spring Cloud基於註解的服務發現,服務治理等功能具有代碼侵入性,dubbo沒有代碼侵入性,業務開發人員不需要通過註解的方式去關注框架級別的處理。從中間件或者做基礎架構的角度來看,其實服務治理等功能對普通的業務程序員應該是透明的,業務程序員不需要關注服務治理框架的使用,專注於業務代碼即可。

基於SpringCLoud微服務框架的實踐

對於基於SpringCLoud框架的具體實踐,建議參考翟永超博客的系列文章,具體如下:

  • 服務註冊和發現:http://blog.didispace.com/springcloud1/
  • 服務消費:http://blog.didispace.com/springcloud2/
  • 服務熔斷機制:http://blog.didispace.com/springcloud3/
  • 服務配置中心:http://blog.didispace.com/springcloud4/
  • 服務網關:http://blog.didispace.com/springcloud5/
  • 高可用服務註冊中心:http://blog.didispace.com/springcloud6/
  • 消息總線:http://blog.didispace.com/springcloud7/

服務註冊和發現

注意這裏仍然使用的是SpringBoot框架,並和SpringBoot框架進行了集成,在pom.xml配置文件中增加了對SpringCLoud相關包和組件的依賴。在原有的接口API定義的基礎上,我們增加@EnableDiscoveryClient註解後,即可以讓服務註冊中心很輕鬆的發現服務提供方以及提供的服務。

服務消費


方式1 - Ribbon是一個基於HTTP和TCP客戶端的負載均衡器。Ribbon可以在通過客戶端中配置的ribbonServerList服務端列表去輪詢訪問以達到均衡負載的作用。當Ribbon與Eureka聯合使用時,ribbonServerList會被DiscoveryEnabledNIWSServerList重寫,擴展成從Eureka註冊中心中獲取服務端列表。

方式2 - Feign是一個聲明式的Web Service客戶端,它使得編寫Web Serivce客戶端變得更加簡單。我們只需要使用Feign來創建一個接口並用註解來配置它既可完成。它具備可插拔的註解支持,包括Feign註解和JAX-RS註解。Feign也支持可插拔的編碼器和解碼器。Spring Cloud爲Feign增加了對Spring MVC註解的支持,還整合了Ribbon和Eureka來提供均衡負載的HTTP客戶端實現。

斷路器

首先在pom.xml文件中增加引入對hystrix依賴,同時在消費端Application主類上增加@EnableCircuitBreaker註解開啓斷路器功能。注意原有的服務消費方式也涉及到修改,增加了服務Callback的回調函數。

服務網關

服務網關是微服務架構中一個不可或缺的部分。通過服務網關統一向外系統提供REST API的過程中,除了具備服務路由、均衡負載功能之外,它還具備了權限控制等功能。Spring Cloud Netflix中的Zuul就擔任了這樣的一個角色,爲微服務架構提供了前門保護的作用,同時將權限控制這些較重的非業務邏輯內容遷移到服務路由層面,使得服務集羣主體能夠具備更高的可複用性和可測試性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章