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过大时,表明集群资源利用不均衡,可以考虑实行动态均衡。

最后这两点算是创新,之前没有想到,另外关于动态均衡的实现,作者是自己编程实现的。

以下是结果,响应时间以及并发数的比较

    

猜你喜欢

转载自blog.csdn.net/u014106644/article/details/84235992
今日推荐