◆吳新松 白雪 邢曉東 匡常山
基于業務意圖的AI智能負載均衡
◆吳新松1白雪2邢曉東2匡常山1
(1.中國電子技術標準化研究院 北京 100007;2.中國電信股份有限公司云計算分公司 北京 100093)
傳統的負載均衡調度算法調度方式簡單,難以實現合理的調度,常常會因為請求分配不合理導致后端實服務器負載超負荷。而目前基于后端服務器狀態反饋式的負載均衡調度算法也大多只是對相關指標設置門限或采用簡單加權等簡單數學方式進行策略調度,不夠靈活。本文提出基于AI分類推薦算法的負載均衡調度策略,實現基于業務意圖的智能調度。
AI;負載均衡調度算法;輪詢
隨著當今互聯網訪問規模的增大,單臺服務節點已經難以滿足用戶高并發訪問需求。行業里一般采用負載均衡進行流量負載的方式為用戶提供服務。而當前業內應用的負載均衡主要是靜態負載均衡,它們的調度算法比較簡單,例如四層負載均衡LVS中常見的算法有輪詢(Round Robin,RR)、加權輪詢(Weighted Round Robin,WRR)、最小連接數(Least Connection,LC)、源IP哈希(Source IP Hash,SH)等[1-2],而七層Nginx中的常見算法有RR,WRR,LC,SH,URL_HASH等調度算法[3],與四層類似。在使用靜態負載均衡情形下,常常會引發負載均衡后端某臺服務器資源耗盡情形,導致任務失效或節點崩潰,引起業務中斷。在整個調度過程中,負載均衡不能結合后端實服務器RealServer(RS)差異因素來智能進行調度,導致前述負載均衡過早出現單點資源瓶頸,所以設計一種智能合理的動態反饋式調度算法對負載均衡系統的穩健運行特別重要。
而在動態反饋式負載均衡的研究中,大多學者是根據后端RS服務器的能力,人工為負載均衡設立權值以及為后端資源負載率設計門限進行調度策略計算選取[4-7],算法比較簡單,且RS硬件能力量化為權值的方式比較粗糙,不夠科學。有些文章中的調度算法會因RS不同負載指標有偏差而得出權重結果相同情況。還有學者文章提出用基于神經網絡BP算法思想,但實際文章只是以類似神經網絡反饋思想實現的基于閾值設定的反饋機制[8]。且文章算法驗證大都是通過仿真軟件進行仿真試驗,并沒有搭建實際系統進行驗證。
本文提出一種基于業務意圖的AI智能調度算法,能實現請求合理調度,保證負載均衡系統的穩定運行。
本文將采取AI模型方式進行負載均衡調度,先基于業務特征對數據狀態進行特定多分類的推薦結果標注,然后選取合適的算法進行模型訓練和評測,最終將模型部署在策略調度端進行實時的在線推理決策。
實服務器端可能涉及的狀態參數有CPU使用率、內存使用率、磁盤I/O占用率。將這些數據進行歸一化,然后進行標注。我們按照N分類標注,比如N=5情形。模型輸入的特征有:5臺實服務器的當前CPU使用率、內存使用率和磁盤I/O利用率狀態參數。模型輸入樣本的特征向量:

樣本對應的標記為0-4中的1個數,表示策略推薦分類結果。圖1展示本文部分標記數據,
如圖1展示的11個樣本,每一列分別代表每一臺后端服務器的CPU占用比,內存占用比和磁盤I/O占用比,表格中共顯示5臺服務器情形狀態。最后一列標簽y,代表樣本標記的服務器調度選擇結果。在這里進行樣本整體標記時盡量保證服務器冗余資源預留。在不同定制化需求下,可以標注以不同的策略進行基于業務意圖的負載均衡調度策略定制。
在模型選擇方面,本文考慮的主要因素有模型本身的準召率、時延。本文傾向于選擇簡單的機器學習模型。
模型的一般常見評判標準有精確率(Precision),召回率(Recall),準確率(Accuracy)和F1-Measure[9-10]。在AI智能負載場景下運用AI模型,主要考慮模型策略上述中的準確率指標。另外,計算時延T也是要重點考慮的指標。準確率決定負載均衡對流量負載的合理性,做到盡量均衡的負載,防止單點過載。計算時延保證在負載均衡落地場景下模型對session的首包識別速度,這個也很好理解,就是后端服務器RS負載狀態數據經過模型的單次計算時間。

