高并發(fā) - 服務(wù)降級與服務(wù)熔斷

概述

??對于在外工作的小伙伴,或多或少都經(jīng)歷過12306搶票,高峰時候明明還有票可是查詢列表為空,等高峰一過列表又正常了。后臺可能采用了服務(wù)降級處理,在高峰時候并沒有將錯誤信息返回給用戶,而是返回了一個空的列表。

服務(wù)降級

??當(dāng)服務(wù)器壓力劇增的時候,根據(jù)當(dāng)前業(yè)務(wù)情況以及流量,對一些服務(wù)和頁面有策略的降級,以此緩解服務(wù)器資源的壓力以保障核心任務(wù)的正常運(yùn)行,同時也保證了大部分客戶能得到正常的響應(yīng)。

  • 服務(wù)接口拒絕服務(wù):頁面能訪問,但是添加刪除提示服務(wù)器繁忙。頁面內(nèi)容也可在Varnish或CDN內(nèi)獲取。
  • 頁面拒絕服務(wù):頁面提示由于服務(wù)繁忙此服務(wù)暫停。跳轉(zhuǎn)到varnish或nginx的一個靜態(tài)頁面。
  • 延遲持久化:頁面訪問照常,但是涉及記錄變更,會提示稍晚能看到結(jié)果,將數(shù)據(jù)記錄到異步隊(duì)列或log,服務(wù)恢復(fù)后執(zhí)行。
  • 隨機(jī)拒絕服務(wù):服務(wù)接口隨機(jī)拒絕服務(wù),讓用戶重試,目前較少有人采用。因?yàn)橛脩趔w驗(yàn)不佳。


    降級與熔斷.png

??在一般稍微大一點(diǎn)的互聯(lián)網(wǎng)公司基本上都會有一個配置中心的角色,通常由配置服務(wù)和代理和應(yīng)用程序組成,Agent會定期的或者實(shí)時的接受配置中心的變更,將配置信息寫入本地文件。此時SDK會同步代理的配置以達(dá)到同步配置中心的數(shù)據(jù)。當(dāng)然也可以沒有Agent這一角色,SDK直接監(jiān)聽配置中心的變更。
??擁有了這一架構(gòu)之后,對于每個應(yīng)用程序的請求或者數(shù)據(jù)庫都可以通過配置中心來進(jìn)行降級與切換。當(dāng)然了如果目前所處環(huán)境沒有這一條件也可以使用單純的DB來保存 key-value來簡易實(shí)現(xiàn)這一功能。

服務(wù)熔斷(過載保護(hù))

??對于炒股的同學(xué),熔斷這個詞可能并不陌生,它是指當(dāng)某一股值波浮達(dá)到某一個點(diǎn)后交易所為了控制風(fēng)險,采取一些暫停交易的措施。響應(yīng)的如果某個目標(biāo)服務(wù)調(diào)用慢或者有大量超時,此時,熔斷該服務(wù)的調(diào)用,對于后續(xù)調(diào)用請求,不在繼續(xù)調(diào)用目標(biāo)服務(wù),直接返回,快速釋放資源。如果目標(biāo)服務(wù)情況好轉(zhuǎn)則恢復(fù)調(diào)用。

??三個模塊:熔斷請求判斷算法、熔斷恢復(fù)機(jī)制、熔斷報警

(1)熔斷請求判斷機(jī)制算法:使用無鎖循環(huán)隊(duì)列計數(shù),每個熔斷器默認(rèn)維護(hù)10個bucket,每1秒一個bucket,每個blucket記錄請求的成功、失敗、超時、拒絕的狀態(tài),默認(rèn)錯誤超過50%且10秒內(nèi)超過20個請求進(jìn)行中斷攔截。

(2)熔斷恢復(fù):對于被熔斷的請求,每隔5s允許部分請求通過,若請求都是健康的(RT<250ms)則對請求健康恢復(fù)。

(3)熔斷報警:對于熔斷的請求打日志,異常請求超過某些設(shè)定則報警

降級與熔斷對比

共性
  • 目的: 目的一致,都是從系統(tǒng)的可用性、可靠性著想。放了防止系統(tǒng)的整體緩慢甚至奔潰而采用的技術(shù)手段。
  • 最終表現(xiàn): 表現(xiàn)類似,最終都是給用戶一種當(dāng)前服務(wù)不可用或者不可達(dá)的感覺
  • 粒度: 大多都是在服務(wù)級別,當(dāng)然也有一些在持久層層面的應(yīng)用
  • 自治: 基本都是靠系統(tǒng)達(dá)到某一臨界條件時,實(shí)現(xiàn)自動的降級與熔斷,人工降級并不是那么穩(wěn)妥。
區(qū)別
  • 觸發(fā)原因: 服務(wù)熔斷一般指某個服務(wù)的下游服務(wù)出現(xiàn)問題時采用的手段,而服務(wù)降級一般是從整體層面考慮的。
  • 管理目標(biāo)層次: 熔斷是一種框架級的處理,每一個微服務(wù)都需要。而降級一般需要對業(yè)務(wù)有層級之分,降級一般都是從外圍服務(wù)開始的。
  • 實(shí)現(xiàn)方式: 代碼級別實(shí)現(xiàn)有差異
服務(wù)降級需要考慮的問題
  • 核心服務(wù)、非核心服務(wù)
  • 是否支持降級,降級策略
  • 業(yè)務(wù)放通場景、策略
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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