Spring Cloud 入門教程:聊聊Spring Cloud
一、 Spring Cloud 是什麼?
Spring Cloud 是將分散式系統中一系列基礎框架/工具進行整合的框架。其中包含:服務註冊與發現、服務閘道器、熔斷器、配置中心、訊息中心、服務鏈路追蹤等等。
Spring Cloud 並沒有重複造輪子,Spring Cloud只是依賴於Spring Boot遮蔽掉了各個框架複雜的配置。所有的元件就相當於Spring Cloud的外掛,開發人員可以根據自己的需要自由結合使用。
有Spring Boot這個利器在,所有元件都可以輕鬆引入、便捷開發。也一定程度上降低了各元件的學習成本、除錯成本、讓開發人員可以輕鬆上手。
如果需要從0開始進行服務化體系構建,Spring Cloud一定是最低成本的選擇。
至少 ken.io 這麼覺得。:-)
二、 Spring Cloud 整合/集成了那些元件?
Spring Cloud Netflix
Netflix基本上可以說是公認的微服務架構建設的標杆,之所以Netflix能獲得這樣的稱號,這個離不開Netflix已經開源這些優秀的元件( https://netflix.github.io/ ),這些元件也可以說是Spring Cloud的核心。
- Netflix Eureka
服務註冊中心,支援基於HTTP的服務,支援自動服務的自動註冊與發現、負載均衡、故障轉移等。
- Netflix Hystrix
熔斷器,為訪問遠端服務、系統提供了熔斷機制,一旦外部服務超時或者發生故障,將會進行熔斷,以防單個或者少數服務發生故障時引起連鎖反應,導致所有服務上游或者相關服務被拖慢、甚至被拖垮。提高系統面對延遲和故障的容錯能力。
- Netflix Zuul
服務閘道器,支援動態路由、監控等,通過zuul可以實現鑑權等功能,也可以結合Hystrix做一些基礎的熔斷支援。
Spring Cloud Config
分散式配置中心。通過Spring Cloud Config,開發人員可以將原先放在application.yml中的配置,儲存在遠端伺服器(Git、SVN等)集中管理,降低應用配置的維護成本。
Spring Cloud Bus
事件中心,用於將服務和服務例項與分散式訊息一起連線,通常用於叢集間、甚至跨叢集的事件傳播(例如:配置變更)。所以Spring Cloud Bus通常會和Spring Cloud Config結合使用,方便應用自動獲取到配置變更的動作並完成配置的更新。
Spring Cloud Consul
服務註冊中心,同樣提供了服務的註冊與發現等功能。
Consul與Eureka二選一即可
Spring Cloud Security
基於Spring Security為Spring Cloud整合的元件提供安全性相關的功能,尤其是Zuul,通常是結合Zuul提供OAuth 2.0的校驗功能
Spring Cloud Sleuth
分散式服務鏈路追蹤客戶端工具,通常是結合Zipkin、HTrace等提供分散式服務鏈路追蹤的功能。
Spring Cloud OpenFeign
Feign是一個Java實現的HTTP Client。可以非常方便的通過HTTP協議請求外部資源。使用Feign訪問註冊到Eureka的服務,非常方便。
Spring Cloud Starters
基於Spring Boot的各元件的Starter,簡化Spring Cloud各元件的依賴管理。
Spring Cloud 還有以下成員:
Spring Cloud for Cloud Foundry,
Spring Cloud Open Service Broker,
Spring Cloud Cluster,
Spring Cloud Data Flow,
Spring Cloud Stream,
Spring Cloud Stream App Starters,
Spring Cloud Task,
Spring Cloud Task App Starters,
Spring Cloud Zookeeper,
Spring Cloud for Amazon Web Services,
Spring Cloud Connectors,
Spring Cloud CLI,
Spring Cloud Contract,
Spring Cloud Gateway,
Spring Cloud OpenFeign,
這裡 ken.io 就不一一介紹了,
三、 Spring Cloud 是否值得選擇?
對於中小型公司來說,自研完成微服務體系建設成本太高,通常來說是要採用開源的方案。
目前已經開源的微服務框架,有一定的群眾基礎的也只有Dubbo了。Dubbo也在2018年2月進入了Apache孵化器。Dubbo的服務註冊是依賴於Zookeeper,Dubbo框架本身更多的關注點是在RPC這塊。而Spring Cloud意圖就很明顯了,重在整合,依賴於Spring Boot,將各個框架的複雜度或者是框架之前結合的複雜度很大程度上進行了削減。
總結來說,Spring Cloud的思路就是,已經有的我拿來用,實在沒有的我再補充。
Spring Cloud相對於Dubbo來說,是整合了整套解決方案的框架,而Dubbo只是其中的一個點。
Dubbo相對於Spring Cloud更輕,不過選擇Dubbo就可能意味著跟其他元件的整合就需要付出更多一點的成本。對於ken這樣一個比較懶的人,推薦使用更全面的Spring Cloud。