springCloud的瞭解(三)

更新時間:2019年7月19日
複製代碼

前言

springCloud系列文章:git

springCloud的瞭解(一):juejin.im/post/5d2eca…程序員

springCloud的瞭解(二):juejin.im/post/5d2fd0…web

昨天咱們學習了springCloud的四個組件,Netflix Eureka——服務發現,Netflix Ribbon——客服端負載均衡,Netflix Zuul——服務網關,Netflix Hystrix——斷路器。spring

從學習這四個組件中,咱們能夠觀察到,實際上springCloud並無大包大攬的將全部的活都本身來幹,它只是把市面上的一些成熟的東西拿過來,而後補上一些沒有的但又是確確實實須要的組件,從而組成了一個大的並且能知足市面上全部人的需求的容器。後端

springCloud想作的就是提供一個完美的分佈式解決方案,而不是咱們所說的是一個框架,某種程度上來說,它甚至不是一個容器,它只是一個思路。安全

從用戶提交一個請求,到zuul網關進行權限控制,而後zuul網關從Eureka上獲取可使用的微服務,經過Ribbon來進行負載均衡,分發到具體的後端服務上面,進行業務處理。若是一個微服務須要調用另一個微服務上面的接口,那麼能夠經過Feign來進行調用。若是一個微服務在被調用的時候,出現了錯誤,那麼咱們經過Hystrix來進行熔斷,避免出現總體的雪崩效應。bash

大致的springCloud的運做過程就是這樣,固然,還有Turbine監控服務間的調用和焠斷相關指標,一塊兒進行分佈式配置的Config。還有不少其餘的組件組合到一塊兒,這就造成了一個龐大的分佈式解決方案。服務器

springCloud決不是一個框架,也不只僅是一個容器,而是一個愈來愈趨向於完美的分佈式解決方案。網絡

今天,咱們將繼續深刻的學習springCloud的其餘組件。負載均衡

ps:在party開始以前,我又不得不向你們推薦一首我賊喜歡的歌曲,《火車行駛於雲外,夢安魂於九霄》,是刺蝟樂隊的歌曲,特別喜歡其中的一句歌詞「一代人終將老去,但總有人正年輕!」,建議你們去聽一聽,畢竟刺蝟樂隊的主唱是程序員裏面最會唱歌的啊!(^▽^)

springCloud的其餘組件

昨天在學習了springCloud的四大組件:

Netflix Eureka——服務發現
Netflix Ribbon——客服端負載均衡
Netflix Zuul——服務網關
Netflix Hystrix——斷路器
複製代碼

在前言中,我已經大概回顧了一下這四大組件的做用,以及在springCloud中運做流程。若是對具體的博文感興趣的話,能夠經過我給的連接來看我以前的博文。

可是除了這四個組件,springCloud還有着許許多多的組件,這剩下的組件中,有spring本身的,也有市面上其餘廠商的。

1. Spring Cloud Config--分佈式配置中心

首先,咱們要理解的一點是,爲何springCloud須要一個分佈式配置中心呢?由於springCloud是爲分佈式微服務服務的,那麼,由於每個微服務都須要進行配置,那麼對於開發人員來講,這樣的維護成本是很是高的。

並且涉及到的安全問題是,若是每個微服務都須要開發人員配置的話,那麼也就是說每個開發人員都有修改配置的權利,那麼對於一個成熟的開發團隊來講,這一點是很是不對的,對於整個程序來講,幾乎是已經算不上安全了。

並且每個微服務在修改配置後,基本都須要重啓程序,這是一個十分龐大且費時的開銷。尤爲是對於一個已經上線的項目來講,徹底是不能接受的。

爲了解決這些問題,springCloud推出了springCloud config這個組件。

config支持配置文件放在在配置服務的內存中,也支持放在遠程Git倉庫裏。所以,通常的開發團隊都是在引入config以後,將全部的配置文件都放到git倉庫中,能夠建立一個config server,用來管理全部的配置文件,當須要修改配置的時候,直接在本地修改了,推送到git倉庫中。

全部的服務實例均可以經過config server來獲取配置文件,這時每一個服務實例就至關於配置服務的客戶端config client。

爲了保證系統的穩定,配置服務端config server能夠進行集羣部署,即便某一個實例,由於出現錯誤了不能提供服務,也還有其餘的實例保證服務的繼續進行。

從網上找到一個圖片,分享給你們:

經過這個圖片,結合以上個人分析,你們應該能夠比較直觀的瞭解config的做用。

2. Spring Cloud Turbin--集羣監控

在以前的講解之中,Hystrix自己是有監控功能,Hystrix DashBoard是具有監控單個微服務的功能的,咱們能夠在Eureka註冊一個單個的微服務,用來監控全部的在Eureka上註冊的微服務。在springCloud上面新建一個微服務用來監控很是簡單,你們能夠自行百度。

給你們看一張圖,是Hystrix DashBoard的一張監控圖:

