主頁 >  其他 > RALB負載均衡演算法的應用

RALB負載均衡演算法的應用

2023-06-10 08:00:08 其他

一、背景

搜索推薦演算法架構為京東集團所有的搜索推薦業務提供服務,實時回傳處理結果給上游,部門各子系統已經實作了基于CPU的自適應限流,但是Client端對Server端的呼叫依然是RR輪詢的方式,沒有考慮下游機器性能差異的情況,無法最大化利用集群整體CPU,存在著Server端CPU不均衡的問題,

京東廣告部門針對其業務場景研發的負載均衡方法很有借鑒意義,他們提出的RALB(Remote Aware Load Balance)演算法能夠提升下游服務集群機器CPU資源效率,避免CPU短板效應,讓性能好的機器能夠處理更多的流量,我們將其核心思想應用到我們的系統中,獲得了不錯的收益,

本文的結構如下:

1.RALB簡介

?簡單介紹了演算法的原理,

2.功能驗證

?將RALB負載均衡技術應用到搜索推薦架構系統中,進行功能上的驗證,

3.吞吐測驗

?主要將RALB和RR兩種負載均衡技術做對比,驗證了在集群不限流和完全限流的情況下,兩者的吞吐沒有明顯差異,在RR部分限流的情況下,兩者吞吐存在著差異,并且存在著最大的吞吐差異點,對于RALB來說,Server端不限流到全限流是一個轉折點,幾乎沒有部分限流的情況,

4.邊界測驗

?通過模擬各種邊界條件,對系統進行測驗,驗證了RALB的穩定性和可靠性,

5.功能上線

?在所有Server端集群全面開啟RALB負載均衡模式,可以看出,上線前后,Server端的QPS逐漸出現分層,Server端的CPU逐漸趨于統一,

二、RALB 簡介

RALB是一種以CPU均衡為目標的高性能負載均衡演算法,

2.1 演算法目標

1.調節Server端的CPU使用率,使得各節點之間CPU相對均衡,避免CPU使用率過高觸發集群限流

2.QPS與CPU使用率成線性關系,調節QPS能實作CPU使用率均衡的目標

2.2 演算法原理

2.2.1 演算法步驟

1.分配流量的時候,按照權重分配(帶權重的隨機演算法,wr)

2.收集CPU使用率:Server端通過RPC反饋CPU使用率(平均1s)給Client端

3.調權:定時(每3s)根據集群及各節點上的CPU使用率(視窗內均值)調節權重,使各節點CPU均衡

2.2.2 指標依賴

編號 指標 作用 來源
1 IP 可用IP串列 服務注冊發現和故障屏蔽模塊進行維護
2 實時健康度 IP可用狀態實時變化,提供演算法的邊界條件 RPC框架健康檢查功能維護
3 歷史健康度 健康度歷史值,用于判斷ip故障及恢復等邊界條件 指標2的歷史值
4 動態目標(CPU使用率) 提供均衡演算法的最直接目標依據 Server端定時統計,RPC框架通過RPC回傳
5 權重weight 實時負載分發依據 演算法更新

2.2.3 調權演算法

2.2.4 邊界處理

邊界1:反饋視窗(3s)內,如果下游ip沒被訪問到,其CPU均值為0,通過調權演算法會認為該節點性能極好,從而調大權重

邊界2:網路故障時,RPC框架將故障節點設為不可用,CPU和權重為0;網路恢復后,RPC框架將IP設定為可用,但是權重為0的節點分不到流量,從而導致該節點將一直處于不可用狀態

處理:權重的更新由定時器觸發,記錄節點的可用狀態,當節點從不可用恢復為可用狀態時,給定一個低權重,逐步恢復

2.3 落地關鍵

既要快又要穩,在任何情況下都要避免陷入僵局和雪崩,尤其要處理好邊界條件

演算法要點:

1.公式中各依賴因子的更新保持獨立的含義和更新機制,以維護演算法的可靠和簡潔

?IP串列的更新由服務注冊發現和RPC框架共同保證

?RPC更新CPU

2.注意邊界值的含義,邊界值的含義需要區分連續值

?CPU = 0,表示未知,不表示CPU性能好

?w = 0,表示不會被分配流量,只有在不可用的情況下才為0;可用情況下,應該至少有一個較小的值,保證仍能觸發RPC,進而可以更新權重

3.演算法更新權重,不要依賴RPC觸發,而應該定時更新

三、功能驗證

3.1 壓測準備

