本系列目錄:
如果你也打算學習 Spring Cloud
Spring Cloud Eureka 實現服務註冊與發現
本篇是我的 Spring Cloud 系列的開篇,那麼多人都在寫 Spring Cloud 的相關文章,為啥我還要寫呢?
答:由於本人才疏學淺,學點東西就愛做個筆記,也不奢望多少人看到,主要是怕自己日後忘記,當然如果有人看到並且學到點東西,我也是非常高興的。
Spring Cloud 有眾多模組,一旦專案搭起來,有些模組可能就不怎麼動了,例如閘道器、服務註冊中心等,知識點就是這樣,一旦長時間不用,慢慢印象也就模糊了。
那麼多的 Spring Cloud 的文章,我寫的有啥不同嗎?
答:沒有不同。無論是什麼框架,說白了也就是個工具,工具的使用都是一樣的,所以使用手冊也是大同小異。當然,使用姿勢正確得當,系統也就更穩定,效能更好。我這個系列也是介紹 Spring Cloud 各模組的使用。所以說,看其他的文章和看我寫的也都差不多。
以上。
以下,正文開始
說到 Spring Cloud,那肯定要少不了提一下微服務框架,所謂的微服務框架就是把負責的功能拆分成比較小、功能比較單一的服務獨立處理,例如單點登入服務、支付服務、訂單服務等,當然如果訂單功能比較複雜還可以獨立出更具體的服務。
我在之前的文章中(https://www.cnblogs.com/fengzheng/p/5847441.html)也提到過微服務的幾個主要特點,個人感覺:
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
各位同學趕快關注,關進點贊吧,這年頭,拿幾個贊太難了!
後續系列文章正在路上瘋狂朝你奔來呦!