說到 Spring Cloud,那確定要少不了提一下微服務框架,所謂的微服務框架就是把負責的功能拆分紅比較小、功能比較單一的服務獨立處理,例如單點登陸服務、支付服務、訂單服務等,固然若是訂單功能比較複雜還能夠獨立出更具體的服務。html
我在以前的文章中我所理解的SOA和微服務也提到過微服務的幾個主要特色,我的感受:算法
一、微服務在架構設計方面:能夠幫助咱們理清業務,更加清晰的設計系統架構。spring
二、微服務在開發方面:能夠下降項目結構的複雜度,下降代碼內部的耦合度。docker
三、在運維方面:能夠清晰快速的定位排查問題。架構
微服務框架裏 Dubbo 和 Spring Cloud 這兩個用的最多。隨着 docker 和 容器編排技術的成熟,最近用 Docker、Kubernetes 構建微服務架構的也愈來愈多了。app
公司以前的項目中有一部分採用 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
歡迎關注,不按期更新本系列和其餘文章
古時的風箏
,進入公衆號能夠加入交流羣