雪崩效應(yīng)

現(xiàn)如今SOA、微服務(wù)風(fēng)愈演愈烈,越來(lái)越多的業(yè)務(wù)和資源被以服務(wù)的形式包裝和發(fā)布,服務(wù)間又可能會(huì)依賴其他各種服務(wù)。由此而來(lái)不可避免的會(huì)產(chǎn)生很多問(wèn)題。

比如一個(gè)服務(wù),其依賴了另外30個(gè)服務(wù)。假設(shè)每個(gè)服務(wù)的可用率都有三個(gè)9(99.9%),那么我們計(jì)算一下:

99.99%^30 = 99.7%

現(xiàn)實(shí)很殘酷,這個(gè)服務(wù)的實(shí)際可用性只能是99.7%,也就是說(shuō)每個(gè)月這個(gè)服務(wù)都要好宕機(jī)8000+秒~~~


正常用戶請(qǐng)求時(shí),服務(wù)內(nèi)部依次請(qǐng)求A\P\H\I服務(wù),兵返回響應(yīng)結(jié)果。


非常不幸,我們的I服務(wù)出了某些問(wèn)題,此時(shí)我們的用戶請(qǐng)求就被堵塞在I服務(wù)處。


更加悲劇的是,后續(xù)越來(lái)越多的請(qǐng)求都被堵塞在I服務(wù)處,而這些被堵塞的請(qǐng)求會(huì)占用線程、IO、網(wǎng)絡(luò)等系統(tǒng)資源,隨著資源被占用的越來(lái)越多,本來(lái)不存在的性能問(wèn)題也會(huì)隨之而來(lái),造成系統(tǒng)中的其他服務(wù)出現(xiàn)問(wèn)題,甚至導(dǎo)致系統(tǒng)奔潰。

這也就是我們常說(shuō)的雪崩效應(yīng)


服務(wù)容災(zāi)

為了避免出現(xiàn)服務(wù)的雪崩,我們需要對(duì)服務(wù)做容災(zāi)處理。

常規(guī)的服務(wù)容災(zāi)處理思路有:

  • 資源隔離
  • 超時(shí)設(shè)定
  • 服務(wù)降級(jí)
  • 服務(wù)限流

其中每種思路又可以有不同的解決方案。

比如資源隔離可以通過(guò)將不同的服務(wù)發(fā)布在獨(dú)立的docker容器或服務(wù)器中,這樣即使一個(gè)服務(wù)出現(xiàn)問(wèn)題,也不會(huì)殃及池魚。

服務(wù)降級(jí)和服務(wù)限流可以通過(guò)前端nginx+lua來(lái)實(shí)現(xiàn),當(dāng)服務(wù)處理延遲或宕機(jī)時(shí),nginx可以直接返回固定的降級(jí)/失敗響應(yīng),已快速跳過(guò)問(wèn)題服務(wù)。


Hystrix

Hystrix,是Netflix的一個(gè)開源熔斷器,通過(guò)Hystrix,我們可以很方便的實(shí)現(xiàn)資源隔離、限流、超時(shí)設(shè)計(jì)、服務(wù)降級(jí)等服務(wù)容災(zāi)措施,并且還提供了強(qiáng)大的監(jiān)控,可以查看各個(gè)熔斷器的允許情況。

通過(guò)上圖,可以看出,Hystrix提供了一個(gè)HystrixCommand用來(lái)包裝調(diào)用請(qǐng)求。HystrixCommand的執(zhí)行流程大概如下:
1.首先檢查緩存中是否有結(jié)果。如果有則直接返回緩存結(jié)果。
2.判斷斷路器是否開啟,如果斷路器閉合,執(zhí)行降級(jí)業(yè)務(wù)邏輯并返回降級(jí)結(jié)果。
3.

我想了解如何學(xué)習(xí)

姓名:
手機(jī):
留言: