一張圖了解 Spring Cloud 微服務(wù)架構(gòu)

  1. Feign

  2. Eureka

  3. Ribbon

  4. Hystrix

  5. Zuul

  6. Config

  7. Zipkin

  8. 其它

Spring cloud作為當(dāng)下主流的微服務(wù)框架而账,讓我們實(shí)現(xiàn)微服務(wù)架構(gòu)簡(jiǎn)單快捷胰坟,Spring cloud中各個(gè)組件在微服務(wù)架構(gòu)中扮演的角色如下圖所示,黑線表示注釋說明泞辐,藍(lán)線由A指向B腕铸,表示B從A處獲取服務(wù)。

Spring cloud組成的微服務(wù)架構(gòu)圖

由上圖所示微服務(wù)架構(gòu)大致由上圖的邏輯結(jié)構(gòu)組成铛碑,其包括各種微服務(wù)、注冊(cè)發(fā)現(xiàn)虽界、服務(wù)網(wǎng)關(guān)汽烦、熔斷器、統(tǒng)一配置莉御、跟蹤服務(wù)等撇吞。下面說說Spring cloud中的組件分別充當(dāng)其中的什么角色。

Feign

Feign(接口調(diào)用):微服務(wù)之間通過Rest接口通訊礁叔,Spring Cloud提供Feign框架來支持Rest的調(diào)用牍颈,F(xiàn)eign使得不同進(jìn)程的Rest接口調(diào)用得以用優(yōu)雅的方式進(jìn)行,這種優(yōu)雅表現(xiàn)得就像同一個(gè)進(jìn)程調(diào)用一樣琅关。

Eureka

Netflix eureka(注冊(cè)發(fā)現(xiàn)):微服務(wù)模式下煮岁,一個(gè)大的Web應(yīng)用通常都被拆分為很多比較小的web應(yīng)用(服務(wù)),這個(gè)時(shí)候就需要有一個(gè)地方保存這些服務(wù)的相關(guān)信息涣易,才能讓各個(gè)小的應(yīng)用彼此知道對(duì)方画机,這個(gè)時(shí)候就需要在注冊(cè)中心進(jìn)行注冊(cè)。每個(gè)應(yīng)用啟動(dòng)時(shí)向配置的注冊(cè)中心注冊(cè)自己的信息(ip地址新症,端口號(hào), 服務(wù)名稱等信息)步氏,注冊(cè)中心將他們保存起來,服務(wù)間相互調(diào)用的時(shí)候徒爹,通過服務(wù)名稱就可以到注冊(cè)中心找到對(duì)應(yīng)的服務(wù)信息荚醒,從而進(jìn)行通訊芋类。注冊(cè)與發(fā)現(xiàn)服務(wù)為微服務(wù)之間的調(diào)用帶來了方便,解決了硬編碼的問題界阁。服務(wù)間只通過對(duì)方的服務(wù)id侯繁,而無需知道其ip和端口即可以獲取對(duì)方方服務(wù)。

Ribbon

Ribbon(負(fù)載均衡):Ribbon是Netflix發(fā)布的負(fù)載均衡器铺董,它有助于控制HTTP和TCP客戶端的行為巫击。為Ribbon,配置服務(wù)提供者的地址列表后精续,Ribbon就可基于某種負(fù)載均衡算法坝锰,自動(dòng)地幫助服務(wù)消費(fèi)者去請(qǐng)求。Ribbon默認(rèn)為我們提供了很多的負(fù)載均衡算法重付,例如輪詢顷级、隨機(jī)等。當(dāng)然确垫,我們也可為Ribbon實(shí)現(xiàn)自定義的負(fù)載均衡算法弓颈。在SpringCloud中,當(dāng)Ribbon與Eureka配合使用時(shí)删掀,Ribbon可自動(dòng)從EurekaServer獲取服務(wù)提供者的地址列表翔冀,并基于負(fù)載均衡算法,請(qǐng)求其中一個(gè)服務(wù)提供者的實(shí)例(為了服務(wù)的可靠性披泪,一個(gè)微服務(wù)可能部署多個(gè)實(shí)例)纤子。


Hystrix

Hystrix(熔斷器):當(dāng)服務(wù)提供者響應(yīng)非常緩慢,那么消費(fèi)者對(duì)提供者的請(qǐng)求就會(huì)被強(qiáng)制等待款票,直到提供者響應(yīng)或超時(shí)控硼。在高負(fù)載場(chǎng)景下,如果不做任何處理艾少,此類問題可能會(huì)導(dǎo)致服務(wù)消費(fèi)者的資源耗竭甚至整個(gè)系統(tǒng)的崩潰(雪崩效應(yīng))卡乾。Hystrix正是為了防止此類問題發(fā)生。Hystrix是由Netflix開源的一個(gè)延遲和容錯(cuò)庫(kù)缚够,用于隔離訪問遠(yuǎn)程系統(tǒng)幔妨、服務(wù)或者第三方庫(kù),防止級(jí)聯(lián)失敗潮瓶,從而提升系統(tǒng)的可用性與容錯(cuò)性陶冷。Hystrix主要通過以下幾點(diǎn)實(shí)現(xiàn)延遲和容錯(cuò)。

