微服务架构 —— 服务雪崩与容错方案
導航
- 一、什么是服務雪崩
- 二、雪崩效應的三個核心原因
- 三、容錯
- 四、業界常見容錯思路
- 五、常見容錯組件
一、什么是服務雪崩
服務雪崩 指的是微服務架構中,微服務各節點之間由于網絡通信異常或微服務自身故障等問題,導致請求堆積、任務堆積,消耗和占用容器線程,并由此而影響其他正常業務流程以及其他微服務節點,局部故障擴散為整體故障的一種現象,嚴重時可能導致整個系統癱瘓,就行“雪崩”一樣。
二、雪崩效應的三個核心原因
被上游服務壓垮
tomcat 在處理請求時會分配線程資源,但這個資源是有限的,默認的 tomcat 線程數是 200,可以通過 server.tomcat.max-threads 參數設置。但如果上游服務在某一時刻發來大量的請求,一度超過當前節點可以處理的請求數量,就可能會導致節點故障,引發雪崩。常見的解決辦法是限流。
被下游服務拖垮
由于下游服務的響應過慢,導致服務堆積,從而拖慢了當前節點的處理節奏,積小成多,造成雪崩。
常見的解決辦法是增加超時機制、熔斷、降級等。
外部環境影響
當前節點所處的服務器環境,如內存、cpu等,同樣可能影響當前節點的處理速度。
三、容錯
服務故障不可避免,但是決不能因為局部故障導致大面積的服務癱瘓,容錯是為了通過某些手段盡可能的減小發生故障的概率,以及就算發生了故障也不至于擴散開來,目的是提高整體微服務架構的可用性,做到“雪落而不雪崩”。
上面提到的 限流、熔斷、降級等,都是容錯的常見措施。
四、業界常見容錯思路
隔離
指的是在服務內部,對一些業務進行劃分,盡量減少故障線程耗盡所有服務線程資源。
常見的隔離手段有:線程池隔離、信號量隔離。
超時
設置最大響應時間,避免線程資源占用過久。
限流
限制請求的數量,一旦達到閾值,就拒絕額外的請求進入服務,保護服務節點的正常、平穩的運行。
熔斷
當下游服務因為訪問壓力過大而響應變慢或失敗,上游服務為了保護系統整體可用性,可以暫時切斷對下游服務的調用,即犧牲局部,保全整體。
熔斷分為三種狀態:關閉、開啟、半熔斷。關閉:服務沒有故障時熔斷器所處的狀態,對調用方的調用無任何限制;開啟:后續對該接口的調用不再經過網絡,直接執行本地的 fallback 方法;半熔斷:嘗試恢復服務調用,允許有限的流量調用該服務,并監控調用成功率,如果達到預期,進入熔斷關閉狀態,若未達預期,則重新進入開啟狀態。
降級
托底方案,如果微服務調用失敗,如超時,就執行降級方案。
五、常見容錯組件
Sentinel、Hystrix、Resilience4j
總結
以上是生活随笔為你收集整理的微服务架构 —— 服务雪崩与容错方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux进阶之路——常用命令总结
- 下一篇: 数据结构快速掌握和温习-面试神器