創作不易,關注、點贊,分享,轉發,評論,收藏,掌握網際網路前沿知識,支援一下,謝謝。
一文讀懂容錯機制
容錯背景
随着分布式、微服務在項目中快速應用,高可用、分布式下各個服務之間的通訊,是具備依賴關系,服務的穩定是公司可持續發展的重要基石,如果某一台伺服器出現故障,就很容易因為依賴關系而發生大規模故障,為了解決這樣的問題,是以有了容錯的概念。
容錯機制包含了很多處理錯誤的機制。
- 熔斷機制;
- 降級機制;
- 補償機制;
- 隔斷機制等等
為什麼要使用熔斷和降級
在一個分布式系統架構中,一個服務依賴多個服務,可能存在某個應用服務調用失敗,比如逾時、異常等,需要保證在一個依賴出問題的情況下,不會導緻整體系統服務失敗,造成雪崩。
常見容錯機制:failover ,failsafe,failfase ,failback,forking。
- Failover 失敗自動切換
- Failfast 快速失敗
- Failsafe 失敗安全
- Failback 失敗自動恢複
- Forking 并行調用多個伺服器
- Broadcast廣播調用
常見容錯方案
- 逾時:逾時放棄
- 限流:在保證服務可用的情況下限制流量
- 艙壁模式:艙壁模式(Bulkhead)隔離了每個工作負載或服務的關鍵資源。這種模式主要是通過防止由一個服務引起的級聯故障來增加系統的彈性。
隔離設計重點
1、定義好需要隔離業務的大小和粒度
2、隔離模式需要配置一些高可用、重試、異步、消息中間件等使用
3、設計過程考慮運維層次的複雜度
4、監控系統
- 斷路器模式 :斷路器模式是軟體開發中用于容錯處理的最經典模式,它可以監控API方法在一定時間内的錯誤率、錯誤次數,一旦達到設定的門檻值就跳閘,對方法進行熔斷。
熔斷就是某個服務發生不斷地調用響應逾時的時候,就關掉這個服務,短路這個服務,預設讓服務搞一個預設值。
熔斷的作用
保護鍊路,防止雪崩的發生
降級本質
解決資源不足和通路量增加的沖突
熔斷機制為3種狀态
- 關閉(closed)
- 打開(open)
- 半開(half-open)
Spring Cloud Circuit Breaker 是一個內建性的架構,内部整合了 Netflix Hystrix、Resilience4j、Sentinel 和 Spring Retry 這是四款獨立的熔斷器元件。
熔斷器的設計重點
1、錯誤的類型
2、測試服務是否可用
3、并發問題
4、手動重制
5、資源分區
6、監控系統
補償機制
本質上是解決ACID和BASE理論而設計的一個機制。
一個好的補償機制要做以下幾個方面:
1. 要知道這個機制執行後要達到什麼狀态
2. 當補償機制的代碼運作起來,可以進行并行或串行
3. 對完成的事務進行修改,或加一個修改事務
補償設計重點
1、因為補償機制是為了努力執行一個業務流程
2、接口支援幂等性,有重試機制
3、如果業務流程有問題,一定要幫我們復原和補償
4、針對不同業務考慮對應不同的解決方案
sentinel的使用可以分為兩個部分
- 核心庫不依賴任何架構/庫
- 控制台主要負責管理推送規則、監控、叢集限流配置設定管理、機器發現等。
總結