1. 程式人生 > >Nginx動態負載均衡2--動態負載演算法設計

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過大時,表明叢集資源利用不均衡,可以考慮實行動態均衡。

最後這兩點算是創新,之前沒有想到,另外關於動態均衡的實現,作者是自己程式設計實現的。

以下是結果,響應時間以及併發數的比較