Module IP CPU
Client端 10.173.102.36 8
Server端 11.17.80.238 8
11.18.159.191 8
11.17.191.137 8

3.2 壓測資料

指標 RR負載均衡 RALB負載均衡
QPS ?Server端的QPS均衡 ?從上圖可以看出,Server端的QPS出現分層
CPU ?CPU表現也比較均勻,維持在10%左右,不過相比于RALB,節點間CPU差距大些 ****?Server端CPU表現均勻,均維持在10%左右
TP99 ?延時穩定,存在一些差異 ?延時穩定,存在些微差異,相對RR小一些

由于機器性能差距不大,所以壓測的CPU效果并不明顯,為了使CPU效果更明顯,給節點”11.17.80.238“施加起始的負載(即無流量時,CPU使用率為12.5%)

指標 LA負載均衡 RR負載均衡 RALB負載均衡
QPS ? QPS極不均勻,而且流量傾斜嚴重,會出現流量全集中在一個節點上的現象 ? QPS均勻 ?QPS出現明顯分層,其中QPS出現變化,是因為對“權重最大調整比例“進行了兩次調整(1.5 → 2.0 → 2.5) 11.17.80.238:125 → 96 → 79 11.18.159.191:238 → 252 → 262 11.17.191.137:239 → 254 → 263
CPU ? CPU不是LA均衡的目標,所以跟QPS趨勢一致,全集中單個節點上 ? CPU出現明顯分層,11.17.80.238的CPU明顯高于其他節點 ? 1、剛開始壓測,11.17.80.238的CPU高于其他兩個節點,因為“權重最大調整比例“為1.5(相對于base,固定值為10000),達到了調整極限 2、“權重最大調整比例“調整為2.0,節點間的差距變小 3、“權重最大調整比例“調整為2.5,節點間的差距進一步變小
TP99 ? 承接流量的節點延時是穩定的,由于存在節點接受的流量很低(幾乎沒有),這些節點的延時看起來波動就比較大,不過LA對于延時的效果應該是穩定的,因為大部分請求是以比較均衡的延時得到處理的, ? 延時穩定,存在些微差異 ?延時穩定,存在些微差異,相對RR小一些

3.3 壓測結論

經過壓測,RR和LA均存在CPU不均衡的問題,會因為機器資源的性能差異,而導致短板效應,達不到充分利用資源的目的,

RALB是以CPU作為均衡目標的,所以會根據節點的CPU實時調整節點承接的QPS,進而達到CPU均衡的目標,功能上驗證是可用的,CPU表現符合預期,

四、吞吐測驗

4.1 壓測目標

RALB是一種以CPU使用率作為動態指標的負載均衡演算法,能很好地解決CPU不均衡的問題,避免CPU短板效應,讓性能好的機器能夠處理更多的流量,因此,我們期望RALB負載均衡策略相比于RR輪詢策略能夠得到一定程度的吞吐提升,

4.2 壓測準備

Server端100臺機器供測驗,Server端為純CPU自適應限流,限流閾值配置為55%,

4.3 壓測資料

通過壓測在RALB和RR兩種負載均衡模式下,Server端的吞吐隨著流量變化的趨勢,對比兩種負載均衡策略對于集群吞吐的影響,

4.3.1 RALB

4.3.1.1 吞吐資料

下表是Server端的吞吐資料,由測驗發壓Client端,負載均衡模式設定為RALB,在18:17Server端的狀況接近于剛剛限流,整個壓測階段,壓測了不限流、部分限流、完全限流3種情況,

時間 17:40 17:45 17:52 18:17 18:22
總流量 2270 1715 1152 1096 973
處理流量 982 1010 1049 1061 973
被限流量 1288 705 103 35 0
限流比例 56.74% 41% 8.9% 3.2% 0%
平均CPU使用率 55% 55% 54% 54% 49%

4.3.1.2 指標監控

Server端機器收到的流量按性能分配,CPU保持均衡,

QPS CPU

4.3.2 RR

4.3.2.1 吞吐資料

下表是Server端的吞吐資料,由測驗發壓Client端,負載均衡模式設定為RR,在18:46 Server端的整體流量接近于18:17 Server端的整體流量,后面將重點對比這兩個關鍵時刻的資料,

時間 18:40 18:46 19:57 20:02 20:04 20:09
總流量 967 1082 1149 1172 1263 1314
處理流量 927 991 1024 1036 1048 1047
被限流量 40 91 125 136 216 267
限流比例 4.18% 8.4% 10.92% 11.6% 17.1% 20.32%
平均CPU使用率 45%(部分限流) 51%(部分限流) 53%(部分限流) 54%(接近全部限流) 55%(全部限流) 55%(全部限流)