圖2 負載均衡AI調度相關模塊邏輯
圖2表示AI負載均衡基礎邏輯模塊架構。負載均衡端通過統計后端服務負載狀態信息特征,輸入AI策略決策模塊對到來的數據流進行調度決策,路由到合適的后端設備。在模型訓練好之后,需要結合業務情形,依賴相關工程算法將模型集成落地。
本文需要考慮兼容不同節點數量情形下流程的實現。假設當前負載均衡后端有個服務器節點,如果訓練好的模型是分類模型,值的大小也是不確定的。本文將考慮這些情形下怎樣設計通用算法盡可能快的計算調度選出最佳的節點。如果模型計算時延相比其他基礎代碼邏輯耗時長很多,我們使用多任務模式進行結果運算,且定義每一次經過模型分類的計算耗時約為,如果使用個CPU核進行并行計算的話,預期計算出最終調度節點的最短計算時間計算如下:
在保證這個時間復雜度前提下,我們盡可能減少模型計算次數。我們定義一個內存堆區隊列數組,每一個數據代表對應某一臺服務器的狀態數據。每一次模型計算都需要隊頭彈出個元素進行計算。我們采用多線程(其他粒度任務也可以考慮)不斷從隊頭消費的數據的方式來進行計算,具體當每個任務取夠個元素,馬上輸入模型進行調度計算選擇最優實服務器,計算結束將計算結果放回隊尾。然后繼續等待隊頭元素夠個再次計算消費。直到某任務識別隊列為空,將取出的數量不到個元素的緩存內容放入隊尾,直到最后一個未結束的任務識別隊列為空,完成最后計算結果保留為調度結果(如果此時元素數量仍然不夠的話,輸入狀態參數均為1.0或稍微再偏大的特征值樣本進行補全)。前述并行算法在對實時性要求很高的負載均衡場景充分利用硬件資源迅速進行結果運算輸出。
在本文實驗中,首先需要進行樣本標注和模型訓練。接著搭建實際環境對調度算法進行驗證,同時和傳統負載均衡算法調度的效果進行對比。
實驗在VMVARE虛擬環境搭建四臺虛擬機,一臺充當模擬LB,另外三臺充當RS。相應的配置如圖3所示。

圖3 實驗硬件配置
實驗中,LB節點中的狀態數據采集模塊對后端RS負載狀態數據進行不斷采集,并在用戶態模擬多用戶http請求行為,根據狀態數據對負載調度策略進行計算。因為實驗環境LB的CPU核數有限,實驗場景的RS數量較少,所以在1.4中使用前述算法對單進程任務進行處理。
實驗選擇運算量相對較小,分類效果比較好的支持向量機(SVM)模型,使用sklearn工具進行模型訓練和評估。因為后端的RS配置完全一樣,所以主要將本文的負載均衡策略和傳統的RR輪詢策略進行對比研究。本文通過標注的上千級別樣本集進行SVM模型訓練,經過測試模型達到準確率83%,平均延時為0.25ms。
經過試驗,模擬不同數量客戶端進行訪問的時候,在同等條件下關注LB端新建連接數變化,即不同算法情況下的TCP新建連接能力。在新建連接能力統一的情況下分析接口訪問的平均延時以及流量調度不勻時可能產生的單點故障情形。首先,模擬在不同客戶數對后臺每個接口分別訪問兩次情況下,觀察記錄整個過程LB端TCP新建連接數變化和接口訪問平均時延。當模擬客戶數為300、500、800和1000時候,分別如圖4的(a),(b),(c),(d)所示,AI和RR輪詢負載均衡的TCP新建連接能力起初一致(最開始處曲線斜率一樣),后面由于調度原因AI漸漸強于RR,兩種算法最終新建連接數沒有準確收斂于一個數值是因為存在連接復用情形。然后,增加客戶數樣本,統計不同客戶數不同負載算法下的接口訪問延時。如圖4所示,在AI算法情形下,接口平均訪問延時比RR輪詢算法縮短。同時,在實驗過程中,傳統RR輪詢容易使某一臺實服務器RS出現負載不均衡,比如內存不勻稱。而在內存負載過高的RS操作系統中的OOM killer(Out Of Memory killer)機制為防止內存耗盡會選擇占用內存過大的進程殺掉,所以很多時候會導致被訪問服務進程崩潰[11],而AI負載均衡算法在相同訪問壓力下則沒有出現這種情況。

