熔斷機(jī)制(Circuit Breaker),也叫斷路器設(shè)計(jì)模式。具體可以參見大神的文章。
如果要熔斷,客戶端首先需要知道服務(wù)是否可用。pigeon會定時發(fā)送心跳包,通過服務(wù)端返回的情況來確定,服務(wù)端是否可用,類似ping-pong請求。當(dāng)ping-pong的失敗率超過某一個閾值后,將會通過配置參數(shù)來確定是否自動摘除相對應(yīng)的節(jié)點(diǎn),同時斷開與服務(wù)端的連接。客戶端還有一個定時任務(wù)會重連這些斷開的連接,重連后將會再次進(jìn)行心跳檢測,如果成功就會將這個服務(wù)重新加入到可用服務(wù)節(jié)點(diǎn)中去。
其實(shí)之前的設(shè)計(jì)本不是這樣,之前會對同一個服務(wù)的不同實(shí)例進(jìn)行檢測,如果心跳有問題也會pickoff。但是一開始考慮全部掛掉是個小概率事件,或者說是檢測本身可能有問題,所以當(dāng)摘除節(jié)點(diǎn)數(shù)大于所有實(shí)例數(shù)的50%以上時,將不再摘除節(jié)點(diǎn)。可是在實(shí)際的應(yīng)用過程中,發(fā)現(xiàn)某個服務(wù)的全部實(shí)例掛掉是非常常見的事情,這種不摘除干凈的做法和容易引起大面積服務(wù)掛掉,故最新的版本做了修改,更新為前述的熔斷方式。
降級,