業務如何實現自我保護?
服務端的自我保護策略:限流 實現:簡單的計數器、可以做到平滑限流的滑動窗口、漏斗算法、令牌桶算法
方式一:使用方該如何配置應用維度以及 IP 維度的限流呢?
可以通過 RPC 治理的管理端進行配置,再通過注冊中心或者配置中心將限流閾值的配置下發到服務提供方的每個節點上,實現動態配置。可以讓 RPC 框架自己去計算限流閾值,當注冊中心或配置中心將限流閾值配置下發的時候,我們可以將總服務節點數也下發給服務節點,之后由服務節點自己計算限流閾值。
方式二:提供一個專門的限流服務,讓每個節點都依賴一個限流服務,當請求流量打過來時,服務節點觸發限流邏輯,調用這個限流服務來判斷是否到達了限流閾值。我們甚至可以將限流邏輯放在調用端,調用端在發出請求時先觸發限流邏輯,調用限流服務,如果請求量已經到達了限流閾值,請求都不需要發出去,直接返回給動態代理一個限流異常即可
調用端的自我保護:熔斷
在整個調用鏈中,只要中間有一個服務出現問題,都可能會引起上游的所有服務出現一系列的問題,甚至會引起整個調用鏈的服務都宕機
在一個服務作為調用端調用另外一個服務時,為了防止被調用的服務出現問題而影響到作為調用端的這個服務,這個服務也需要進行自我保護。而最有效的自我保護方式就是熔斷。
熔斷器的工作機制主要是關閉、打開和半打開這三個狀態之間的切換。在正常情況下,熔斷器是關閉的;當調用端調用下游服務出現異常時,熔斷器會收集異常指標信息進行計算,當達到熔斷條件時熔斷器打開,這時調用端再發起請求時會直接被熔斷器攔截,並快速地執行失敗邏輯;當熔斷器打開一段時間后,會轉為半打開狀態,這時熔斷器允許調用端發送一個請求給服務端,如果這次請求能夠正常地得到服務端的響應,則將狀態置為關閉狀態,否則設置為打開
在 RPC 調用的流程中,動態代理是 RPC 調用的第一個關口。在發出請求時先經過熔斷器,如果狀態是閉合則正常發出請求,如果狀態是打開則執行熔斷器的失敗策略。