版权声明:本文由吴逸翔 原创文章,转载请注明出处: 
文章原文链接:https://www.qcloud.com/community/article/538713001487764019

来源:腾云阁 https://www.qcloud.com/community

 

有个朋友的web服务,因为在线用户数目平常波动很大,按照最大在线数部署服务器显然太浪费,所以选择了腾讯云的弹性伸缩(AutoScaling)服务,在每天用户集中上线的时间点上快速扩容服务器加入到集群中分散压力。因此在集群遭遇到突发的访问压力的时候,快速的自动扩容能力就显得非常重要了。前阵子还专门为此请教了腾讯云专家,解析了快速生成主机的不传之秘 。

但是快速生成了主机并加入集群,并不能确保主机快速的分担压力,因为腾讯云的负载均衡目前只支持IP hash 和按权重轮询两种方式,这两种分配算法在新服务器加入后都需要经过一段短时间的预热才能逐步分配到流量。因此扩容后的曲线常常会是这样子的(刚刚进行的扩容实测,为了降低对业务影响测试了5分钟就停掉了):

注意红色曲线和横轴重合的部分:

(第一分钟0Mbps)

(第二分钟0Mbps)

(第三分钟0Mbps)

也就是说,虽然生成一台服务器我们可以优化到数十秒,但是新服务器加入集群后的前面几分钟几乎没有请求分发到新服务器上,随后才步入正轨。这样显然延长了压力缓解过程,让更多用户忍受了几分钟的恶劣体验。

那有没有办法缩短这个过程呢?腾讯云近期将推出的新的负载均衡轮询算法就可以解决这个问题。新算法被称为“最小连接数”算法,也就是LB会随时判断哪台主机上的HTTP连接数最少,然后尽量把新的请求分发给它。经过一番软磨硬泡,终于从负载均衡团队磨到了新LB算法的内测体验资格,立刻做了一个扩容实验。我们来看看效果:

可以看到,最开始和横轴重合的一段消失了,新服务器在接入的第一时间立刻分摊到了访问量并输出流量,集群中过载的服务器压力也就立刻得到了缓解。

不只是扩容过程会从新算法中收益,实际上在以往的算法中,集群中的服务器都难以即时分担彼此的压力,当某一台或者几台服务器压力过大的时候,LB只会继续按照权重随机的分配新的请求给它,而不是降低它的权重,让它缓一缓。而在新算法中,如果一台服务器负担压力过重导致请求无法及时响应完成,LB就会观察到它的连接数增加,并把更多的请求分配给连接数更少的服务器,从而达到更优的负载均衡效果。

当然,要充分获得这些优势都要取决于接入服务器已经实现了『无状态化』这个前提,否则负载均衡也无法随意的把一台服务器的压力转移到另一台上面。

 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