微服務之熔斷器

2021-09-24 11:23:55 字數 2290 閱讀 8607

熔斷器模式可以防止應用程式不斷地嘗試執行可能會失敗的操作,使得應用程式繼續執行而不用等待修正錯誤,或者浪費cpu時間去等到長時間的超時產生。熔斷器模式也可以使應用程式能夠診斷錯誤是否已經修正,如果已經修正,應用程式會再次嘗試呼叫操作。

假設我們有兩個服務servicea、serviceb,servicea可以正常對外提供服務,某些api依賴serviceb。

因此我們需要乙個機制,當下游服務變得不可用(或者異常增多時),需要切斷對下游服務的訪問,直接返回錯誤值或者預設值

我們的熔斷器應該要滿足以下要求:

快速失敗:如果servicea知道失敗serviceb。了,那麼就沒有必要等待超時並消耗自己的資源它應該盡快返回「知道」 serviceb已關閉

不要崩潰:正如我們在這種情況下看到的那樣,servicea不應該崩潰。

自動修復:定期檢查是否serviceb再次起作用。

其他api應該有效:所有其他api應該繼續工作。

我們使用brakes包來實現熔斷機制

'use strict';

const brakes = require('brakes');

const promise = require('bluebird');

function promisecall() else

});}function fallbackcall() );

}function healthcheckcall() else

});}const brake = new brakes(promisecall, );

brake.fallback(fallbackcall);

brake.healthcheck(healthcheckcall);

brake.on('circuitclosed', () => );

brake.on('circuitopen', () => );

const main = async () => catch (error)

}};main().then(console.log).catch(console.error);

執行結果

// 開始時是正常執行的

執行成功

0 '正常值'

執行失敗

1 '降級方案返回錯誤值或快取值'

執行成功

2 '正常值'

執行失敗

3 '降級方案返回錯誤值或快取值'

執行失敗

4 '降級方案返回錯誤值或快取值'

執行失敗

5 '降級方案返回錯誤值或快取值'

執行失敗

6 '降級方案返回錯誤值或快取值'

執行失敗

7 '降級方案返回錯誤值或快取值'

執行失敗

8 '降級方案返回錯誤值或快取值'

執行失敗

9 '降級方案返回錯誤值或快取值'

// 服務熔斷後, 不再執行程式,直接使用降級方案

服務熔斷

10 '正常值'

11 '降級方案返回錯誤值或快取值'

12 '降級方案返回錯誤值或快取值'

13 '降級方案返回錯誤值或快取值'

14 '降級方案返回錯誤值或快取值'

15 '降級方案返回錯誤值或快取值'

// 健康檢查失敗時,繼續使用降級方案

16 '降級方案返回錯誤值或快取值'

17 '降級方案返回錯誤值或快取值'

18 '降級方案返回錯誤值或快取值'

19 '降級方案返回錯誤值或快取值'

20 '降級方案返回錯誤值或快取值'

21 '降級方案返回錯誤值或快取值'

22 '降級方案返回錯誤值或快取值'

// 健康檢查通過時,服務恢復

健康檢查通過

服務恢復

23 '降級方案返回錯誤值或快取值'

執行失敗

24 '降級方案返回錯誤值或快取值'

執行失敗

25 '降級方案返回錯誤值或快取值'

執行成功

26 '正常值'

執行失敗

27 '降級方案返回錯誤值或快取值'

不用人工干預,自動實現服務異常時熔斷、服務修復後自動恢復請求

建議在使用的時候直接封裝在客戶端對外呼叫邏輯裡面,上層呼叫不需要知道有斷路器的存在

one more thing

下游服務的報警需要設定好

ref

golang微服務熔斷器的使用

熔斷器的基本作用 作為檢查服務是否有效,避免大量請求堵塞在乙個失效請求,如果服務端失效,則會進行降級處理,可以自動進行第乙個介面的請求,如果正常使用,自動進行呼叫第乙個介面 config hystrix.commandconfig 超時配置,此時為了測試,如果超時一秒鐘,則會進行業務 降級處理 如果...

Hystrix系列之熔斷器

熔斷器有三種狀態 關閉 開啟和半開 三者之間的轉換邏輯如下圖所示 熔斷器預設為 關閉 狀態 當失敗率或者失敗總量超過設定閾值,則變為 開啟 狀態,並開啟定時器 達到hystrixcommandproperties.circuitbreakersleepwindowinmilliseconds 設定的...

SpringCould之熔斷器(四)

雪崩效應 在微服務架構中通常會有多個服務之間進行相互呼叫,基礎服務的故 障可能會導致級聯故障,進而造成整個系統不可用的情況,這種現象被稱為服務 雪崩效 應 服務雪崩效應是一種因 服務提供者 的不可用導致 服務消費者 的不可用,並將 不可用逐漸放大的過程。為解決 雪崩效應 微服務架構提供了一種了斷路器...