微服務架構之服務容錯


服務容錯的緣由

  這其實是高並發帶來的問題,在微服務架構中,我們將業務拆分為一個個服務,服務於服務之間可以互相調用,但是由於網絡原因或者自身的原因,服務並不能保證服務的100%可用,如果單個服務出現問題,調用這個服務就會出現網絡延遲,此時若有大量網絡涌入,會形成任務堆積,最終導致服務癱瘓。

服務雪崩效應

  在分布式系統中,由於網絡原因或自身的原因,服務一般無法保證100%可用,如果一個服務出現了問題,調用這個服務就會出現線程阻塞的情況,此時若有大量的請求涌入,就會出現多條線程阻塞等待,進而導致服務癱瘓。由於服務與服務之間的依賴性,故障會傳播,會對整個微服務系統造成災難性的嚴重后果,這就是服務故障的“雪崩效應”。

  雪崩發生的原因多種多樣,有不合理的容量設計,或者是高並發下某一個方法相應變慢,亦或是某台機器的資源耗盡。我們無法完全杜絕雪崩效應源頭的發生,只有做好足夠的容錯,保證一個服務發生問題,不影響到其他服務的正常運行,也就是雪落而不雪崩。

常見容錯方案

隔離

  它是指將系統按照一定的規則划分為若干個服務模塊,各個模塊之間相對獨立,無強依賴。當有故障發生時,能將問題和影響隔離在某個模塊內部,而不擴散風險,不涉及其他模塊,不影響整體的系統服務。常見的隔離方式有:線程池隔離和信號量隔離。

 超時

  在上游服務調用下游服務時,設置一個最大響應時間,如果超過這個時間,下游未作出反應,就斷開請求,釋放掉線程。

限流

  限流就是限制系統的輸入和輸出流量已達到保護系統的目的,為了保證系統的穩定運行,一旦達到需要限制的閾值,就需要限制流量並采取少量措施以完成限制流量的目的。

熔斷

  在互聯網系統中,當下游服務因訪問壓力過大而響應變慢或失敗,上游服務為了保護系統整體的可用性,可以暫時切斷對下游服務的調用。這種犧牲局部,保全全體的措施叫做熔斷。熔斷一般有三種  狀態:

熔斷關閉狀態:服務沒有故障時,熔斷器所處的狀態,對調用方的調用不做任何限制。

熔斷開啟狀態:后續對該服務接口的調用不再經過網絡,直接執行本地的fallback方法。

半熔斷狀態:嘗試恢復服務調用,允許有限的流量調用該服務,並監控調用成功率,如果成功率達到預期,則說明服務已經恢復,進入熔斷關閉狀態。如果成功率很低,則重新進入熔斷關閉狀態。

 降級

  降級其實就是為服務提供一個托底方案,一旦服務無法正常調用,就是用托底方案。

 常見容錯組件

 Hystrix

  Hystrix是由Netflix開源的一個延遲和容錯庫,用於隔離訪問遠程系統、服務或者是第三方庫,防止級聯失敗,從而提升系統的可用性和容錯性。

Resilience4J

  Resilience4J是一款輕量級、簡單、文檔清晰、豐富的熔斷工具,這也是Hystrix官方推薦的替代產品,不僅如此,Resilience4J還原生支持SpringBoot,而且監控也支持和promettheus等多款主流產品進行整合。

Sentinel

  Sentinel是阿里巴巴開源的一款斷路器實現,本身在阿里內部已經被大規模采用,非常穩定。

 


免責聲明!

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



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