可是,Hystrix DashBoard(儀表盤)只能監控單個微服務,咱們在實際的開發狀況中,基本上都是須要集羣的,那麼這個時候,Hystrix DashBoard就有了侷限,從而引進了Turbin。

Turbin是聚合服務器發送事件流數據的一個工具,用來監控集羣Hystrix下的微服務的狀況的,它有一個重要的功能就是匯聚監控信息,並將匯聚到的監控信息提供給Hystrix Dashboard來集中展現和監控。

也是說,Turbin的實際功能就是監控各個微服務中的數據,而後把這些數據整合,發送到Hystrix DashBoard中進行展現。

3. NetFlix Feign--聲明式rest服務調用

當咱們在開發的時候,不少時候都是經過對業務的切分從而將咱們的程序切分紅了多個微服務,可是在開發單個微服務的過程當中,咱們不免會碰到會須要調用其餘微服務的數據的狀況,在沒有Feign的時候,咱們選擇使用RestTemplate來進行調用。

可是使用RestTemplate所須要的參數須在請求的URL中進行拼接,若是參數少的話或許咱們還能夠忍受,一旦有多個參數的話,這時拼接請求字符串就會效率低下。

因而springCloud在市場上給咱們找到了一個工具:Feign。

Feign是一個聲明式的web service客戶端,它的目的就是讓微服務的互相調用變得更加簡單。Feign提供了Http調用的模板,且支持可插拔編碼器和解碼器,經過插入註解和編寫簡單的接口,定義好HTTP請求的參數、格式、地址等信息,就能直接調用其餘微服務的接口。

在使用Feign調用其餘微服務的接口的時候,咱們就像簡單的調用方法同樣。

總結一下Feign的特性以下:

可插拔的註解支持,包括Feign註解和JAX-RS註解;
支持可插拔的HTTP編碼器和解碼器;
支持Hystrix和它的Fallback;
支持Ribbon的負載均衡;
支持HTTP請求和響應的壓縮。
複製代碼

其實這些特性都不用說明,既然Feign是在SpringCloud中的,那麼必然是配合其餘組件的功能的,並且Feign又是NetFlix開發的,那針對NetFlix開發的其餘組件,必然是配合度極高的。全部Feign有以上的這些特性,不足爲怪。

既然是微服務之間的互相調用,那麼咱們也必須注意一些地方,Feign在使用的時候,是有超時時間的,可是Hystrix在熔斷的時候,也是有超時時間的,那麼在這種狀況下,狀況大概是這樣的:

1.假如Feign的超時時間是3s,而Hystrix的超時時間是1s,那麼當在調用Feign的時候,還沒
  等到Feign的超時時間到,就等到了Hystrix的超時時間到了,那麼就會直接熔斷,Feign的
  超時時間也就失去了意義。
2.假如Feign的超時時間是2s,而Hystrix的超時時間是3s,當Feign調用其餘微服務的接口的
  時候出現了問題,超時了,那麼Feign就會進行重試調用,會調用接口第二次,可是這個時
  候Hystrix的超時時間到了,那麼,這個Hystrix的熔斷不會影響到Feign的第二次調用接口。
複製代碼

4. Spring Cloud Bus--消息總線

在以前咱們對config的分析中,咱們發現當咱們更新了配置文件以後,而後將本地配置文件發送到了遠程git倉庫中,可是咱們得通知每個微服務,咱們修改了配置文件,那麼就得經過post請求來一個一個發,這是咱們不能接受的。

所以就引入了SpringCloud Bus。

Bus就是典型的將消息隊列的訂閱發佈模式引入到springCloud中去,讓全部爲服務來訂閱這個事件,當這個事件發生改變了,就能夠通知全部微服務去更新它們的內存中的配置信息。這時Bus消息總線就能解決,你只須要在springcloud Config Server端發出refresh,就能夠觸發全部微服務更新了。

又默默的從網絡上搜到一張圖來解釋這個問題:

Spring Cloud Bus除了支持RabbitMQ的自動化配置以外,還支持如今被普遍應用的Kafka。

Bus不只僅是能夠應用到配置文件的修改,並且能夠應用到不少地方,好比微服務之間的通信。

小結

幾天咱們基本上將SpringCloud的大部分重要組件都粗略的瞭解了,可是在咱們實際開發中,若是僅僅是這樣粗略的瞭解這些組件,那麼是遠遠不夠的,咱們還須要更加的去深刻了解,最好咱們可以本身動手搭建一個springCloud出來,這樣才能更加深刻的瞭解springCloud。

明天,咱們開始學習springCloud相關的分佈式事務問題。

ps:最後,做爲一個《樂隊的夏天》的忠實粉絲,我又給你們推薦一首賊適合在上班聽的歌曲,旺福樂隊的一首歌《兩個偏偏好》,很俏皮的一首歌。(✪ω✪)

相關文章
相關標籤/搜索