SpringCloud實戰【一】:基礎組件介紹

 目錄

1 爲什麼選擇Spring Cloud

2 Spring Cloud組件介紹

2.1 五大常用組件

Eureka

Ribbon

Hystrix

Zuul

Config

2.2 其他組件

3 小結


1 爲什麼選擇Spring Cloud

        很多大公司都有自己的一套實現微服務的架構,比如:阿里的Dubbo/HSF、京東的JSF、新浪微博的Motan、噹噹網的DubboX等,每一種架構都有自己的優缺點、都經歷了嚴格的考驗存活到現在。但是當我們提到微服務首先會想到是Spring Cloud,就像我們提到電商首先想到淘寶,提到外賣首先想到美團一樣。那麼Spring Cloud到底有哪些優勢能夠在衆多微服務架構中脫穎而出,成爲佼佼者呢。

        要回答這個問題我們先看一下Spring Cloud的組成,如下圖所示:

可以看到SpringCloud項目是有多個獨立的子項目集合而成的,每個子項目都實現了不同的功能,解決了不同的問題,實現一個實際的微服務架構,需要哪個組件直接引用過來使用就可以了,而像dubbo這些需要好幾個中間件組合起來才能實現微服務架構,這一點就像品牌機和組合機的區別。以dubbo爲例和SpringCloud對比:

  SpringCloud Dubbo
註冊中心 SpringCloud Eureka 藉助Zookeeper
調用方式 REST API RPC
降級/熔斷 SpringCloud Hystrix 不完善
負載均衡 SpringCloud Ribbon 藉助Nginx
分佈式配置 SpringCloud Config
批量任務 SpringCloud Bus
消息總線 SpringCloud Bus
網關 SpringCloud Zull
數據流 SpringCloud Stream
-------    

 

有了這個對比表格,我們想搭建一套微服務架構,技術選型就非常容易了,毫無疑問Spring Cloud是首選,我們不需要糾結於配置中心使用什麼、網關怎麼設計、熔斷使用哪種技術,所有的這些已經提供了現成的組件,我們只需要拿過來使用即可。所以說Spring Cloud是微服務架構的集大成者。下面介紹一下常用的組件。

2 Spring Cloud組件介紹

2.1 五大常用組件

        Netflix是Spring Cloud非常核心的子項目,提供了Eureka、Ribbon、Hystrix、Zuul等基礎組件,基本是實現微服務必不可少的。

Eureka

        實現了服務治理,提供服務註冊與發現功能,類似於Zookeeper。服務提供者會註冊服務到服務註冊中心,並且每過一段時間都要發送心跳向服務註冊中心續約,下線的時候也需要告知服務註冊中心,還可以獲取服務註冊中心中的服務列表。服務消費者可以從服務註冊中心中拉取服務列表。如下圖所示:

由圖可以看出消費者可以從服務註冊中心拉取服務列表,然後就可以請求服務列表中的服務提供者,如果有很多服務消費者都請求到同一個服務提供者,就造成被訪問的服務提供者壓力特別大,而其他的服務提供者幾乎沒有流量,爲解決這個問題就引入了Ribbon負載均衡器。

Ribbon

        Ribbon是一個基於HTTP和TCP的客戶端負載均衡工具,類似於Negnix。它基於Netflix Ribbon實現,通過Spring Cloud的封裝,可以輕鬆地將面向服務的REST模版請求自動轉換成客戶端負載均衡的服務調用。Ribbon的功能如下圖所示:

        可以看出服務消費者拉取服務列表之後,交給Ribbon來確定訪問哪一個服務,Ribbon起到負載均衡的作用,能保證所有的服務提供者根據配置分配不同的流量,但是如果流量特別大,超過了服務提供者整體的處理能力,Ribbon也無能爲力,又或者某一個服務提供者出現故障無法處理訪問,Ribbon也無法感知到,這時候Hystrix就登場了。