包裹請(qǐng)求:使用HystrixCommand(或HystrixObservableCommand)包裹對(duì)依賴的調(diào)用邏輯毯辅,每個(gè)命令在獨(dú)立線程中執(zhí)行埂伦。這使用了設(shè)計(jì)模式中的“命令模式”。

跳閘機(jī)制:當(dāng)某服務(wù)的錯(cuò)誤率超過一定閾值時(shí)思恐,Hystrix可以自動(dòng)或者手動(dòng)跳閘沾谜,停止請(qǐng)求該服務(wù)一段時(shí)間膊毁。

資源隔離:Hystrix為每個(gè)依賴都維護(hù)了一個(gè)小型的線程池(或者信號(hào)量)。如果該線程池已滿基跑,發(fā)往該依賴的請(qǐng)求就被立即拒絕婚温,而不是排隊(duì)等候,從而加速失敗判定媳否。

監(jiān)控:Hystrix可以近乎實(shí)時(shí)地監(jiān)控運(yùn)行指標(biāo)和配置的變化栅螟,例如成功、失敗篱竭、超時(shí)和被拒絕的請(qǐng)求等力图。

回退機(jī)制:當(dāng)請(qǐng)求失敗、超時(shí)掺逼、被拒絕吃媒,或當(dāng)斷路器打開時(shí),執(zhí)行回退邏輯吕喘∽改牵回退邏輯可由開發(fā)人員指定。

Zuul

Zuul(微服務(wù)網(wǎng)關(guān)) :不同的微服務(wù)一般會(huì)有不同的網(wǎng)絡(luò)地址氯质,而外部客戶端可能需要調(diào)用多個(gè)服務(wù)的接口才能完成一個(gè)業(yè)務(wù)需求募舟。例如一個(gè)電影購(gòu)票的手機(jī)APP,可能調(diào)用多個(gè)微服務(wù)的接口才能完成一次購(gòu)票的業(yè)務(wù)流程闻察,如果讓客戶端直接與各個(gè)微服務(wù)通信胃珍,會(huì)有以下的問題:

客戶端會(huì)多次請(qǐng)求不同的微服務(wù),增加了客戶端的復(fù)雜性蜓陌。

存在跨域請(qǐng)求,在一定場(chǎng)景下處理相對(duì)復(fù)雜吩蔑。

認(rèn)證復(fù)雜钮热,每個(gè)服務(wù)都需要獨(dú)立認(rèn)證。

難以重構(gòu)烛芬,隨著項(xiàng)目的迭代隧期,可能需要重新劃分微服務(wù)。例如赘娄,可能將多個(gè)服務(wù)合并成一個(gè)或者將一個(gè)服務(wù)拆分成多個(gè)仆潮。如果客戶端直接與微服務(wù)通信,那么重構(gòu)將很難實(shí)施遣臼。

某些微服務(wù)可能使用了對(duì)防火墻/瀏覽器不友好的協(xié)議性置,直接訪問時(shí)會(huì)有一定的困難。

以上問題可借助微服務(wù)網(wǎng)關(guān)解決揍堰。微服務(wù)網(wǎng)關(guān)是介于客戶端和服務(wù)器端之間的中間層鹏浅,所有的外部請(qǐng)求都會(huì)先經(jīng)過微服務(wù)網(wǎng)關(guān)嗅义。使用微服務(wù)網(wǎng)關(guān)后,微服務(wù)網(wǎng)關(guān)將封裝應(yīng)用程序的內(nèi)部結(jié)構(gòu)隐砸,客戶端只用跟網(wǎng)關(guān)交互之碗,而無須直接調(diào)用特定微服務(wù)的接口。這樣季希,開發(fā)就可以得到簡(jiǎn)化褪那。不僅如此,使用微服務(wù)網(wǎng)關(guān)還有以下優(yōu)點(diǎn):

易于監(jiān)控式塌〔┚矗可在微服務(wù)網(wǎng)關(guān)收集監(jiān)控?cái)?shù)據(jù)并將其推送到外部系統(tǒng)進(jìn)行分析。

易于認(rèn)證珊搀∫背溃可在微服務(wù)網(wǎng)關(guān)上進(jìn)行認(rèn)證,然后再將請(qǐng)求轉(zhuǎn)發(fā)到后端的微服務(wù)境析,而無須在每個(gè)微服務(wù)中進(jìn)行認(rèn)證囚枪。