4.3.2.2 指標監控

Server端收到的流量均衡,但是CPU有差異,

QPS CPU
?

4.4 壓測分析

4.4.1 吞吐曲線

根據4.3節的壓測資料,進行Server端吞吐曲線的繪制,對比RALB和RR兩種負載均衡模式下的吞吐變化趨勢,

import matplotlib.pyplot as plt
import numpy as np
       
x = [0,1,2,3,4,5,6,7,8,9,9.73,10.958,11.52,17.15,22.7]
y = [0,1,2,3,4,5,6,7,8,9,9.73,10.61,10.49,10.10,9.82]
  
w = [0,1,2,3,4,5,6,7,8,9.674,10.823,11.496,11.723,12.639,13.141,17.15,22.7]
z = [0,1,2,3,4,5,6,7,8,9.27,9.91,10.24,10.36,10.48,10.47,10.10,9.82]
  
plt.plot(x, y, 'r-o')
plt.plot(w, z, 'g-o')
plt.show()







4.4.2 曲線分析

負載均衡策略 RALB RR
階段一:所有機器未限流 接收QPS=處理QPS,表現為y =x 的直線 接收QPS=處理QPS,表現為y =x 的直線
階段二:部分機器限流 不存在RALB根據下游CPU進行流量分配,下游根據CPU進行限流,理論上來講,下游的CPU永遠保持一致,所有的機器同時達到限流,不存在部分機器限流的情況, 所以在圖中,不限流與全部機器限流是一個轉折點,沒有平滑過渡的階段, RR策略,下游的機器分配得到的QPS一致,由于下游根據CPU進行限流,所以不同機器限流的時刻有差異, 相對于RALB,RR更早地出現了限流的情況,并且在達到限流之前,RR的吞吐是一直小于RALB的,
階段三:全部機器限流 全部機器都達到限流閾值55%之后,理論上,之后無論流量怎樣增加,處理的QPS會維持不變,圖中顯示處理的QPS出現了一定程度的下降,是因為處理限流也需要消耗部分CPU RR達到全部限流的時間要比RALB更晚,在全部限流之后,兩種模式的處理的QPS是一致的,

4.5 壓測結論

臨界點:吞吐差異最大的情況,即RALB模式下非限流與全限流的轉折點,

通過上述分析,可以知道,在RALB不限流與全部限流的臨界點處,RR與RALB的吞吐差異最大,

此時,計算得出RALB模式下,Server集群吞吐提升7.06%,

五、邊界測驗

通過模擬各種邊界條件,來判斷系統在邊界條件的情況下,系統的穩定性,

邊界條件 壓測情形 壓測結論
下游節點限流 CPU限流 懲罰因子的調整對于流量的分配有重要影響
QPS限流 符合預期
下游節點超時 Server端超時每個請求,固定sleep 1s 請求持續超時期間分配的流量基本為0
下游節點例外退出 Server端行程被殺死直接kill -9 pid 殺死行程并自動拉起,流量分配快速恢復
下游節點增減 Server端手動Jsf上下線 jsf下線期間不承接流量
Server端重啟stop + start 正常反注冊、注冊方式操作Server端行程,流量分配符合預期

六、功能上線

宿遷機房Client端上線配置,在所有Server端集群全面開啟RALB負載均衡模式,可以看出,上線前后,Server端的QPS逐漸出現分層,Server端的CPU逐漸趨于統一,

上線前后Server端QPS分布 上線前后Server端的CPU分布

參考資料

1.負載均衡技術

2.深入淺出負載均衡

作者:京東零售 胡沛棟

來源:京東云開發者社區

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/554774.html

標籤:其他

上一篇:【技識訓累】演算法中的貪心演算法【二】

下一篇:返回列表

