?
???????????? 熔斷器Hystrix
1.1 為什么要使用熔斷器
在微服務(wù)架構(gòu)中通常會(huì)有多個(gè)服務(wù)層調(diào)用,基礎(chǔ)服務(wù)的故障可能會(huì)導(dǎo)致級(jí)聯(lián)故障漓骚,進(jìn)而造成整個(gè)系統(tǒng)不可用的情況递沪,這種現(xiàn)象被稱為服務(wù)雪崩效應(yīng)丸冕。服務(wù)雪崩效應(yīng)是一種因“服務(wù)提供者”的不可用導(dǎo)致“服務(wù)消費(fèi)者”的不可用,并將不可用逐漸放大的過(guò)程延赌。
如果下圖所示:A作為服務(wù)提供者,B為A的服務(wù)消費(fèi)者叉橱,C和D是B的服務(wù)消費(fèi)者挫以。A不可用引起了B的不可用,并將不可用像滾雪球一樣放大到C和D時(shí)赏迟,雪崩效應(yīng)就形成了屡贺。
2 什么是Hystrix
Hystrix [h?st'r?ks]的中文含義是豪豬, 因其背上長(zhǎng)滿了刺,而擁有自我保護(hù)能力
Hystrix 能使你的系統(tǒng)在出現(xiàn)依賴服務(wù)失效的時(shí)候,通過(guò)隔離系統(tǒng)所依賴的服務(wù)锌杀,防止服務(wù)級(jí)聯(lián)失敗甩栈,同時(shí)提供失敗回退機(jī)制,更優(yōu)雅地應(yīng)對(duì)失效糕再,并使你的系統(tǒng)能更快地從異常中恢復(fù)量没。
了解熔斷器模式請(qǐng)看下圖:
?為什么需要微服務(wù)網(wǎng)關(guān)
不同的微服務(wù)一般有不同的網(wǎng)絡(luò)地址,而外部的客戶端可能需要調(diào)用多個(gè)服務(wù)的接口才能完成一個(gè)業(yè)務(wù)需求突想。比如一個(gè)電影購(gòu)票的收集APP,可能回調(diào)用電影分類微服務(wù)殴蹄,用戶微服務(wù),支付微服務(wù)等猾担。如果客戶端直接和微服務(wù)進(jìn)行通信袭灯,會(huì)存在一下問(wèn)題:
客戶端會(huì)多次請(qǐng)求不同微服務(wù),增加客戶端的復(fù)雜性
存在跨域請(qǐng)求绑嘹,在一定場(chǎng)景下處理相對(duì)復(fù)雜
認(rèn)證復(fù)雜稽荧,每一個(gè)服務(wù)都需要獨(dú)立認(rèn)證
難以重構(gòu),隨著項(xiàng)目的迭代工腋,可能需要重新劃分微服務(wù)姨丈,如果客戶端直接和微服務(wù)通信,那么重構(gòu)會(huì)難以實(shí)施
某些微服務(wù)可能使用了其他協(xié)議擅腰,直接訪問(wèn)有一定困難
上述問(wèn)題蟋恬,都可以借助微服務(wù)網(wǎng)關(guān)解決。微服務(wù)網(wǎng)關(guān)是介于客戶端和服務(wù)器端之間的中間層趁冈,所有的外部請(qǐng)求都會(huì)先經(jīng)過(guò)微服務(wù)網(wǎng)關(guān)歼争。
2.2 什么是Zuul
Zuul是Netflix開(kāi)源的微服務(wù)網(wǎng)關(guān),他可以和Eureka,Ribbon,Hystrix等組件配合使用渗勘。Zuul組件的核心是一系列的過(guò)濾器矾飞,這些過(guò)濾器可以完成以下功能:
身份認(rèn)證和安全: 識(shí)別每一個(gè)資源的驗(yàn)證要求,并拒絕那些不符的請(qǐng)求
#審查與監(jiān)控:
動(dòng)態(tài)路由:動(dòng)態(tài)將請(qǐng)求路由到不同后端集群
壓力測(cè)試:逐漸增加指向集群的流量呀邢,以了解性能
負(fù)載分配:為每一種負(fù)載類型分配對(duì)應(yīng)容量,并棄用超出限定值的請(qǐng)求
靜態(tài)響應(yīng)處理:邊緣位置進(jìn)行響應(yīng)豹绪,避免轉(zhuǎn)發(fā)到內(nèi)部集群
多區(qū)域彈性:跨域AWS Region進(jìn)行請(qǐng)求路由价淌,旨在實(shí)現(xiàn)ELB(ElasticLoad Balancing)使
用多樣化
Spring Cloud對(duì)Zuul進(jìn)行了整合和增強(qiáng)申眼。
使用Zuul后,架構(gòu)圖演變?yōu)橐韵滦问?/p>