網際網路分散式服務的特點是高併發,服務的每個服務節點都可能由於訪問量過大而引起一系列的問題,比如業務處理耗時過長、負載過高、CPU 飆高、頻繁 Full GC 、記憶體耗盡以及服務程序直接宕機等等。為了保證服務的穩定性和高可用性,我們就需要業務進行自我保護。
一。 常用手段
1. 壓測
——進行效能最佳化及容量規劃
2. 限流
——防止服務端被流量高峰壓垮
落地方式有:Guava RateLimiter、lua+Redis、Sentinel等;
3. 降級
——優先保證核心服務高可用
服務降級,就是對不怎麼重要的服務進行低優先順序的處理,甚至某些條件下可以忽略。
4. 熔斷
——防止當前服務被下游慢服務拖垮
落地方式有: Hystrix、Resilience4j;
5. 自動擴縮容
——可以扛住流量洪峰,需要資源冗餘
二。 熔斷限流機制
1. 服務端限流機制自我保護
1。1 要考慮到應用和 IP 級別,方便在服務治理的時候,對部分訪問量特別大的應用進行合理的限流;
1。2 服務端限流閾值配置都是作用於單機的,而有些場景下,例如對整個服務設定限流閾值,服務進行擴容時,限流的配置並不方便,我們可以
在註冊中心或配置中心下發限流閾值配置
的時候,將總服務節點數也下發給服務節點,讓 RPC 框架自己去計算限流閾值;
1。3 還可以讓 RPC 框架的限流模組依賴一個
專門的限流服務
,對服務設定限流閾值進行精準地控制,但是這種方式依賴了限流服務,相比單機的限流方式,在效能和耗時上有劣勢。
2. 呼叫端熔斷機制自我保護
熔斷器的工作機制主要是關閉、開啟和半開啟這三個狀態之間的切換。
2。1 在正常情況下,熔斷器是關閉的;
2。2 當呼叫端呼叫下游服務出現異常時,熔斷器會收集異常指標資訊進行計算,當達到熔斷條件時熔斷器開啟,這時呼叫端再發起請求是會直接被熔斷器攔截,並快速地執行失敗邏輯;
2。3 當熔斷器開啟一段時間後,會轉為半開啟狀態,這時熔斷器允許呼叫端傳送一個請求給服務端,如果這次請求能夠正常地得到服務端的響應,則將狀態置為關閉狀態,否則設定為開啟。
總結:防止呼叫下游服務出現異常,或者耗時過長影響呼叫端的業務邏輯,
RPC 框架可以在動態代理的邏輯中去整合熔斷器
,實現 RPC 框架的熔斷功能。
感謝你的閱讀,喜歡的話歡迎點贊和轉發哦[玫瑰]
本頭條號專注於網際網路領域的技術交流與經驗分享,期待您的關注。