圖4 不同客戶數情形下LB端新建連接變化

圖5 AI和RR算法下接口訪問時延比較
在接下來的研究中,可以通過更大量的樣本和更加合理的樣本標注方式,嘗試簡單集成模型(Bagging和Boosting等方式)[12]和深度學習模型并對參數掃描優化,然后進行訓練測試評估,考慮它們的準確率和模型可解釋性[13]。
可以考慮引入RDMA(Remote Direct Memory Access)技術[14],通過旁路系統內核,減少RS狀態數據采集延時和間隔。零拷貝方式為數據進行低延時傳輸,同時也會更少地影響RS實服務器資源使用。
本文提出了一種基于業務意圖的AI負載均衡智能調度策略,算法能對http請求進行合理的負載,在保證和傳統方法相同新建連接能力情況下,進行更優的請求負載調度,有效減少客戶接口訪問延時。同時可以避免同等訪問壓力下傳統RR算法中基于流調度產生的負載不勻稱導致宕機的現象。用戶可以通過測試分析模型命中用戶業務意圖樣本的模型準確度和重訓練方式,來更好的擬合用戶定義的合理調度行為,避免之前反饋式負載均衡方法中一系列簡單地加權建模和一些僵硬門限規則的組合,準確實現基于業務意圖的負載。
[1]王紅斌. Web服務器集群系統的自適應負載均衡調度策略研究[D].長春:吉林大學,2013.
[2]Zhangwensong. A distribution of Linux Virtual Server with some advanced features[EB/OL].(2016-4-19)/[2013-11].https://github.com/alibaba/LVS.
[3]戴偉,馬明棟,王得玉.基于Nginx的負載均衡技術研究與優化[J].計算機技術與發展,2019,29(3):77-80.
[4]楊杭,張昕,趙建平.基于動態反饋的負載均衡方法研究[J].長春理工大學學報,2017,40(6):136-142.
[5]劉健,徐磊,張維明.基于動態反饋的負載均衡算法[J].計算機工程與科學,2003,25(5):65-68.
[6]梁彪,黃戰,張維明.基于實時性能動態反饋的負載均衡算法[J].計算機工程與科學,2010,19(3):183-186.
[7]李坤.基于動態反饋機制的服務器負載均衡算法研究[J].電子科技,2005,28(9):45-49.
[8]王鵬,黃洪瓊.基于神經網絡反饋機制的改進型負載均衡算法[J]. 現代計算機,2018,12(1):3-9.
[9]董亞東.面向不平衡分類的邏輯回歸算法[D]. 鄭州:鄭州大學,2015.
[10]李航.統計學習方法[M].北京:清華大學出版社,2012:19-20.
[11]蘇煒淞.典型內存計算系統的內存開銷評測研究[D] .南京:東南大學,2016.
[12]李曉波.集成分類對比:Bagging NB &Boosting NB [J]. 微電子學與計算機,2010,27(8):136-139.
[13]紀守領,李進鋒,杜天宇,李博.機器學習模型可解釋性方法、應用與安全研究綜述[J]. 計算機研究與發展,2019,56(10):2071-2096.
[14]邱昊械.數據中心RDMA網絡資源復用與應用加速研究[D].南京:南京大學,2019.