「分散式微服務」RPC框架是如何實現業務的自我保護?

網際網路分散式服務的特點是高併發,服務的每個服務節點都可能由於訪問量過大而引起一系列的問題,比如業務處理耗時過長、負載過高、CPU 飆高、頻繁 Full GC 、記憶體耗盡以及服務程序直接宕機等等。為了保證服務的穩定性和高可用性,我們就需要業務進行自我保護。

一。 常用手段

1. 壓測

——進行效能最佳化及容量規劃

2. 限流

——防止服務端被流量高峰壓垮

落地方式有:Guava RateLimiter、lua+Redis、Sentinel等;

3. 降級

——優先保證核心服務高可用

服務降級,就是對不怎麼重要的服務進行低優先順序的處理,甚至某些條件下可以忽略。

4. 熔斷

——防止當前服務被下游慢服務拖垮

落地方式有: Hystrix、Resilience4j;

5. 自動擴縮容

——可以扛住流量洪峰,需要資源冗餘

二。 熔斷限流機制

「分散式微服務」RPC框架是如何實現業務的自我保護?

1. 服務端限流機制自我保護

1。1 要考慮到應用和 IP 級別,方便在服務治理的時候,對部分訪問量特別大的應用進行合理的限流;

1。2 服務端限流閾值配置都是作用於單機的,而有些場景下,例如對整個服務設定限流閾值,服務進行擴容時,限流的配置並不方便,我們可以

在註冊中心或配置中心下發限流閾值配置

的時候,將總服務節點數也下發給服務節點,讓 RPC 框架自己去計算限流閾值;

1。3 還可以讓 RPC 框架的限流模組依賴一個

專門的限流服務

,對服務設定限流閾值進行精準地控制,但是這種方式依賴了限流服務,相比單機的限流方式,在效能和耗時上有劣勢。

2. 呼叫端熔斷機制自我保護

熔斷器的工作機制主要是關閉、開啟和半開啟這三個狀態之間的切換。

2。1 在正常情況下,熔斷器是關閉的;

2。2 當呼叫端呼叫下游服務出現異常時,熔斷器會收集異常指標資訊進行計算,當達到熔斷條件時熔斷器開啟,這時呼叫端再發起請求是會直接被熔斷器攔截,並快速地執行失敗邏輯;

2。3 當熔斷器開啟一段時間後,會轉為半開啟狀態,這時熔斷器允許呼叫端傳送一個請求給服務端,如果這次請求能夠正常地得到服務端的響應,則將狀態置為關閉狀態,否則設定為開啟。

總結:防止呼叫下游服務出現異常,或者耗時過長影響呼叫端的業務邏輯,

RPC 框架可以在動態代理的邏輯中去整合熔斷器

,實現 RPC 框架的熔斷功能。

感謝你的閱讀,喜歡的話歡迎點贊和轉發哦[玫瑰]

本頭條號專注於網際網路領域的技術交流與經驗分享,期待您的關注。