掌握轻量级开源网络云服务器Tengine负载均衡算法的方法和步骤

,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

在阿里七层流量入口接入层(应用程序网关)场景下,Nginx官方的光滑加权循环(SWRR)负载均衡算法已经无法再完美施展它的技能。Tengine通过实现新的负载均衡算法虚拟节点加权循环平稳(VNSWRR)不仅优雅的解决了SWRR算法的缺陷,而且每秒处理能力相对于Nginx官方的SWRR算法提升了60%左右。

掌握轻量级开源网络云服务器Tengine负载均衡算法的方法和步骤”>问题<br/>接入层Tengine通过自研的动态上游模块实现动态服务发现,即运行时动态感知后端应用机器扩缩容,权重调整和健康检查等信息。同时该功能可以做很多事情,比如用户可通过调整后端应用某台机器的权重从而达到线上真实引流压测目的。然而,这些操作在Nginx原生SWRR算法下却可能引起不可逆转的血案。<br/>在接入层(应用程序网关)场景下,Nginx的负载均衡算法SWRR会导致权重被调高机器的每秒瞬间暴涨,如上图App2-host-A机器当权重调整为2时,某一时刻流量会集中转发到该机器;<br/> Nginx的SWRR算法的处理时间复杂度是O (N),在大规模后端场景下Nginx的处理能力将线性下降,<br/>综上所述,对接入层Tengine的负载均衡转发策略的改造及性能优化已迫在眉睫。<br/>原生SWRR算法分析<br/>在介绍案列之前,我们先简单介绍下Nginx的负载均衡算法SWRR转发策略及特点:<br/> SWRR算法全称是光滑的加权循环平衡,顾名思义该算法相比于其它加权轮询WRR)(到算法多一个光滑(平滑)的特性。<br/>下面我们就一个简单的列子来描述下该算法:<br/>假设有3台机器A, B, C权重分别为5,1,1,其中数组年代代表机器列表,N代表机器数量,每个机器的连续波初始化为0,电子战初始化为机器权重,tw代表本轮选择中所有机器的电子战之和,最好表示本轮被选中的机器。简单的描述就是每次选择机器列表中连续波值最大的机器,被选中机器的连续波将会减去台湾,从而降低下次被选中的机会,简单的伪代码描述如下:最好<br/>=零;<br/> tw=0; <br/> (i=随机的()% N;我!=我| |赛场;我=(i + 1) % n) {<br/>标记=0;<br/> s[我]。连续波+=s[我].ew; <br/> tw +=s[我].ew; <br/>如果(最好==NULL | | s[我]。连续波比;最好→cw){最好<br/>=, s[我];<br/>} <br/>} <br/>最佳→cw -=tw; <br/>返回最好;<br/>请求编号选择前的权重值被选中服务器的选择后的权重值</p> <p> <img src=掌握轻量级开源网络云服务器Tengine负载均衡算法的方法和步骤