說到 Spring Cloud,那肯定要少不了提一下微服務框架,所謂的微服務框架就是把負責的功能拆分成比較小、功能比較單一的服務獨立處理,例如單點登錄服務、支付服務、訂單服務等,當然如果訂單功能比較複雜還可以獨立出更具體的服務。 我在之前的文章中 "我所理解的SOA和微服務" 也提到過微服務的幾個主 ...
說到 Spring Cloud,那肯定要少不了提一下微服務框架,所謂的微服務框架就是把負責的功能拆分成比較小、功能比較單一的服務獨立處理,例如單點登錄服務、支付服務、訂單服務等,當然如果訂單功能比較複雜還可以獨立出更具體的服務。
我在之前的文章中我所理解的SOA和微服務也提到過微服務的幾個主要特點,個人感覺:
1、微服務在架構設計方面:可以幫助我們理清業務,更加清晰的設計系統架構。
2、微服務在開發方面:可以降低項目結構的複雜度,降低代碼內部的耦合度。
3、在運維方面:可以清晰快速的定位排查問題。
微服務框架里 Dubbo 和 Spring Cloud 這兩個用的最多。隨著 docker 和 容器編排技術的成熟,最近用 Docker、Kubernetes 構建微服務架構的也越來越多了。
公司之前的項目中有一部分採用 Spring MVC 方式開發,所以一直在用 Dubbo。新的系統全部採用 Spring Boot,順便也就使用了 Spring Cloud 技術棧。我倒不覺得兩者有什麼高下之分,只要能夠滿足業務需求,使用哪種技術倒無所謂,況且 Dubbo 用下來也沒什麼問題。
今天就是說一下 Spring Cloud,Spring Cloud 就是一個大集合,包括了配置中心、註冊中心、負責均衡、熔斷處理等等一些成熟的框架,並用 Spring boot 的形式包裝好,方便開發者使用。Spring boot 相信大家肯定都不陌生,應該做 Java 開發的幾乎或多或少都使用過。它比起 Spring MVC 來,省去了繁雜的配置文件,可謂是開發微服務項目的不二選擇。
Spring Cloud 包括眾多的子項目,可謂是微服務行業一條龍服務。只有你想不到,沒有你找不到的。
Spring Cloud Config
配置中心,將系統中用到的一些配置信息存儲到配置中心,方便維護,不用每次修改配置都重啟服務。用的比較多的配置中心還有etcd、攜程的 Apollo、Disconf 。
Spring Cloud Netflix
Netflix OSS 是一組開源的框架和組件庫,是Netflix公司開發出來解決分散式系統的一些有趣的可擴展類庫。Spring Cloud 把他們都放到 Spring Cloud Netflix 下,這是一個框架集合,它包括 Eureka 、Ribbon、Zuul、Hystrix 等。
Eureka
服務中心,這可以說是微服務架構的核心功能了,微服務部署之後,一定要有服務註冊和發現的能力,Eureka 就是擔任這個角色的。如果你用過 dubbo 的話,那一定知道 dubbo 中服務註冊和發現的功能是用 zookeeper 來實現的。
目前官方已停止升級,如果你的項目中還沒有使用並且打算使用註冊中心的話,可以直接使用 Spring Cloud Consul。
Ribbon
提供客戶端負責均衡功能,例如一個服務提供者部署了 3 個實例,那麼使用 Ribbon 可以指定負載均衡演算法請求其中一個實例,Ribbon 如果配合 Eureka ,使用起來非常簡單。
Hystrix
熔斷器,假設有 3 個服務提供實例,其中有一個實例由於某中原因掛掉了,那麼當再有請求進來的時候,如果還是向這個實例上發請求,那將會導致請求積壓阻塞,這個時候,熔斷器就要發揮它的作用,將這個有問題的實例下線,這樣一來,再有新的請求進來,就不會再發到這個有問題的實例上了。
Zuul
服務網關。主要實現了路由轉發和過濾器功能,對於處理一些數據聚合、鑒權、監控、統計類的功能非常好用。
Gateway
也是服務網關,可以認為它是 Zuul 的下一代,無論從易用性和性能方便都有所提高,如果你的系統中還沒有使用 Zuul ,並且準備上網關,可以直接選擇 Gateway 。
Spring Cloud Consul
Consul 讓服務註冊和服務發現(通過 DNS 和 HTTP 介面)更加簡單,甚至對於外部服務(例如SaaS)註冊也一樣。Spring Cloud Consul 可替代已有的 Spring Cloud Eureka。Eureka 2.x 版本也已經停止開發,並且 Spring Cloud 官方也建議用 Spring Cloud Consul 來替代,當然如果已經用了 Eureka 在項目中也沒有關係,Eureka 已經足夠穩定,正常使用沒有任何問題。
Spring Cloud Consul 可替代已有的 Spring Cloud Config ,當做配置中心使用。
Spring Cloud Stream
Spring Cloud Stream 是消息中間件組件,它集成了 kafka 和 rabbitmq 。如果你的系統中打算集成 kafka 或 rabbitmq,可以考慮使用 Stream 。
Spring Cloud Bus
消息匯流排,用於在集群(例如,配置變化事件)中傳播狀態變化,可與Spring Cloud Config聯合實現熱部署。集成了 Rabbitmq 和 kafka 。剛剛上面說到的 Stream 好像也是這個功能。沒錯,我們可以認為 Bus 是 Stream 的進一步封裝,使用更簡單。而 Stream 的靈活性更高。
Spring Cloud Feign
Feign是一種聲明式、模板化的HTTP客戶端。它可以用註解的方式簡化 HTTP 請求,可以快速簡單的請求服務提供介面。如果你還在使用 restTemplate 或者其他方式,不妨考慮一下 Feign。
Spring Cloud Sleuth
服務日誌收集和鏈路追蹤模塊,封裝了 Dapper 和 log-based 追蹤以及 Zipkin 和 HTrace 操作。與之功能相同的框架還有 skywalking、Pinpoint,另外國內還有美團開源的 CAT,只不過 CAT 屬於代碼侵入的,需要開發人員在系統中做代碼埋點,不過也更加靈活,更加精細。
Spring Cloud Security
可用做授權服務、單點登錄等。如果服務需要做許可權控制,那除非你自己實現。不然用到最多的就是 shiro 和 Spring Security 。Spring Boot 中用的比較多的就是 Security,眾多授權機制中屬於 OAuth2 最為流行。Spring Cloud Security 就是將 Security、OAuth2 做了集成,方便使用。
除了以上的這些常用功能外,Spring Cloud 還提供了一些其他的模塊,具體的可以到 Spring Cloud 官網一看。官網上介紹的更加詳細。官網地址:https://spring.io/projects/spring-cloud
歡迎關註,不定期更新本系列和其他文章
古時的風箏
,進入公眾號可以加入交流群