如何學習spring cloud?spring cloud入門教程 springcloud架構
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的開發便利性巧妙地簡化了分散式系統基礎設施的開發,如服務發現註冊、配置中心、消息匯流排、負載均衡、斷路器、數據監控等,都可以用Spring Boot的開發風格做到一鍵啟動和部署。Spring並沒有重複製造輪子,它只是將目前各家公司開發的比較成熟、經得起實際考驗的服務框架組合起來,通過Spring Boot風格進行再封裝屏蔽掉了複雜的配置和實現原理,最終給開發者留出了一套簡單易懂、易部署和易維護的分散式系統開發工具包。
Spring Cloud的子項目,大致可分成兩類,一類是對現有成熟框架」Spring Boot化」的封裝和抽象,也是數量最多的項目;第二類是開發了一部分分散式系統的基礎設施的實現,如Spring Cloud Stream扮演的就是kafka, ActiveMQ這樣的角色。對於我們想快速實踐微服務的開發者來說,第一類子項目就已經足夠使用,如:
- Spring Cloud Netflix 是對Netflix開發的一套分散式服務框架的封裝,包括服務的發現和註冊,負載均衡、斷路器、REST客戶端、請求路由等。
- Spring Cloud Config 將配置信息中央化保存, 配置Spring Cloud Bus可以實現動態修改配置文件
- Spring Cloud Bus
分散式消息隊列,是對Kafka, MQ的封裝
- Spring Cloud Security 對Spring Security的封裝,並能配合Netflix使用
- Spring Cloud Zookeeper 對Zookeeper的封裝,使之能配置其它Spring Cloud的子項目使用
- Spring Cloud Eureka
Spring Cloud Eureka 是 Spring Cloud Netflix 微服務套件中的一部分,它基於Netflix Eureka 做了二次封裝,主要負責完成微服務架構中的服務治理功能。
Spring Cloud對於中小型互聯網公司來說是一種福音,因為這類公司往往沒有實力或者沒有足夠的資金投入去開發自己的分散式系統基礎設施,使用Spring Cloud一站式解決方案能在從容應對業務發展的同時大大減少開發成本。同時,隨著近幾年微服務架構和Docker容器概念的火爆,也會讓Spring Cloud在未來越來越「雲」化的軟體開發風格中立有一席之地,尤其是在目前五花八門的分散式解決方案中提供了標準化的、全站式的技術方案,意義可能會堪比當前Servlet規範的誕生,有效推進服務端軟體系統技術水平的進步。
我們先簡單闡述下Spring Cloud中文社區對四個基礎關鍵組件的描述:
社區地址:http://springcloud.cn/
Spring Cloud Config配置中心
Spring Cloud Config就是我們通常意義上的配置中心。Spring Cloud Config-把應用原本放在本地文件的配置抽取出來放在中心伺服器,本質是配置信息從本地遷移到雲端。從而能夠提供更好的管理、發布能力。
Spring Cloud Config分服務端和客戶端,服務端負責將git(svn)中存儲的配置文件發布成REST介面,客戶端可以從服務端REST介面獲取配置。但客戶端並不能主動感知到配置的變化,從而主動去獲取新的配置,這需要每個客戶端通過POST方法觸發各自的/refresh。
Spring Cloud Netflix 服務發現
Spring Cloud Eureka提供在分散式環境下的服務發現,服務註冊的功能。
Spring Cloud Netflix,該項目是Spring Cloud的子項目之一,主要內容是對Netflix公司一系列開源產品的包裝,它為Spring Boot應用提供了自配置的Netflix OSS整合。
通過一些簡單的註解,開發者就可以快速的在應用中配置一下常用模塊並構建龐大的分散式系統。它主要提供的模塊包括:服務發現(Eureka),斷路器(Hystrix),智能路由(Zuul),客戶端負載均衡(Ribbon)等。
Spring cloud Hystrix 熔斷器
斷路器(Cricuit Breaker)是一種能夠在遠程服務不可用時自動熔斷(打開開關),並在遠程服務恢復時自動恢復(閉合開關)的設施。
斷路器(Cricuit Breaker)是一種能夠在遠程服務不可用時自動熔斷(打開開關),並在遠程服務恢復時自動恢復(閉合開關)的設施,Spring Cloud通過Netflix的Hystrix組件提供斷路器、資源隔離與自我修復功能。
Spring Cloud Zuul 服務網關
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就擔任了這樣的一個角色,為微服務架構提供了前門保護的作用,同時將許可權控制這些較重的非業務邏輯內容遷移到服務路由層面,使得服務集群主體能夠具備更高的可復用性和可測試性。
推薦閱讀:
※Spring Security(二) -- Spring Security的Filter
※Spring Boot 1.5.x新特性:動態修改日誌級別
※快速了解spring事務七種傳播方式、事務的4種隔離級別、臟讀、重複讀、幻讀;
※用小說的形式講解Spring(1) —— 為什麼需要依賴注入
※Spring Cloud構建微服務架構:服務網關(過濾器)【Dalston版】
TAG:SpringCloud | Spring | 教程 |