當(dāng)在短時(shí)間內(nèi)多次發(fā)生指定類型的錯(cuò)誤,斷路器會(huì)開啟。開啟的斷路器可以拒絕接下來(lái)更多的請(qǐng)求 – 就像防止真實(shí)的電子流動(dòng)一樣。斷路器通常在一定時(shí)間后關(guān)閉,以便為底層服務(wù)提供足夠的空間來(lái)恢復(fù)。
請(qǐng)記住,并不是所有的錯(cuò)誤都應(yīng)該觸發(fā)斷路器。例如,你可能希望忽略客戶端問(wèn)題,比如4xx響應(yīng)代碼的請(qǐng)求,但要包括5xx服務(wù)器端故障。一些斷路器還可以有半開關(guān)狀態(tài)。在這種狀態(tài)下,服務(wù)發(fā)送第一個(gè)請(qǐng)求以檢查系統(tǒng)的可用性,同時(shí)讓其他請(qǐng)求失敗。如果這個(gè)第一個(gè)請(qǐng)求成功,則將斷路器恢復(fù)到關(guān)閉狀態(tài)并繼續(xù)接受流量。否則,保持打開狀態(tài)。
斷路器
故障測(cè)試(Testing for Failures)
你應(yīng)該持續(xù)地測(cè)試系統(tǒng)的常見問(wèn)題,以確保你的服務(wù)可各類故障環(huán)境下運(yùn)行。你應(yīng)經(jīng)常測(cè)試故障,以讓你的團(tuán)隊(duì)對(duì)可能發(fā)生的事故有所準(zhǔn)備。
關(guān)于測(cè)試,你可以使用外部服務(wù)來(lái)識(shí)別服務(wù)實(shí)例組,并隨機(jī)終止運(yùn)行組中的一個(gè)實(shí)例。通過(guò)使用這個(gè)方法,可以針對(duì)單個(gè)實(shí)例故障進(jìn)行測(cè)試,你甚至可以關(guān)閉整個(gè)服務(wù)組來(lái)模擬云提供商層面的故障中斷。
最流行的測(cè)試解決方案之一是Netflix的ChaosMonkey工具。
總結(jié)
實(shí)施和運(yùn)維可靠的服務(wù)并不容易。這需要你付出很多努力,還要花費(fèi)公司更多的成本。
可靠性有很多層次和方面,因此針對(duì)你的團(tuán)隊(duì)找出合適的解決方案是相當(dāng)重要的。你應(yīng)該將可靠性成為業(yè)務(wù)決策流程中的一個(gè)因素,并為此分配足夠的預(yù)算和時(shí)間。
要點(diǎn)
1.動(dòng)態(tài)環(huán)境和分布式系統(tǒng)-如微服務(wù)將導(dǎo)致更高的故障機(jī)會(huì)。
2.服務(wù)應(yīng)單獨(dú)失效,實(shí)現(xiàn)優(yōu)雅的服務(wù)降級(jí)以提升用戶體驗(yàn)。
3.70%的問(wèn)題是由變更引起的,恢復(fù)可用代碼并不總是壞事。
4.快速,單獨(dú)地失敗。團(tuán)隊(duì)無(wú)法控制其服務(wù)依賴關(guān)系。
5.架構(gòu)模式和技術(shù),如緩存、隔離技術(shù)、斷路器和限流器有助于構(gòu)建可靠的微服務(wù)。
作者簡(jiǎn)介:
Péter Márton,是RisingStack的CTO , 擅長(zhǎng)使用nodejs來(lái)構(gòu)建微服務(wù)。他的twitter帳號(hào)為
https://twitter.com/slashdotpeter。