加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
    • WRR 算法
    • SWRR 算法
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

负载均衡实现方式

2021/01/21
415
阅读需 3 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

负载均衡(Load Balance),其意思就是将负载(工作任务)进行平衡、分摊到多个操作单元上进行执行。在负载均衡中可以分为两种方式,硬件方式与软件方式。硬件负载均衡主要是有 F5、思科,软件方式(不区分四层与七层负载均衡)主要包括 http 重定向、DNS 重定向、反向代理(如 nginx)、NAT 转换等。

WRR 算法

假设有3台机器a、b、c,权重分别为5,1,1, WRR(Weighted Round Robin)算法实现方式是:每次选出权重最大的机器,其权重减 1,直到权重全部为 0。然后按照生成的序列循环。

                           

最终得到的循环序列为:a,a,a,a,a,b,c,虽然此时负载是均衡的(5:1:1),但是前五次访问都打到 a 机器,b 和 c 机器是空闲的。理想状态是在均衡的情况下让访问次数也均衡分布,于是就有了 SWRR 算法(Smooth Weighted Round Robin),平滑加权轮训调度算法。

SWRR 算法

对于上面的案例,SWRR 算法策略是:

1、从权重中选出最大的,减去总权重

2、然后再给每个权重加上自身权重初始值

3、再次轮训,直到权重为 0,确定序列

得到的最终循环序列是:a,a,b,a,c,a,a,访问效果比 WRR 算法更优。

但是 SWRR 算法在大量并发来临的时候,第一次始终会选择 a 机器,就有可能导致 a 机器瘫痪。解决方案为:对于生成的序列随机选择一个开始,比如有 5 台负载的机器,都生成了 a,a,b,a,c,a,a 的序列,但是每台机器不完全按照这个序列轮训,而是随机选择一个开始,那生成的序列就可能变成下面这样:

这样能降低流量突增时第一台机器被打瘫痪的概率。

相关推荐

电子产业图谱

机械转行IT狗,目前在阿里巴巴淘宝事业群。日常记录Linux应用开发、嵌入式操作系统、无线网络协议栈。刚深入使用Java,跟大家一起入门交流。