1、異常處理:調(diào)用受熔斷器保護(hù)的服務(wù)的時(shí)候,我們必須要處理當(dāng)服務(wù)不可用時(shí)的異常情況。這些異常處理通常需要視具體的業(yè)務(wù)情況而定。比如,如果應(yīng)用程序只是暫時(shí)的功能降級(jí),可能需要切換到其它的可替換的服務(wù)上來執(zhí)行相同的任務(wù)或者獲取相同的數(shù)據(jù),或者給用戶報(bào)告錯(cuò)誤然后提示他們稍后重試。
2、異常的類型:請(qǐng)求失敗的原因可能有很多種。一些原因可能會(huì)比其它原因更嚴(yán)重。比如,請(qǐng)求會(huì)失敗可能是由于遠(yuǎn)程的服務(wù)崩潰,這可能需要花費(fèi)數(shù)分鐘來恢復(fù);也可能是由于服務(wù)器暫時(shí)負(fù)載過重導(dǎo)致超時(shí)。熔斷器應(yīng)該能夠檢查錯(cuò)誤的類型,從而根據(jù)具體的錯(cuò)誤情況來調(diào)整策略。比如,可能需要很多次超時(shí)異常才可以斷定需要切換到斷開狀態(tài),而只需要幾次錯(cuò)誤提示就可以判斷服務(wù)不可用而快速切換到斷開狀態(tài)。
3、日志:熔斷器應(yīng)該能夠記錄所有失敗的請(qǐng)求,以及一些可能會(huì)嘗試成功的請(qǐng)求,使得的管理員能夠監(jiān)控使用熔斷器保護(hù)的服務(wù)的執(zhí)行情況。 測(cè)試服務(wù)是否可用:在斷開狀態(tài)下,熔斷器可以采用定期的ping遠(yuǎn)程的服務(wù)或者資源,來判斷是否服務(wù)是否恢復(fù),而不是使用計(jì)時(shí)器來自動(dòng)切換到半斷開狀態(tài)。這種ping操作可以模擬之前那些失敗的請(qǐng)求,或者可以使用通過調(diào)用遠(yuǎn)程服務(wù)提供的檢查服務(wù)是否可用的方法來判斷。
手動(dòng)重置:在系統(tǒng)中對(duì)于失敗操作的恢復(fù)時(shí)間是很難確定的,提供一個(gè)手動(dòng)重置功能能夠使得管理員可以手動(dòng)的強(qiáng)制將熔斷器切換到閉合狀態(tài)。同樣的,如果受熔斷器保護(hù)的服務(wù)暫時(shí)不可用的話,管理員能夠強(qiáng)制的將熔斷器設(shè)置為斷開狀態(tài)。 并發(fā)問題:相同的熔斷器有可能被大量并發(fā)請(qǐng)求同時(shí)訪問。熔斷器的實(shí)現(xiàn)不應(yīng)該阻塞并發(fā)的請(qǐng)求或者增加每次請(qǐng)求調(diào)用的負(fù)擔(dān)。 資源的差異性:使用單個(gè)熔斷器時(shí),一個(gè)資源如果有分布在多個(gè)地方就需要小心。比如,一個(gè)數(shù)據(jù)可能存儲(chǔ)在多個(gè)磁盤分區(qū)上(shard),某個(gè)分區(qū)可以正常訪問,而另一個(gè)可能存在暫時(shí)性的問題。在這種情況下,不同的錯(cuò)誤響應(yīng)如果混為一談,那么應(yīng)用程序訪問的這些存在問題的分區(qū)的失敗的可能性就會(huì)高,而那些被認(rèn)為是正常的分區(qū),就有可能被阻塞。
4、加快熔斷器的熔斷操作:有時(shí)候,服務(wù)返回的錯(cuò)誤信息足夠讓熔斷器立即執(zhí)行熔斷操作并且保持一段時(shí)間。比如,如果從一個(gè)分布式資源返回的響應(yīng)提示負(fù)載超重,那么應(yīng)該等待幾分鐘后再重試。(HTTP協(xié)議定義了”HTTP 503 Service Unavailable”來表示請(qǐng)求的服務(wù)當(dāng)前不可用,他可以包含其他信息比如,超時(shí)等)
5、重復(fù)失敗請(qǐng)求:當(dāng)熔斷器在斷開狀態(tài)的時(shí)候,熔斷器可以記錄每一次請(qǐng)求的細(xì)節(jié),而不是僅僅返回失敗信息,這樣當(dāng)遠(yuǎn)程服務(wù)恢復(fù)的時(shí)候,可以將這些失敗的請(qǐng)求再重新請(qǐng)求一次。