Hystrix

        Hystrix提供了請求通斷與服務降級等能力。

        請求熔斷: Hystrix維護了一個斷路器,默認斷路器是閉路狀態(CLOSED),當請求後端服務失敗數量超過一定比例(這個比例可以設置,比如50%),斷路器切換到開路狀態(OPEN),將後續所有請求直接失敗而不會發送到後端服務。斷路器保持在開路狀態一段時間後(默認是5s),斷路器進入半開路狀態(HALF-OPEN),這時會判斷下一次請求的返回情況,如果請求成功,斷路器切回閉路狀態, 否則重新切換到開路狀態。如下圖所示:

         服務降級:Fallback起到了降級的作用。可以實現一個fallback方法, 當請求後端服務出現異常的時候,可以使用fallback方法返回的值。fallback方法的返回值一般是設置的默認值或者來自緩存,告知後面的請求服務不可用。

         Hystrix還有很多功能,後面會有專門章節介紹,這裏不再贅述。

Zuul

        Netflix提供了網關服務的組件Zuul,對於微服務架構,網關是非常重要,如果沒有網關,客戶端要請求服務需要知道ip和端口,把ip和端口暴露出去是非常不安全的,並且如果服務特別多,每一個服務都需要做一個鑑權,這樣做非常的麻煩,但是引入網關就解決了這些問題,所有的外部請求都經過網關路由到不同的服務,把不同服務的公共模塊(比如簽名驗籤)都收攏在網關來處理,如下圖所示:

簡單來說,網關是請求服務的入口,就像海關一樣,Zuul是專門提供網關服務的組件,用起來非常的方便。

Config

        SpringCloud Config爲每一個微服務提供配置中心,分爲服務端(Config Server)和客戶端(Config Client)兩部分。簡單的來說,服務端負責管理配置,客戶端負責加載配置

       我們在使用的時候服務端提供配置文件的存儲,存儲默認實現使用git,因此它輕鬆支持標籤版本的配置環境,以及可以訪問用於管理內容的各種工具,服務端以接口的形式將配置文件的內容提供出去。客戶端通過接口獲取數據、並依據此數據初始化自己的應用。如下圖所示:

2.2 其他組件

        SpringCloud Bus:事件、消息總線,在集羣中傳播狀態變化,可與Spring Cloud Config一起實現熱部署;

        SpringCloud Consul:封裝了Consul操作,consul是一個服務發現與配置工具,可以與Docker容器實現無縫集成。

        SpringCloud Security:安全工具包,爲應用程序添加安全控制,主要是指OAuth2;

        SpringCloud Cluster:微服務集羣,提供了一組用於在分佈式系統中構建集羣功能的原語;

        SpringCloud Stream:數據流操作開發包,實現了Redis、Rabbit、Kafka等發送接收消息;

        SpringCloud Stream App Starters:基於Spring Boot的Spring Integration應用程序,可提供與外部系統的集成;

        SpringCloud CLI:基於 Spring Boot CLI,可以用命令行方式快速建立雲組件;

        SpringCloud Contract:爲通過CDC(Customer Driven Contracts)開發基於JVM的應用提供了支持。

        SpringCloud Sleuth:日誌收集工具包,封裝了Dapper、Zipkin、HTrace操作;

        SpringCloud Data Flow:大數據操作工具,通過命令行方式操作數據流。

        SpringCloud Connectors:微服務連接器,簡化了雲平臺中連接服務和獲取操作環境感知的過程。

        SpringCloud for Cloud Foundry:通過Oauth2協議綁定服務到CloudFoundry;

        SpringCloud Zookeeper:封裝了操作Zookeeper的工具包,用於使用zookeeper方式的服務註冊和發現;

        SpringCloud Task:微服務上下文運行任務;

        SpringCloud CloudFoundry ServiceBroker:開放式服務代理。

3 小結

        Spring Cloud將一系列優秀的組件進行了整合,我們在搭建微服務技術架構的時候,需要什麼樣的能力,找到對應的組件使用就可以了,省去了中間件技術選型的麻煩,像負載均衡,路由,熔斷這些非常棘手的問題,Spring Cloud都提供了很成熟的組件,使用起來非常的方便。微服務解決了去中心化的問題,在業務架構非常清晰的情況下,拆分成多個子項目來實現,把開發人員按照業務模塊拆分成多個小組,每個小組負責自己模塊的開發、運維,大大提升了資源的利用率,SpringCloud完全符合這些特性,開發、發佈、運維可以實現完全獨立。綜上所述,如果公司要實現微服務架構,可以首先考慮選用Spring Cloud,接下來的章節,會和大家一起探索常用組件的使用方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章