Nginx動態負載均衡2--動態負載演算法設計
上一篇使用nginx+consul+nginx-upsync-module實現了nginx配置資訊的動態配置;
主要利用consul儲存nginx後端伺服器的配置資訊(ip,port, weight等),然後nignx-upsync-module模組從consul拉取資料動態重新整理nginx配置,可以通過週期性改變consul資料來改變nginx負載均衡情況。
現在主要問題是如何設計演算法,根據後端伺服器叢集的狀態來動態計算伺服器叢集的權重。
論文一:
[1]杜晉芳. 一種動態NGINX負載均衡演算法[A]. 中國通訊學會、遼寧省通訊管理局.第十屆中國通訊學會學術年會論文集[C].中國通訊學會、遼寧省通訊管理局:中國通訊學會青年工作委員會,2014:5. |
定義後端伺服器叢集的權重W:
其中Wi為第i臺伺服器的實時權重:
Wid為伺服器的初始預設權重 Wil為伺服器的負載權重 Wir為伺服器的請求響應時間權重
選取衡量伺服器的指標:
CPU利用率Uic 記憶體使用率Uis IO使用率Uio 頻寬使用率Uiw Kc,Ks,Ko,Kw為以上指標對於整體指標的相對權重,這裡權重根據伺服器效能以及負載特點來進行分配
Wir為請求相應時間的佔比 tir為上次請求響應時間 tiout為超時時間
代入有:
根據Wi實時權重來調整Nginx的配置資訊即可。
看一下作者的結果:
依次比較輪詢和動態負載均衡的平均響應時間,最長響應時間,以及單位時間請求響應數
論文二:
[1]覃川. 基於Nginx的Web伺服器負載均衡策略改進與實現[D].西南交通大學,2017. |
1.後端伺服器的效能指標
CPU利用率 CPU上下文切換率 記憶體使用率 磁碟IO頻率
響應時間 執行佇列中的任務數 空閒儲存器的比率 網路頻寬使用率 活躍任務的總處理時間
論文中使用CPU,記憶體,IO, 網路頻寬剩餘效能作為衡量指標
2.權重計算公式
總權重的計算公式: X(*)表示剩餘效能 K表示相應權重
權重的計算使用層次分析法來確定,感覺還是根據工作負載來確定好一些。
3.系統的設計與實現:
負載資訊的獲取:
cpu效能計算
根據cpu型號獲取cpu的效能分數
第一行cpu依次表示 user nice system idle iowait irq softirq
依次表示 累積的使用者態cpu時間 累積nice值為負的程序所佔cpu時間 累積的核心時間 累積的除io等待時間以外其他等待時間 累積的IO等待時間 累積的硬中斷時間 累積的軟中斷時間
時間段T1--T2的cpu使用總時間:
時間段T1--T2的空閒時間:
cpu的使用率:
cpu的剩餘效能:
RAM效能計算
磁碟IO:
網路頻寬:
權值調整過程:
第i個伺服器的初始狀態cpu,硬碟,記憶體以及網路的剩餘效能 C0i D0i M0i W0i
用Tc0 Td0 Tm0 Tw0 表示叢集所有節點初始狀態:
各個節點的初始權重:
節點的剩餘效能率:
各個節點的實時權重:
定義四種資源的相關係數,系統整體效能與四種資源均有關係,不能單純只是以資源加權求和作為總標準
節點的資源使用率
叢集的資源使用率標準差 當Su過大時,表明叢集資源利用不均衡,可以考慮實行動態均衡。
最後這兩點算是創新,之前沒有想到,另外關於動態均衡的實現,作者是自己程式設計實現的。
以下是結果,響應時間以及併發數的比較