1. 程式人生 > 實用技巧 >高併發系統三大利器之降級

高併發系統三大利器之降級

服務降級是當伺服器壓力劇增的情況下,根據當前業務情況及流量對一些服務和頁面有策略的降級,以此釋放伺服器資源以保證核心任務的正常執行。

我們可以舉個栗子:雙十一的時候,我們買東西是不是都不允許修改購物地址,不允許發起退貨,不允許退款還有很多服務都不可以用,只允許使用者選擇商品加入購物車付錢。那天只有一個目的就是讓一些不是很重要的服務所佔用的cpu資源都讓出來,給購物,付款這樣的核心服務。這樣的話,使用者付款的速度就會越來越快,畢竟前多少名支付的使用者是有免單機會的(大家都會擠在0點那一刻去付款)。服務降級主要用於當整個微服務架構整體的負載超出了預設的上限閾值或即將到來的流量預計將會超過預設的閾值時,為了保證重要或基本的服務能正常執行,將一些 不重要 或 不緊急 的服務或任務進行服務的 延遲使用 或 暫停使用


降級就是為了解決資源不足和訪問量增加的矛盾。

服務降級方式

  • 延遲服務:定時任務處理、或者mq延時處理。比如新使用者註冊送多少優惠券可以提示使用者優惠券會24小時到達使用者賬號中,我們可以選擇再凌晨流量較小的時候,批量去執行送券。
  • 頁面降級:頁面點選按鈕全部置灰,或者頁面調整成為一個靜態頁面顯示“系統正在維護中,。。。。”。
  • 關閉非核心服務:比如電商關閉推薦服務、關閉運費險、退貨退款等。保證主流程的核心服務下單付款就好。
  • 寫降級:比如秒殺搶購,我們可以只進行Cache的更新返回,然後通過mq非同步扣減庫存到DB,保證最終一致性即可,此時可以將DB降級為Cache
  • 讀降級:比如多級快取模式,如果後端服務有問題,可以降級為只讀快取,這種方式適用於對讀一致性要求不高的場景。

服務熔斷

服務雪崩

說到服務熔斷我們就得先了解下什麼是服務雪崩。雪崩效應好比就是蝴蝶效應,說的都是一個小因素的變化,卻往往有著無比強大的力量,以至於最後改變整體結構、產生意想不到的結果。
多個微服務之間呼叫的時候,比如A服務呼叫了B服務,B服務呼叫了C服務,然後C服務由於機器宕機或者網略故障, 然後就會導致B服務呼叫C服務的時候超時,然後A服務呼叫B服務也會超時,最終整個鏈路都不可用了,導致整個系統不可用就跟雪蹦一樣。

雪崩效應產生的幾種場景
  • 突增流量:比如一大波爬蟲,或者黑客攻擊等。
  • 程式bug:程式碼死迴圈,或者資源未釋放等。
  • 硬體原因:機器宕機、機房斷電、光纖被挖斷等。
    說完了服務雪崩然後就可以說下服務熔斷了。 熔斷機制是應對雪崩效應的一種微服務鏈路保護機制,在網際網路系統中當下遊的服務因為某種原因突然變得不可用或響應過慢,上游服務為了保證自己整體服務的可用性,暫時不再繼續呼叫目標服務,直接快速返回,快速釋放資源。如果目標服務情況好轉則恢復呼叫

    通俗點來說的話就是,比如我們以前大學的時候宿舍是不是不允許使用大功率電器,一旦使用大功率電器,電流過大,宿舍立馬就會跳閘斷電。因為已經超過了這個已經超過了電線所能承載的最大電流。如果不斷電話的會導致火災,然後整棟宿舍都會斷電。宿舍停電之後要恢復來電的話需要到宿管那裡解釋下為什麼突然停電了,上交大功率電器,一頓教育然後才會給你恢復供電。

熔斷和降級的比較

共性
  • 目的很一致:都是從可用性可靠性著想,為防止系統的整體緩慢甚至崩潰,採用的技術手段,都是為了保證系統的穩定。
  • 終表現類似:對於兩者來說,最終讓使用者體驗到的是某些功能暫時不可達或不可用;
  • 粒度一般都是服務級別:當然,業界也有不少更細粒度的做法,比如做到資料持久層(允許查詢,不允許增刪改);
  • 自治性要求很高: 熔斷模式一般都是服務基於策略的自動觸發,比如
    降級雖說可人工干預,但在微服務架構下,完全靠人顯然不可能,開關預置、配置中心都是必要手段;
差異性
    • 觸發原因不太一樣,服務熔斷一般是某個服務(下游服務)故障引起,而服務降級一般是從整體負荷考慮;
    • 管理目標的層次不太一樣,熔斷其實是一個框架級的處理,每個微服務都需要(無層級之分),而降級一般需要對業務有層級之分(比如降級一般是從最外圍服務開始)熔斷是降級方式的一種體現。

鳴謝:

https://blog.csdn.net/zengfanwei1990/article/details/108146116