雪崩效應(yīng)
現(xiàn)如今SOA、微服務(wù)風(fēng)愈演愈烈,越來越多的業(yè)務(wù)和資源被以服務(wù)的形式包裝和發(fā)布,服務(wù)間又可能會依賴其他各種服務(wù)。由此而來不可避免的會產(chǎn)生很多問題。
比如一個服務(wù),其依賴了另外30個服務(wù)。假設(shè)每個服務(wù)的可用率都有三個9(99.9%),那么我們計算一下:
99.99%^30 = 99.7%
現(xiàn)實很殘酷,這個服務(wù)的實際可用性只能是99.7%,也就是說每個月這個服務(wù)都要好宕機(jī)8000+秒~~~
正常用戶請求時,服務(wù)內(nèi)部依次請求A\P\H\I服務(wù),兵返回響應(yīng)結(jié)果。
非常不幸,我們的I服務(wù)出了某些問題,此時我們的用戶請求就被堵塞在I服務(wù)處。
更加悲劇的是,后續(xù)越來越多的請求都被堵塞在I服務(wù)處,而這些被堵塞的請求會占用線程、IO、網(wǎng)絡(luò)等系統(tǒng)資源,隨著資源被占用的越來越多,本來不存在的性能問題也會隨之而來,造成系統(tǒng)中的其他服務(wù)出現(xiàn)問題,甚至導(dǎo)致系統(tǒng)奔潰。
這也就是我們常說的雪崩效應(yīng)
服務(wù)容災(zāi)
為了避免出現(xiàn)服務(wù)的雪崩,我們需要對服務(wù)做容災(zāi)處理。
常規(guī)的服務(wù)容災(zāi)處理思路有:
資源隔離
超時設(shè)定
服務(wù)降級
服務(wù)限流
其中每種思路又可以有不同的解決方案。
比如資源隔離可以通過將不同的服務(wù)發(fā)布在獨(dú)立的docker容器或服務(wù)器中,這樣即使一個服務(wù)出現(xiàn)問題,也不會殃及池魚。
服務(wù)降級和服務(wù)限流可以通過前端nginx+lua來實現(xiàn),當(dāng)服務(wù)處理延遲或宕機(jī)時,nginx可以直接返回固定的降級/失敗響應(yīng),已快速跳過問題服務(wù)。
Hystrix
Hystrix,是Netflix的一個開源熔斷器,通過Hystrix,我們可以很方便的實現(xiàn)資源隔離、限流、超時設(shè)計、服務(wù)降級等服務(wù)容災(zāi)措施,并且還提供了強(qiáng)大的監(jiān)控,可