理解熔斷、降級和限流


熔斷:

生活中的一個最形象的例子,就是保險絲,可以在短路的時候自動跳閘,保護家電

在分布式系統中的熔斷,也可以保護我們的系統

分布式系統中,一個上游服務,可能調用多個下游服務。比如一個購物模服務,需要調用訂單服務,支付服務,統計服務等等等

如果下游服務出現了故障,上游服務還是繼續訪問的話,就可能回出現請求無法被解決,被堆積的情況

更壞的情況是,一條調用鏈路,A->B->C->D->E->F->G,如果G出現故障,上游服務調用它會出現等待超時的情況,這時候如果沒有一個好的措施,那么就會導致這個服務鏈路雪崩,從一個服務的故障演化為整個系統的故障

這時候就是熔斷上場的好時候,熔斷器可以防止服務不斷的去嘗試下游可能超時或失敗的服務,即時斷開這條鏈路,並且保護下游服務變得更壞

並且熔斷器還可以讓服務自動診斷下游服務是否已經修復,如果還未修復,依然保持熔斷狀態,如果已經修復,慢慢的放量請求,增加請求次數直到恢復故障前的狀態

降級:

降級解決的是(系統資源 < 請求量)

如何在資源有限的情況下,扛住海量的請求(棄卒保帥)

這個場景在雙十一就能看到,為了保證秒殺,購物,支付等業務正常進行,會禁用一些服務,降低圖片的清晰度等等

三大措施:

  • 強一致性->最終一致性
  • 次要功能禁用
  • 簡化功能流程

限流:

限制請求的數量,限制某段時間內的請求總量

對於超出的總量的請求,可以直接拒絕,也可以在請求的時候對請求分組,允許特殊請求進來,剩下的拒絕,也可以放入消息隊列,削峰填谷

限流的實現方式:

  • 計數器:維護一個counter,每個時間段清零,對時間段內的請求進行計數,計數前判斷counter是否達到闕值,如果沒有就加一,達到則拒絕
  • 漏斗算法:一個固定容量的桶,當桶為空的時候,不會漏出水滴,流入桶的水的速率是任意的,漏出水的速率是固定的,如果流入桶的水超出桶的容量,進行拒絕

一般的實現方法是隊列,隊列模擬漏斗,空的時候不再出隊,滿的時候拒絕

  • 令牌桶算法:和漏斗算法很類似,不過除了一個隊列以外,還加入了一個中間人,它會以一定的速率發放令牌(token)到桶內,隊列中的的等待着只有拿到token才能通過

漏斗限制了傳輸速率,而令牌桶在限制的同時,還允許突然的大流量,即:在大流量到來的時候,有足夠空間的情況下(足夠的隊列和桶內有足夠的令牌),就允許進入

熔斷強調服務間的調用

限流在流量入口作限制

降級從服務本身或者整個系統服務情況來考量

熔斷是降級方式的一種,將情況不對的服務降級

降級又是限流的一種方式,降級限制當前服務的流量,以防止更大的損失

三者都是為了通過一定的方式去保護流量過大時(對於服務本身錯誤的情況。一點點流量也是“流量過大”),保護系統的手段


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM