1. 程式人生 > >服務降級的一點認識

服務降級的一點認識

是什麽 self 手動 ont order 延時 請求 csdn block

什麽是服務降級

服務降級:主要是針對非正常情況下的應急服務措施;比如電商平臺,在針對618、雙11等高峰情形下采用部分服務不出現或者延時出現的情形。

舉個例子

大家都見過女生旅行吧,大號的旅行箱是必備物,平常走走近處綽綽有余,但一旦出個遠門,再大的箱子都白搭了,怎麽辦呢?常見的情景就是把物品拿出來分分堆,比了又比,最後一些非必需品的就忍痛放下了,等到下次箱子夠用了,再帶上用一用。而服務降級,就是這麽回事,整體資源快不夠了,忍痛將某些服務先關掉,待渡過難關,再開啟回來。

服務降級特征和方式

1、服務降級的特征:
原因:整體負荷超出整體負載承受能力。
目的:保證重要或基本服務正常運行,非重要服務延遲使用或暫停使用

大小:降低服務粒度,要考慮整體模塊粒度的大小,將粒度控制在合適的範圍內
可控性:在服務粒度大小的基礎上增加服務的可控性,後臺服務開關的功能是一項必要配置(單機可配置文件,其他可領用數據庫和緩存),可分為手動控制和自動控制。
次序:一般從外圍延伸服務開始降級,需要有一定的配置項,重要性低的優先降級,比如可以分組設置等級1-10,當服務需要降級到某一個級別時,進行相關配置
2、降級的方式:

 (1)、延遲服務:比如發表了評論,重要服務,比如在文章中顯示正常,但是延遲給用戶增加積分,只是放到一個緩存中,等服務平穩之後再執行。
 (2)、在粒度範圍內關閉服務(片段降級或服務功能降級):比如關閉相關文章的推薦,直接關閉推薦區
 (3)、頁面異步請求降級:比如商品詳情頁上有推薦信息/配送至等異步加載的請求,如果這些信息響應慢或者後端服務有問題,可以進行降級;
 (3)、頁面跳轉(頁面降級):比如可以有相關文章推薦,但是更多的頁面則直接跳轉到某一個地址
 (4)寫降級:比如秒殺搶購,我們可以只進行Cache的更新,然後異步同步扣減庫存到DB,保證最終一致性即可,此時可以將DB降級為Cache。
 (5)讀降級:比如多級緩存模式,如果後端服務有問題,可以降級為只讀緩存,這種方式適用於對讀一致性要求不高的場景;

3、降級預案
在進行降級之前要對系統進行梳理,看看系統是不是可以丟卒保帥;從而梳理出哪些必須誓死保護,哪些可降級;比如可以參考日誌級別設置預案:
一般:比如有些服務偶爾因為網絡抖動或者服務正在上線而超時,可以自動降級;
警告:有些服務在一段時間內成功率有波動(如在95~100%之間),可以自動降級或人工降級,並發送告警;
錯誤:比如可用率低於90%,或者數據庫連接池被打爆了,或者訪問量突然猛增到系統能承受的最大閥值,此時可以根據情況自動降級或者人工降級;
嚴重錯誤:比如因為特殊原因數據錯誤了,此時需要緊急人工降級
4、降級分類
降級按照是否自動化可分為:自動開關降級和人工開關降級。
降級按照功能可分為:讀服務降級、寫服務降級。

降級按照處於的系統層次可分為:多級降級。
5、自動降級分類

 (1)、超時降級:主要配置好超時時間和超時重試次數和機制,並使用異步機制探測回復情況
 (2)、失敗次數降級:主要是一些不穩定的api,當失敗調用次數達到一定閥值自動降級,同樣要使用異步機制探測回復情況
 (3)、故障降級:比如要調用的遠程服務掛掉了(網絡故障、DNS故障、http服務返回錯誤的狀態碼、rpc服務拋出異常),則可以直接降級。降級後的處理方案有:默認值(比如庫存服務掛了,返回默認現貨)、兜底數據(比如廣告掛了,返回提前準備好的一些靜態頁面)、緩存(之前暫存的一些緩存數據)
 (4)、限流降級
 當我們去秒殺或者搶購一些限購商品時,此時可能會因為訪問量太大而導致系統崩潰,此時開發者會使用限流來進行限制訪問量,當達到限流閥值,後續請求會被降級;降級後的處理方案可以是:排隊頁面(將用戶導流到排隊頁面等一會重試)、無貨(直接告知用戶沒貨了)、錯誤頁(如活動太火爆了,稍後重試)。

實現服務降級需要考慮幾個問題

1)那些服務是核心服務,哪些服務是非核心服務

2)那些服務可以支持降級,那些服務不能支持降級,降級策略是什麽

3)除服務降級之外是否存在更復雜的業務放通場景,策略是什麽?

參考文章

http://blog.csdn.net/guwei9111986/article/details/51649240

http://www.primeton.com/read.php?id=2230&his=1

技術分享圖片

轉載請註明原文出處:Harries Blog? ? 服務降級的一點認識


服務降級的一點認識