1谆趾、三個名詞
限流:限制并發(fā)的請求訪問量躁愿,超過閾值則拒絕;
降級:服務分優(yōu)先級沪蓬,犧牲非核心服務(不可用)彤钟,保證核心服務穩(wěn)定;從整體負荷考慮跷叉;
熔斷:依賴的下游服務故障觸發(fā)熔斷逸雹,避免引發(fā)本系統(tǒng)崩潰;系統(tǒng)自動執(zhí)行和恢復性芬。
2峡眶、服務熔斷
在微服務架構中,微服務之間的數(shù)據(jù)交互通過遠程調用完成植锉,微服務A調用微服務B和微服務C辫樱,微服務B和微服務C又調用其它的微服務,此時如果鏈路上某個微服務的調用響應時間過長或者不可用俊庇,那么對微服務A的調用就會占用越來越多的系統(tǒng)資源狮暑,進而引起系統(tǒng)崩潰鸡挠,導致“雪崩效應”。
服務熔斷是應對雪崩效應的一種微服務鏈路保護機制搬男。例如在高壓電路中拣展,如果某個地方的電壓過高,熔斷器就會熔斷缔逛,對電路進行保護备埃。同樣,在微服務架構中褐奴,熔斷機制也是起著類似的作用按脚。當調用鏈路的某個微服務不可用或者響應時間太長時,會進行服務熔斷敦冬,不再有該節(jié)點微服務的調用辅搬,快速返回錯誤的響應信息。當檢測到該節(jié)點微服務調用響應正常后脖旱,恢復調用鏈路堪遂。
在Spring Cloud框架里,熔斷機制通過Hystrix實現(xiàn)萌庆。Hystrix會監(jiān)控微服務間調用的狀況溶褪,當失敗的調用到一定閾值,缺省是5秒內(nèi)20次調用失敗践险,就會啟動熔斷機制竿滨。
服務熔斷解決如下問題: 1. 當所依賴的對象不穩(wěn)定時,能夠起到快速失敗的目的捏境;2. 快速失敗后,能夠根據(jù)一定的算法動態(tài)試探所依賴對象是否恢復毁葱。
3垫言、服務降級
服務降級是指 當服務器壓力劇增的情況下,根據(jù)實際業(yè)務情況及流量倾剿,對一些服務和頁面有策略的不處理或換種簡單的方式處理筷频,從而釋放服務器資源以保證核心業(yè)務正常運作或高效運作。說白了前痘,就是盡可能的把系統(tǒng)資源讓給優(yōu)先級高的服務凛捏。
資源有限,而請求是無限的芹缔。如果在并發(fā)高峰期坯癣,不做服務降級處理,一方面肯定會影響整體服務的性能最欠,嚴重的話可能會導致宕機某些重要的服務不可用示罗。所以惩猫,一般在高峰期,為了保證核心功能服務的可用性蚜点,都要對某些服務降級處理轧房。比如當雙11活動時,把交易無關的服務統(tǒng)統(tǒng)降級绍绘,如查看螞蟻深林奶镶,查看歷史訂單等等。
服務降級主要用于什么場景呢陪拘?當整個微服務架構整體的負載超出了預設的上限閾值或即將到來的流量預計將會超過預設的閾值時厂镇,為了保證重要或基本的服務能正常運行,可以將一些 不重要 或 不緊急 的服務或任務進行服務的 延遲使用 或 暫停使用藻丢。
降級的方式可以根據(jù)業(yè)務來剪撬,可以延遲服務,比如延遲給用戶增加積分悠反,只是放到一個緩存中残黑,等服務平穩(wěn)之后再執(zhí)行 ;或者在粒度范圍內(nèi)關閉服務斋否,比如關閉相關文章的推薦梨水。
實現(xiàn)服務降級需要考慮幾個問題
1)那些服務是核心服務,哪些服務是非核心服務
2)那些服務可以支持降級茵臭,那些服務不能支持降級疫诽,降級策略是什么
3)除服務降級之外是否存在更復雜的業(yè)務放通場景,策略是什么旦委?
自動降級分類
1)超時降級:主要配置好超時時間和超時重試次數(shù)和機制奇徒,并使用異步機制探測回復情況
2)失敗次數(shù)降級:主要是一些不穩(wěn)定的api,當失敗調用次數(shù)達到一定閥值自動降級缨硝,同樣要使用異步機制探測回復情況
3)故障降級:比如要調用的遠程服務掛掉了(網(wǎng)絡故障摩钙、DNS故障、http服務返回錯誤的狀態(tài)碼查辩、rpc服務拋出異常)胖笛,則可以直接降級。降級后的處理方案有:默認值(比如庫存服務掛了宜岛,返回默認現(xiàn)貨)长踊、兜底數(shù)據(jù)(比如廣告掛了,返回提前準備好的一些靜態(tài)頁面)萍倡、緩存(之前暫存的一些緩存數(shù)據(jù))
4)限流降級:秒殺或者搶購一些限購商品時身弊,此時可能會因為訪問量太大而導致系統(tǒng)崩潰,此時會使用限流來進行限制訪問量,當達到限流閥值佑刷,后續(xù)請求會被降級莉擒;降級后的處理方案可以是:排隊頁面(將用戶導流到排隊頁面等一會重試)、無貨(直接告知用戶沒貨了)瘫絮、錯誤頁(如活動太火爆了涨冀,稍后重試)。
原文
https://blog.csdn.net/zero__007/article/details/90732554