標籤雲
其他(160692) Python(38219) JavaScript(25489) Java(18216) C(15237) 區塊鏈(8270) C#(7972) AI(7469) 爪哇(7425) MySQL(7241) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5873) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4589) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2435) ASP.NET(2404) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1984) 功能(1967) HtmlCss(1956) Web開發(1951) C++(1933) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1880) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • RALB負載均衡演算法的應用

    搜索推薦演算法架構為京東集團所有的搜索推薦業務提供服務,實時回傳處理結果給上游。部門各子系統已經實作了基于CPU的自適應限流,但是Client端對Server端的呼叫依然是RR輪詢的方式,沒有考慮下游機器性能差異的情況,無法最大化利用集群整體CPU,存在著Server端CPU不均衡的問題。 ......

    uj5u.com 2023-06-10 08:00:08 more
  • 【技識訓累】演算法中的貪心演算法【二】

    博客推行版本更新,成果積累制度,已經寫過的博客還會再次更新,不斷地琢磨,高質量高數量都是要追求的,工匠精神是學習必不可少的精神。因此,大家有何建議歡迎在評論區踴躍發言,你們的支持是我最大的動力,你們敢投,我就敢肝 ......

    uj5u.com 2023-06-10 07:59:59 more
  • DosBox環境配置

    # DosBox環境配置 DOSBox 是一個基于 x86 架構的 PC 的模擬器,它允許用戶在現代作業系統上運行 DOS 程式。DOSBox 是自由軟體,可以在 Windows、Linux ,macOS 等作業系統平臺上運行。 DOSBox 最初的設計目標是為那些依賴 MS-DOS 作業系統(即停 ......

    uj5u.com 2023-06-10 07:59:38 more
  • 網路傳輸中的重要引數-談談帶寬

    [toc] 除了上篇提到的[RTT與丟包率](https://www.cnblogs.com/mapleumr/p/17464980.html),大多數人更關心的也許是網路的帶寬(Bandwidth,Bw),畢竟電信、聯通等公司廣告主打的就是一個百兆、千兆帶寬,聽著嘎嘎猛。 很自然的一個認知是,帶寬 ......

    uj5u.com 2023-06-10 07:59:33 more
  • 幫您了解CDN節點如何做到訪問加速與安全防護

    本文分享自天翼云開發者社區《幫您了解CDN節點如何做到訪問加速與安全防護》,作者:尹****荷 網站業務痛點 在當前網站快速發展的背景下,網站業務突增往往伴隨著一系列網路安全隱患。主要會有以下痛點: 1. 高并發壓力大:網站在業務突增中,會帶來高并發的問題,可能會導致服務器資源耗盡、服務崩潰等引起的 ......

    uj5u.com 2023-06-10 07:59:23 more
  • 【計算機網路】延遲

    目錄 延遲 光速限制 總結 延遲 延遲是指資料從一個地方到另一個地方所需的時間。延遲通常用毫秒(ms)或微秒(μs)來度量。延遲是指資料從發送方到接收方所需的時間,也稱為往返時間(RTT)。 延遲取決于多個因素,包括網路拓撲結構、距離、中間節點數、傳輸介質和網路流量。在處理實時應用程式時,延遲是一個 ......

    uj5u.com 2023-06-10 07:59:16 more
  • 實體講解Flink 流處理程式編程模型

    摘要:在深入了解 Flink 實時資料處理程式的開發之前,先通過一個簡單示例來了解使用 Flink 的 DataStream API 構建有狀態流應用程式的程序。 本文分享自華為云社區《Flink 實體:Flink 流處理程式編程模型》,作者:TiAmoZhang 。 在深入了解 Flink 實時數 ......

    uj5u.com 2023-06-10 07:58:19 more
  • 虛擬ECU實踐:汽車發動機控制器仿真

    ?虛擬化技術使得在Windows PC上對汽車ECU(Electronic Control Unit,電子控制器單元)進行倍訓仿真成為可能,能有效改善ECU開發程序。一些開發任務得以從道路、測驗平臺和HIL(Hardware in the Loop,硬體在環)轉移到PC上,縮短開發時間和成本。 ▲汽 ......

    uj5u.com 2023-06-10 07:57:42 more
  • selenium-wire簡介

    一.簡介 以下來自chatGPT回答: selenium-wire是一個基于selenium的Python庫,它擴展了selenium的功能,使得我們可以在自動化測驗中直接訪問和修改瀏覽器的網路請求和回應。selenium-wire可以攔截和修改HTTP請求和回應,從而可以在測驗程序中模擬 網路環境 ......

    uj5u.com 2023-06-10 07:57:33 more
  • 9.3 Django框架

    Django 是一個非常流行的 Python Web 開發框架,它是完整且強大的,適用于構建大型 Web 應用。在這一章節中,我們將詳細介紹 Django 的基本概念、組件和用法。為了便于理解,我們將使用實體來展示如何使用 Django 構建一個簡單的 Web 應用。 ### 9.3.1 安裝和創建 ......

    uj5u.com 2023-06-10 07:57:18 more