什麼是熔斷機制

什麼是熔斷機制

更新於 發佈於 閱讀時間約 3 分鐘

年初在開發者對話(一月)的活動主題 Health Check(健康檢查) 延伸討論到熔斷(Circuit Breaker)機制,這次就來跟大家稍微聊一下這個功能。

我們在設計系統的時候大多不會馬上考慮到這個問題,然而當系統遭遇到「超出負荷」的情況時,使用熔斷處理就會是一個很不錯的方法。

熔斷的作用

熔斷這個詞基本上就是「保險絲熔斷」的意思,我們可以很直覺的將這個概念套用到網路服務中的「熔斷」概念,也就是所謂的「超出負荷停止服務」的機制。

會延伸到這個問題,是因為有人認為當服務不正常時 Health Check 也該正常回應這樣的想法,然而如果 Health Check 還能回應正常,不就無法反應當下這個服務「超出負荷」的狀況了嗎?

也就是說,如果將 Health Check 視為「自我檢查」那麼熔斷就是其他人去檢查的機制,或者說一種「保險措施」

如何保護

我們以 Circuitbox 這個 Ruby Gem 為例子來看,當我們呼叫其他服務在一定時間內失敗超過一定次數時,會「暫停呼叫」並且在一段時間後重新測試。

這跟保險絲的原理也是類似的,我們假設每個服務都有他的「極限」存在,當我們失敗多次後表示呼叫的服務可能是超過極限的狀態。因此我們「暫停」或者「中斷」呼叫,直到後面的服務恢復到正常的狀態,有了這樣的機制,我們就可以避免在超出負荷的狀態下還繼續「增加負擔」

提升存活率

簡單來說,這是一種提升存活率的手段之一。即使我們什麼都不做,網站死掉連不上也是一種「熔斷」然而這個熔斷可能是「非常嚴重」的狀態。

除此之外,即使我們自己的系統是正常的。有沒有可能合作的廠商系統正處於高度負載的狀態?如果再繼續呼叫,那麼我們可能就會成為壓倒駱駝的最後一根稻草。

透過恰當的熔斷機制,我們至少可以確保所有服務至少能夠維持在「存活」的狀態下,至少會比整個中斷後的成本要低,就像電腦當機後恢復跟重開機,後者有可能是「重要檔案沒有存檔」的狀態,問題可能嚴重很多。


封面圖片使用 Unsplash 上 PhotSigmun 的作品,有想聽的主題可以透過匿名問卷告訴我,想了解專業的技術主題可以到弦而時習之找找靈感。

avatar-img
蒼時弦也的沙龍
55會員
40內容數
軟體工程師逐漸變成一個熱門的職業,當我們進入這個職業之後應該要具備怎樣的技能才會在工作上更加順利呢?這系列的專欄會分享日常工作中的經驗以及一些案例分析,讓我們一起努力成為一位更優秀的軟體工程師吧!
留言
avatar-img
留言分享你的想法!
蒼時弦也的沙龍 的其他內容
大多數時候,我們在討論壓力測試通常會先想到 ab 這個工具,然而這個工具會一次性的發送請求,有時候不一定符合現實的使用情況,同時也會受限於運行測試機器的限制(例如:Thread 上限)因此可能會得到不太精確的結果,在測試一定請求等級的瞬間壓力是有用的。
在我們要進行壓力測試的時候,必定會需要有「目標」而這個目標大多就是商業考量,也就是我們希望提供多大規模的服務。
在一個功能完成後,比較嚴謹的方式會進行壓力測試來驗證是否能夠符合業務上的需求,在測試的時候是否能夠準確的測試就變得相當重要。
大多數時候,我們在討論壓力測試通常會先想到 ab 這個工具,然而這個工具會一次性的發送請求,有時候不一定符合現實的使用情況,同時也會受限於運行測試機器的限制(例如:Thread 上限)因此可能會得到不太精確的結果,在測試一定請求等級的瞬間壓力是有用的。
在我們要進行壓力測試的時候,必定會需要有「目標」而這個目標大多就是商業考量,也就是我們希望提供多大規模的服務。
在一個功能完成後,比較嚴謹的方式會進行壓力測試來驗證是否能夠符合業務上的需求,在測試的時候是否能夠準確的測試就變得相當重要。