這篇文章主要描述RPC的路由策略,包括為什麼需要請求隔離,為什麼不在註冊中心中實現請求隔離以及不同粒度的路由策略。 ...
10 | 路由策略:怎麼讓請求按照設計的規則發到不同的節點上?
我們在真實的環境中,服務提供方是以集群的方式對外提供服務,這對於服務調用方來說,就是一個藉口會有多個服務提供方同時提供服務,所以RCP在每次發起請求的時候,都需要從多個服務提供方節點裡面選擇一個用於發送請求。
當服務線上上運行時,我們如果有變更,會涉及到如何升級,升級過程中可能會影響服務介面,這樣會導致系統變的不穩定,甚至系統崩潰,為了減少這種風向,我們一般會選擇灰度發佈的方式來升級我們的服務實例,例如我們可以發佈少量實例來觀察是否有異常,然後根據觀察的結果,來決定是發佈更多實例還是回滾到舊版本。
雖然我們的服務在上線前會有測試的過程,但是因為線上環境太複雜了,測試只能是降低出現風險的概率,想要徹底驗證所有場景是不可能的。
我們可以考慮在上線完成後,先讓一小部分調用方請求過來進行邏輯驗證,待沒有問題後再接入其他調用方,從而實現流量隔離的效果。
因為註冊中心會維護所有服務提供方的信息,所以我們可以在註冊中心中來做流量隔離嗎?一般不採用這種方式,註冊中心在RPC中的定位是用來存儲數據並保證數據一致性,如果把複雜的請求隔離的計算邏輯放到註冊中心裡面,那麼當集群節點變多時,會導致註冊中心壓力過大,而且大部分時候,我們採用開源軟體來打架註冊中心,要加入其他計算邏輯的話,還需要進行二次開發,所以從實際的角度出發,在註冊中心中實現請求隔離是不划算的。
調用法發起RPC調用的整個流程中,在RPC發起真實請求的時候,有一個步驟就是從服務提供方節點集合裡面選擇一個合適的節點(也就是負載均衡),那麼我們可以考慮在這個節點之前,加入一個“篩選邏輯”,把符合我們要求的節點篩選出來。
這個“篩選過程”,我們稱之為“路由策略”。
我們可以設計不同的分路由策略:
- IP路由,根據服務調用方的IP地址,來決定哪些服務提供方的實例可以處理相關請求。
- 參數路由,根據服務調用方發送請求中的參數值,來決定哪些服務提供方的實例可以處理相關請求。
參數路由是比IP路由更靈活、粒度更細的路由規則,它為服務提供方應用提供了另外一個服務治理的手段。
灰度發佈功能是RPC路由功能的一個典型應用場景,通過RPC的路由策略的組合使用可以讓服務提供方更加靈活的管理、調用自己的流量,進一步降低可能導致的風險。
在RPC裡面,不論是哪種路由策略,其核心思想是一樣的,就是讓請求按照我們設定的規則發送到目標節點上,從而實現流量隔離的效果。
作者:李潘 出處:http://wing011203.cnblogs.com/ 本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。