減少了客戶端與各個(gè)微服務(wù)之間的交互次數(shù)。


Config

Spring cloud Config( 統(tǒng)一配置服務(wù)):對(duì)于傳統(tǒng)的單體應(yīng)用劳淆,常使用配置文件管理所有配置链沼。例如一個(gè)SpringBoot開發(fā)的單體應(yīng)用,可將配置內(nèi)容放在application.yml文件中沛鸵。如果需要切換環(huán)境括勺,可設(shè)置多個(gè)Profile,并在啟動(dòng)應(yīng)用時(shí)指定spring.profiles.active={profile}曲掰。然而疾捍,在微服務(wù)架構(gòu)中,微服務(wù)的配置管理一般有以下需求:

集中管理配置栏妖。一個(gè)使用微服務(wù)架構(gòu)的應(yīng)用系統(tǒng)可能會(huì)包含成百上千個(gè)微服務(wù)乱豆,因此集中管理配置是非常有必要的。

不同環(huán)境吊趾,不同配置宛裕。例如,數(shù)據(jù)源配置在不同的環(huán)境(開發(fā)论泛、測(cè)試揩尸、預(yù)發(fā)布、生產(chǎn)等)中是不同的屁奏。

運(yùn)行期間可動(dòng)態(tài)調(diào)整岩榆。例如,可根據(jù)各個(gè)微服務(wù)的負(fù)載情況,動(dòng)態(tài)調(diào)整數(shù)據(jù)源連接池大小或熔斷閾值朗恳,并且在調(diào)整配置時(shí)不停止微服務(wù)湿颅。

配置修改后可自動(dòng)更新。如配置內(nèi)容發(fā)生變化粥诫,微服務(wù)能夠自動(dòng)更新配置油航。綜上所述,對(duì)于微服務(wù)架構(gòu)而言怀浆,一個(gè)通用的配置管理機(jī)制是必不可少的谊囚,常見做法是使用配置服務(wù)器管理配置。Spring cloud bus利用Git或SVN等管理配置执赡、采用Kafka或者RabbitMQ等消息總線通知所有應(yīng)用镰踏,從而實(shí)現(xiàn)配置的自動(dòng)更新并且刷新所有微服務(wù)實(shí)例的配置。

Zipkin

Sleuth+ZipKin(跟蹤服務(wù)):Sleuth和Zipkin結(jié)合使用可以通過圖形化的界面查看微服務(wù)請(qǐng)求的延遲情況以及各個(gè)微服務(wù)的依賴情況沙合。需要注意的是Spring boot2及以上不在支持Zipkin的自定義奠伪,需要到官方網(wǎng)站下載ZipKin相關(guān)的jar包。

其它

另外需要提一點(diǎn)的是Spring boot actuator首懈,提供了很多監(jiān)控端點(diǎn)如/actuator/info绊率、/actuator/health、/acutator/refresh等究履,可以查看微服務(wù)的信息滤否、健康狀況、刷新配置等最仑。


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末藐俺,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子泥彤,更是在濱河造成了極大的恐慌欲芹,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吟吝,死亡現(xiàn)場(chǎng)離奇詭異耀石,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)爸黄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來揭鳞,“玉大人炕贵,你說我怎么就攤上這事∫俺纾” “怎么了称开?”我有些...
    開封第一講書人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我鳖轰,道長(zhǎng)清酥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任蕴侣,我火速辦了婚禮焰轻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘昆雀。我一直安慰自己辱志,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開白布狞膘。 她就那樣靜靜地躺著揩懒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪挽封。 梳的紋絲不亂的頭發(fā)上已球,一...
    開封第一講書人閱讀 49,806評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音辅愿,去河邊找鬼智亮。 笑死,一個(gè)胖子當(dāng)著我的面吹牛渠缕,可吹牛的內(nèi)容都是我干的鸽素。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼亦鳞,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼馍忽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起燕差,我...
    開封第一講書人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤遭笋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后徒探,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瓦呼,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年测暗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了央串。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡碗啄,死狀恐怖质和,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情稚字,我是刑警寧澤饲宿,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布厦酬,位于F島的核電站,受9級(jí)特大地震影響瘫想,放射性物質(zhì)發(fā)生泄漏仗阅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一国夜、第九天 我趴在偏房一處隱蔽的房頂上張望减噪。 院中可真熱鬧,春花似錦支竹、人聲如沸旋廷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)饶碘。三九已至,卻和暖如春馒吴,著一層夾襖步出監(jiān)牢的瞬間扎运,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工饮戳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留豪治,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓扯罐,卻偏偏與公主長(zhǎng)得像负拟,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子歹河,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容