降級(jí)與熔斷

降級(jí)與熔斷

1.1、降級(jí)

降級(jí)也就是服務(wù)降級(jí),當(dāng)我們的服務(wù)器壓力劇增,為了保證核心功能的可用性,可以選擇性的降低一些功能的可用性,或者直接關(guān)閉該功能。典型的棄車保帥!?就比如貼吧類型的網(wǎng)站,當(dāng)服務(wù)器吃不消的時(shí)候,可以選擇把發(fā)帖功能關(guān)閉,注冊(cè)功能關(guān)閉,改密碼,改頭像這些都關(guān)了,為了確保登錄和瀏覽帖子這種核心的功能。

1.2、熔斷

降級(jí)一般而言是我們自身的系統(tǒng)出現(xiàn)了故障而降級(jí)。而熔斷一般是指依賴的外部接口出現(xiàn)故障,斷絕和外部接口之間的關(guān)聯(lián)。

例如你的A服務(wù)里面的一個(gè)功能依賴B服務(wù),這時(shí)候B服務(wù)出問題了,返回的很慢。這種情況可能會(huì)因?yàn)檫@么一個(gè)功能而拖慢了A服務(wù)里面的所有功能,因此我們這時(shí)候就需要熔斷!即當(dāng)發(fā)現(xiàn)A要調(diào)用這B時(shí)就直接返回錯(cuò)誤(或者返回其他默認(rèn)值啊啥的),就不去請(qǐng)求B了。

1.3、熔斷狀態(tài)機(jī)

三種狀態(tài):

Close 關(guān)閉狀態(tài),熔斷器的初始化狀態(tài),允許請(qǐng)求通過(guò)

Open 開放狀態(tài),即熔斷狀態(tài),不允許請(qǐng)求通過(guò)

HalfOpen 半開放狀態(tài),允許部分請(qǐng)求通過(guò)

1.4、hystrix包詳解

hystrix是Netflix的開源庫(kù),go版本是hystrix-go。

主要以下幾個(gè)模塊:setting,hystrix,circuit,metrics,pool和eventstream。

1.4.1、settings

setting?用來(lái)管理熔斷器的配置,包括存儲(chǔ),新增和讀取。

map+讀寫鎖實(shí)現(xiàn)多個(gè)circuit的配置。

Timeout: 執(zhí)行command的超時(shí)時(shí)間。默認(rèn)時(shí)間是1000毫秒

MaxConcurrentRequests:command的最大并發(fā)量 默認(rèn)值是10

SleepWindow:當(dāng)熔斷器被打開后,SleepWindow的時(shí)間就是控制過(guò)多久后去嘗試服務(wù)是否可用了。默認(rèn)值是5000毫秒

RequestVolumeThreshold: 一個(gè)統(tǒng)計(jì)窗口10秒內(nèi)請(qǐng)求數(shù)量。達(dá)到這個(gè)請(qǐng)求數(shù)量后才去判斷是否要開啟熔斷。默認(rèn)值是20

ErrorPercentThreshold:錯(cuò)誤百分比,請(qǐng)求數(shù)量大于等于RequestVolumeThreshold并且錯(cuò)誤率到達(dá)這個(gè)百分比后就會(huì)啟動(dòng)熔斷 默認(rèn)值是50

1.4.2、circuit?

circuit?用來(lái)管理熔斷器的狀態(tài)變更。

除此之外,circuit還上報(bào)事件給統(tǒng)計(jì)器

創(chuàng)建circuit的時(shí)候,會(huì)根據(jù)配置創(chuàng)建相應(yīng)的metric和exePool

1.4.3、metrics

?metrics用來(lái)統(tǒng)計(jì)和計(jì)算請(qǐng)求的響應(yīng)情況。

每一個(gè)Command都會(huì)有一個(gè)默認(rèn)統(tǒng)計(jì)控制器,當(dāng)然也可以添加多個(gè)自定義的控制器。 默認(rèn)的統(tǒng)計(jì)控制器DefaultMetricCollector保存著熔斷器的所有狀態(tài),調(diào)用次數(shù),失敗次數(shù),被拒絕次數(shù)等等。

在執(zhí)行newMetricExchange的時(shí)候會(huì)啟動(dòng)一個(gè)協(xié)程 go m.Monitor()去監(jiān)控Updates的數(shù)據(jù),然后上報(bào)給metricCollectors 保存執(zhí)行的信息數(shù)據(jù)比如前面提到的調(diào)用次數(shù),失敗次數(shù),被拒絕次數(shù)等等。

1.4.3、pool

pool?用來(lái)管理請(qǐng)求池,控制請(qǐng)求池最大數(shù)目以及請(qǐng)求ticket的發(fā)放和回收。

1.4.4、hystrix?

hystrix?是熔斷器的主要部分,對(duì)外提供同步和異步的方法,對(duì)內(nèi)上報(bào)請(qǐng)求事件以及fallback降級(jí)處理。

func GoC(ctx context.Context, name string, run runFuncC, fallback fallbackFuncC) chan error

參考:https://cloud.tencent.com/developer/article/1478016

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容