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