转载:https://blog.csdn.net/xtx1990/article/details/8437622

第一次在pjsip协议栈中了解到这个实现负载均衡的机制,于是网上查了下资料,下面的介绍应该可以很容易理解。

轮询调度算法(Round-Robin Scheduling)

轮询调度算法的原理是每一次把来自用户的请求轮流分配给内部中的服务器,从1开始,直到N(内部服务器个数),然后重新开始循环。

算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。

轮询调度算法流程

假设有一组服务器N台,S={S1, S2, ..., Sn},一个指示变量i表示上一次选择的服务器ID。变量i被初始化为N-1.其算法如下:

j = i;

do

{

j = (j+1) mod n;

i = j;

return Si;

} while(j != i);

return NULL;

这种算法的逻辑实现如图1所示:

图1 轮询调度实现逻辑图示

轮询调度算法假设所有服务器的处理性能都相同,不关心每台服务器的当前连接数和响应速度。当请求服务间隔时间变化比较大时,轮询调度算法导致服务器间的负载不均衡。

所以此种均衡算法适合于服务器组中的所有服务器都有相同的软硬件配置并且平均服务请求相对均衡的情况。

权重轮询调度算法(Weighted Round-Robin Scheduling)

上面所讲的轮询调度算法并没有考虑每台服务器的处理能力,在实际情况中,可能并不是这种情况。由于每台服务器的配置、安装的业务应用等不同,其处理能力会不一样。所以,我们根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请求。

权重轮询调度算法流程

假设有一组服务器S={S0, S1, ..., Sn-1}, W(Si)表示服务器Si的权值,一个指示变量i表示上一次选择的服务器,指示变量cw表示当前调度的权值,max(S)表示集合S中所有服务器的最大权值,gcd(S)表示集合S中所有服务器权值的最大公约数。变量i初始化为-1,cw初始化为零。其算法如下:

while (true) {

i = (i+1) mod n;

if (i == 0) {

cw = cw - gcd(S);

if (cw <= 0) {

cw = max(S);

if (cw == 0)

return NULL;

}

}

if (W(Si) >= cw)

return Si;

}

这种算法的逻辑实现如图2所示,图中我们假定四台服务器的处理能力为3:1:1:1.

图2 权重轮询调度实现逻辑图示

由于权重轮询调度算法考虑到了不同服务器的处理能力,所以这种均衡算法能确保高性能的服务器得到更多的使用率,避免低性能的服务器负载过重。所以,在实际应用中比较常见。

总结

轮询调度算法以及权重轮询调度算法的特点是实现起来比较简洁,并且实用。目前几乎所有的负载均衡设备均提供这种功能。

Round-Robin负载均衡算法及其实现原理相关推荐

  1. 负载均衡算法--轮询法(Round Robin)

    在分布式系统中,为了实现系统的高性能.高并发.高可用,在构架中都会进行负载均衡设计,它是分布式系统的核心和中枢,负载均衡的好坏直接影响着整个系统的性能.负载均衡分为软件均衡和硬件均衡两类,比如apac ...

  2. 负载均衡算法--加权轮询法(Weight Round Robin)

    接上一篇博文:负载均衡算法–轮询法(Round Robin),本文讲解加权轮询算法. 加权轮询算法:不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同.给配置高.负载低 ...

  3. java负载均衡原理_多种负载均衡算法及其 Java 代码实现

    首先给我们介绍下什么是负载均衡 负载均衡 树立在现有网络结构之上,它供给了一种廉价有用通明的办法扩展 网络设备和 效劳器的带宽.添加 吞吐量.加强网络数据处理才能.进步网络的灵敏性和可用性. 负载均衡 ...

  4. Ribbon 负载均衡调用04——ribbon 负载均衡算法||手写轮询算法(原理+JUC)CAS+自旋锁

    RoundRobinRule.java  源码剖析 /*** Copyright 2013 Netflix, Inc.** Licensed under the Apache License, Ver ...

  5. f5 gtm 工作原理_[转]F5负载均衡算法及基本原理

    转载:http://blog.gesha.net/archives/205/ posted on Tuesday, March 31, 2009 11:02 PM Random: This load ...

  6. 交换机链路聚合技术的负载均衡算法原理(含C语言实现)

    [注:本文[原理]部分来自转载,转载来源为https://blog.csdn.net/wuheshi/article/details/79128044,此部分原创作者暂未找到,但感谢原作者的知识贡献] ...

  7. Ribbon默认负载均衡算法之轮训算法原理解析

    目录 此项目中用到的数据库脚本文件 父模块`cloud2020`中仅有一个`pom.xml`文件 项目结构图 `pom.xml`文件 1.创建一个微服务项目用来测试 1.1创建`cloud-api-c ...

  8. 【详解】Ribbon 负载均衡服务调用原理及默认轮询负载均衡算法源码解析、手写

    Ribbon 负载均衡服务调用 一.什么是 Ribbon 二.LB负载均衡(Load Balancer)是什么 1.Ribbon 本地负载均衡客户端 VS Nginx 服务端负载均衡的区别 2.LB负 ...

  9. 五分钟让你搞懂Nginx负载均衡原理及四种负载均衡算法

    前言 今天这篇文章介绍了负载均衡的原理以及对应的四种负载均衡算法,当然还有对应的指令及实战,欢迎品尝.有不同意见的朋友可以评论区留言! 负载均衡 所谓负载均衡,就是 Nginx 把请求均匀的分摊给上游 ...

最新文章

  1. 2021年大数据Spark(五十三):Structured Streaming Deduplication
  2. “完美论文”过于真实,道出了科研狗的痛
  3. 单独写原则Single Writer Principle
  4. MYSQL驱动包升级到5.1.17版本之后会出现的问题
  5. react学习(42)----react中的jsx表达对象
  6. 聚类分析(三)Mini Batch KMeans算法
  7. (转)淘淘商城系列——Solr的安装
  8. 读书笔记五:TCP/IP详解之RARP逆地址解析协议
  9. 临时表和游标的使用小总结
  10. c# 异常处理 try-catch-finally
  11. 主从复制之操作实践(二)
  12. GARFIELD@12-12-2004
  13. shell脚本编写_shell脚本编写事例(dhcp自动安装和自动配置)
  14. Linux默认的系统管理账号是(),Linux系统管理用户账号详解
  15. 抢Google等巨头生意,纽约大学小伙挖掘并出售自己数据
  16. 使用instrument-->Allocations进行内存分析
  17. python批量处理word格式_用python批量处理word文档
  18. python半圆_如何在Python中使用Zelle图形制作半圆?
  19. 分析流量对防御DDOS攻击有何价值?
  20. 30天敏捷生活(12): 整理你的空间

热门文章

  1. 数据结构——线性表的链式表示
  2. Paas是什么——Go语言相关学习笔记
  3. Python_地址中左斜线和右斜线的区别——Python系列学习笔记
  4. 【界面无法显示】getStorageInfoSync和getStorageSync的区别
  5. Web前端开发笔记——第二章 HTML语言 第九节 框架标签、脚本标签
  6. apache php mysql下载_linux+apache+php+mysql 安装
  7. Kubernetes二进制部署——证书的制作和ETCD的部署
  8. 实验详解——Cobbler自动部署最小化安装
  9. 消息队列 策略_太狠了!京东T8架构师建议吃透这40W字消息队列文档,涨薪15K不是梦...
  10. Java串口包Javax.comm的安装