上一篇使用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过大时,表明集群资源利用不均衡,可以考虑实行动态均衡。
最后这两点算是创新,之前没有想到,另外关于动态均衡的实现,作者是自己编程实现的。
以下是结果,响应时间以及并发数的比较