本发明涉及一种在分布式并行计算机网络中的网络请求负载均衡分配算法,尤其是涉及一种基于加权最小连接的动态反馈负载均衡方法。
背景技术:
随着计算机技术的发展,互联网的深度渗透,Web已经成为主要的内容服务形式,并极大促进了Internet用户剧烈增长和流量爆炸式增长。这也为Web服务器带来了巨大挑战。通过负载均衡技术,能有效缓解Web服务器在应对高并发、高访问量情景下的性能压力,提升Web服务器的服务质量。负载均衡技术能拓展现有的网络带宽、增加吞吐量、加强网络数据处理能力、提升网络的灵活性和可用性,有效解决数据访问和业务信息急剧增长给服务器带来的巨大处理压力。
负载均衡技术的实现主要取决于负载均衡调度策略或算法。常见的负载均衡算法包括轮询算法(Round Robin,RR)、加权轮询算法(Weighted Round Robin,WRR)、最小连接算法(Least Connection,LC)、加权最小连接算法(Weighted Least Connection,WLC)算法。其中RR、WRR为静态算法,静态算法的实现简单,分析运用方便,但是算法并行性较差,只在特定的情况下才能达到较高的效率;LC、WLC为动态算法,动态算法相比静态算法,性能可以提升40%左右,但是以连接为粒度来衡量服务器负载状况不够全面,不同连接对服务器产生的负载量存在差异。不论静态算法与动态算法,都仅从负载均衡器单方面衡量服务器负载状况,缺少获取服务器实时负载信息为依据进行负载分配。
动态负载均衡算法能最小化并行集群中应用服务的响应时间或执行时间,并且对解决高度并行系统中不可预测负载估计问题至关重要。为了更准确的、合理的分配客户端请求负载,不少学者对动态反馈负载均衡算法做了大量研究。龚梅等提出一种集群系统的透明动态反馈负载均衡算法,基于LVS下行同步信号周期性采集服务器多种负载信息,并引入负载容余进行反馈调节。该算法虽然解决了动态反馈问题,却因周期性采集,增加负载采集通信开销。王玥等提出一种旨在最小化负载均衡开销的动态自适应算法,着重考虑CPU间消息发送、接受的数量,缺乏对服务器负载信息的全面描述。Ren等通过添加单指数平滑预测机制,改进加权最小连接算法,以降低服务器负载倾斜,该算法通过历史数据进行预测,缺乏与服务器的实时动态反馈。
集中式动态负载均衡算法在均衡负载过程中引入了影响整体性能的通信负载开销,但降低了算法的可行性。
因此本研究基于Nginx反向代理构建Web服务器,为优化服务器性能,对动态负载均衡算法进行研究,提出一种基于加权最小连接,结合Nginx的upstream机制的动态反馈负载均衡算法,
技术实现要素:
本发明提出了一种基于加权最小连接的动态反馈负载均衡方法,该方法在不增加通信负载开销的基础上,实现服务器负载信息的动态反馈,提升负载分配的准确性。
本发明一种基于加权最小连接的动态反馈负载均衡方法,包括用户请求的接收,请求包的再封装,请求包的解析,负载信息的采集以及相应包的再封装,利用用户与服务器的通信链路进行指令与负载信息的传递,避免了为采集负载信息额外增加的通信开销,包括以下步骤:
(1)上游服务器的权值与连接阈值的初始化;
(2)Nginx反向代理服务器接收客户端的请求,并进行连接数的判断和负载信息采集指令的发送;
(3)上游服务器接收Nginx反向代理服务器的请求,并进行请求指令的解析和负载信息采集指令的反馈;
(4)Nginx反向代理服务器接收上游服务器的请求响应,并进行负载信息的解析以及上游服务器实时权值的更新,最后将响应返回给客户端。
步骤2的具体步骤为:
(2-1)Nginx反向代理服务器接收客户端的请求,并利用加权最小连接算法得到请求分配前的当前最佳上游服务器节点p;
(2-2)判断当前最佳上游服务器节点p的连接数是否大于所设连接阈值,若否,执行步骤(2-3)若是,执行步骤(2-4)和步骤(2-5);
(2-3)Nginx反向代理服务器将客户端请求打包后发送至上游服务器;
(2-4)Nginx反向代理服务器通过upstream机制向选择的上游服务器节点创建连接,并将负载信息采集指令填入连接的请求包头;
(2-5)Nginx反向代理服务器将带有负载信息采集指令的请求包头发送至上游服务器。
步骤3的具体步骤为:
(3-1)当前最佳上游服务器节点p接收Nginx反向代理服务器的连接请求,并进行请求包头的解析;
(3-2)判断请求包头中是否含有负载信息采集指令,若否,执行步骤(3-3),若是,执行步骤(3-4)和步骤(3-5);
(3-3)上游服务器完成客户端动态请求后,将响应转送至Nginx反向代理服务器;
(3-4)上游服务器中的信息采集器进行负载信息采集,依据动态负载指标模型进行负载信息的计算,并进行归一化成负载率(LoadRate),并将负载率填入响应包头;
(3-5)上游服务器完成客户端动态请求后,将载有负载率的响应转送至Nginx反向代理服务器。
在步骤(3-4)中,采集的负载信息包括CPU负载率、内存占用率、磁盘占用率以及网络带宽占用率。
步骤4的具体步骤为:
(4-1)Nginx反向代理服务器接收上游服务器的请求响应,进行响应包头的解析,当解析到负载率时,执行步骤(4-2),否则,执行步骤(4-4);
(4-2)判断负载率是否大于设定的负载阈值,若是,执行步骤(4-3)和步骤(4-4);若否,执行步骤(4-4);
(4-3)进行当前上游服务器实时权值的更新,减去节点的静态权值,移除载有负载率的响应包头;以达到负载均衡的效果;
(4-4)上游服务器将响应返回给客户端。
在步骤(4-2)中,负载阈值的取值范围为0.5~0.7。
本发明中,Nginx反向代理服务器负责采集指令的发送,动态权值的修改;上游服务器负责负载信息的采集。
采集指令:用于Nginx向上游服务器发送采集负载信息指令。
负载率:由动态负载指标模型计算而得,用于描述上游服务器节点实时的负载情况,值在0-1之间,Nginx根据负载率作为权值更新依据。
连接阈值:用于判定是否发送采集指令的依据,基于服务器节点的静态性能进行设置。
动态反馈负载均衡可以分解为三个部分:负载的调度分配,负载信息的动态反馈,负载信息的采集。通过结合Nginx内置加权最小连接算法、upstream机制以及上游服务器中负载信息采集器,提出动态反馈的负载均衡方法,该方法具有以下优点:
本发明在高流量的多服务器节点并行网络中,结合反向Nginx反向代理服务器,改进加权最小连接算法,使之进行优化,在不增加通信开销的基础上,实现上游服务器负载信息的采集,并动态修改Nginx反向代理服务器上的上游服务器权值,为优化负载分配提供依据。该发明避免了传统动态负载均衡算法中为采集上游服务器负载信息而产生的通信负载开销,同时减少了Nginx反向代理服务器与上游服务器间的系统负载压力。
附图说明
图1为本发明基于加权最小连接的动态反馈负载均衡方法的流程图。
具体实施方式
为了更为具体地描述本发明,下面结合附图及具体实施方式对本发明的技术方案进行详细说明。
如图1所示,本发明基于加权最小连接的动态反馈负载均衡方法,具体包括:
步骤1,对整个系统进行预初始化,包括:检测下游连接读事件,创建upstream结构体,初始化upstream结构体和上游服务器请求。
步骤2,上游服务器的权值与连接阈值的初始化。
步骤3,Nginx反向代理服务器接收客户端的请求,并利用加权最小连接算法得到请求分配前的当前最佳上游服务器节点p;
步骤4,判断当前最佳上游服务器节点p的连接数是否大于所设连接阈值,若否,执行步骤5,若是,执行步骤6和步骤7,
步骤5,Nginx反向代理服务器将客户端请求打包后发送至上游服务器;
步骤6,Nginx反向代理服务器通过upstream机制向选择的上游服务器节点创建连接,并将负载信息采集指令填入连接的请求包头;
步骤7,Nginx反向代理服务器将带有负载信息采集指令的请求包头发送至上游服务器;
步骤8,当前最佳上游服务器节点p接收Nginx反向代理服务器的连接请求,并进行请求包头的解析;
步骤9,判断请求包头中是否含有负载信息采集指令,若否,执行步骤10,若是,执行步骤11和步骤12;
步骤10,上游服务器完成客户端动态请求后,将响应转送至Nginx反向代理服务器;
步骤11,上游服务器中的信息采集器进行负载信息采集,主要采集CPU负载率,内存占用率,磁盘占用率以及网络带宽占用率,依据动态负载指标模型进行负载信息的计算,并进行归一化成负载率,并将负载率填入响应包头;
步骤12,上游服务器完成客户端动态请求后,将载有负载率的响应转送至Nginx反向代理服务器;
步骤13,Nginx反向代理服务器接收上游服务器的请求响应,进行响应包头的解析,当解析到负载率时,执行步骤14,否则,执行步骤16;
步骤14,判断负载率是否大于0.7,若是,执行步骤15和步骤16;若否,执行步骤16;
步骤15,进行当前上游服务器实时权值的更新,减去节点的静态权值,移除载有负载率的响应包头;以达到负载均衡的效果。
步骤16,上游服务器将响应返回给客户端。
以上所述的具体实施方式对本发明的技术方案和有益效果进行了详细说明,应理解的是以上所述仅为本发明的最优选实施例,并不用于限制本发明,凡在本发明的原则范围内所做的任何修改、补充和等同替换等,均应包含在本发明的保护范围之内。