分佈式系統之常見的負載均衡策略

科技 java文章分享 java文章分享 2017-08-27

負載均衡策略是服務重要的屬性,分佈式服務框架通常會提供多種負載均衡策略,同時支持用戶擴展負載均衡策略。

1.隨機

採用隨機算法進行負載均衡,通常在對等集群組網中,隨機路由算法消息分發還是比較均勻的,但是存在兩個主要缺點:

  • 在一個截面上碰撞的概率較高

  • 非對等集群組網,或者硬件配置差異較大,會導致各節點負載不均勻

通常在實現上會採用JDK提供的java.util.Random或者java.security.SecureRandom在指定服務提供者地址列表中生成隨機地址,消費者基於隨機生成的服務提供者地址進行遠程調用。

2.輪詢

輪詢,按公約後的權重設置輪詢比率,到達邊界之後,繼續繞接。他的主要缺點是存在慢的提供者累積請求問題。比如第二臺機器很慢,但是沒掛,當請求調到第二臺時就卡在那,久而久之,所以請求都卡在調到第二臺上。

輪詢策略的實現非常簡單,他的原理就是按照權重,順序循環遍歷服務提供者列表,到達上限後重新歸零,繼續順序循環。

3.服務調用時延

消費者緩存所有服務提供者的服務調用時延,週期性的計算服務調用平均時延,然後計算每個服務提供者服務調用時延與平均時延的差值,根據差值的大小動態調整權重,保證服務時延大的服務提供者接收更少的消息,防止消息堆積。 該策略的特點就是要保證處理能力強的服務提供者接收到更多的消息,通過動態自動調整權重消除服務調用時延的震盪範圍,使所有服務提供者服務調用時延接近平均值,實現負載均衡。

4.一致性哈希

相同參數的請求總是發送到同一個服務提供者,當某一臺服務提供者宕機時,原本發往該提供者的請求,基於虛擬節點,平攤到其他提供者,不會引起劇烈變動。平臺提供默認的虛擬節點數,可以通過配置參數進行修改。

分佈式系統之常見的負載均衡策略

5.粘滯連接

粘滯連接用於有狀態服務,儘可能讓客戶端總是向統一提供者發起服務調用,除非該提供者宕機,再連接另一臺。由於服務通常被強烈建議設計成無狀態的,因此,粘滯連接在實際項目中很少使用。

粘滯連接的實現比較簡單,客戶端首次跟服務端創建鏈路時,將該鏈路標記為粘滯連接,每次路由時,直接選擇粘滯連接,不執行負載均衡路由接口。當鏈路中斷時,更新粘滯連接為不可用,重新尋找下一個可用的連接,將其標記為粘滯連接。

相關推薦

推薦中...