由于Nagle所提出的队列轮询算法,实际上是以报文为单位进行公平轮询,进而发送报文,但是没有考虑报文大小不同带来的不公平性,导致使用大报文的连接占用较多的网络带宽。来看一下为解决此问题,理想的按照比特位为单位进行的轮询算法。

首先,假设一个理论上的队列服务机制,其可以按照比特位轮询方式(bit-by-bit round robin)进行数据发送,这样,此服务机制可保证在任意时刻每个连接队列都可获得公平的带宽服务。使用R(t)表示在t时刻已进行的轮询次数,R(t)为连续函数,分数结果表示当前存在一次还没有完成的轮询。另外,使用Nac(t)表示t时刻活动的连接(会话)数量,即在其相应队列中存有未发送的数据位bit的连接。那么,可得到以下等式:

δ R δ t = μ N a c ( t ) \frac{\delta R}{\delta t}=\frac{\mu }{N_{ac}(t)} δtδR​=Nac​(t)μ​

其中,μ为出口链路的线速(为方便起见,可假设μ=1),得到每个队列获得的公平带宽份额。

假设一个长度为P的报文,其首个数据位bit在时间t0获得发送服务,那么,最后一个数据位将在之后的第P次轮询获得服务,假定时间为t,可得以下等式:

R ( t ) = R ( t 0 ) + P R(t) = R(t_{0}) + P R(t)=R(t0​)+P

泛化以上的定义,使用tia表示属于连接a的第i个报文到达网关的时间,定义Sia和Fia分别表示此报文开始获得服务和服务结束时的R(t)的值,另外,使用Pia表示此报文的大小,以下等式成立:

F i a = S i a + P i a F_{i}^{a} = S_{i}^{a} + P_{i}^{a} Fia​=Sia​+Pia​

以及:

S i a = M A X ( F i − 1 a , R ( t i a ) ) ) S_{i}^{a} = MAX(F_{i-1}^{a}, R(t_{i}^{a}))) Sia​=MAX(Fi−1a​,R(tia​)))

如果网关的队列中有数据位,那么R(t)始终为一个单调递增的函数,网关的每个队列(连接)中报文的Fia结束周期始终与Bit-by-bit Round-Robin机制定义的报文结束服务时间一致。

按位实现的队列轮询算法相关推荐

  1. 负载均衡轮询算法和服务器性能,SpringCloud-Ribbon负载均衡机制、手写轮询算法

    Ribbon 内置的负载均衡规则 在 com.netflix.loadbalancer 包下有一个接口 IRule,它可以根据特定的算法从服务列表中选取一个要访问的服务,默认使用的是「轮询机制」 Ro ...

  2. java轮训算法_负载均衡轮询算法实现疑问

    import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.Set; /* ...

  3. 负载均衡轮询算法和服务器性能,负载均衡算法

    对于要实现高性能集群,选择好负载均衡器很重要,同时针对不同的业务场景选择合适的负载均衡算法也是非常重要的. 一.负载均衡算法分类 任务平分类 负载均衡系统将收到的任务平均分配给服务器进行处理,这里的& ...

  4. 负载均衡之加权轮询算法

    在介绍加权轮询算法(WeightedRound-Robin)之前,首先介绍一下轮询算法(Round-Robin). 一:轮询算法(Round-Robin) 轮询算法是最简单的一种负载均衡算法.它的原理 ...

  5. 微信红包业务,为什么采用轮询算法?

    目录 前言 基本的负载算法 平滑加权轮询算法 一致性哈希算法 最小活跃数算法 最优响应算法 总结 前言 负载均衡这个概念,几乎在所有支持高可用的技术栈中都存在,例如微服务.分库分表.各大中间件(MQ. ...

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

    加权轮询算法:不同的后端服务器,在机器的配置和当前系统的负载方面,可能并不相同.因此,它们的抗压能力也不相同.给配置高.负载低的机器配置更高的权重,让其处理更多的请求:给配置低.负载高的机器分配较低的 ...

  7. 微信红包业务,为什么采用轮询算法?(荣耀典藏版)

    目录 前言 1.基本的负载算法 1.1.轮询算法 1.2.随机算法 1.3.权重算法 2.平滑加权轮询算法 3.一致性哈希算法 3.1.通过其他分发算法实现缓存 3.2.致性哈希核心-哈希环 3.3. ...

  8. ryu实例---ECMP的rr(轮询)算法实现

    最近,做到一个实验,需要每隔一段时间,就改变数据的传输路径,如下图所示,主机之间的数据传输需要经过s1和s2两个交换机,交换机之间的链路有两条,实验是在这两条链路之间每隔10秒切换一次,也就是相当于E ...

  9. 【纸上得来终觉浅】RoundRobinRule源码分析后,自己手写了轮询算法

    前言 今天自己查看了RoundRobinRule的源码,通过读源码走断点,大概自己知道了源码中,参数调用,下面我是查阅相关源代码,反正看过源代码以后总感觉纸上得来终觉浅,绝知此事要躬行,然后编写了轮询 ...

最新文章

  1. PHP cron中的批处理(转)
  2. Spring Security过滤器就该这么配置!
  3. python自动化办公脚本下载-python自动化办公:文件篇(自动整理文件,一键完成)...
  4. HDU 1261 字串数
  5. idea 使用maven构建项目时,target bytecode version经常自动变化
  6. leetcode 926. Flip String to Monotone Increasing | 926. 将字符串翻转到单调递增(前缀和)
  7. 网站云服务器资料本地备份,云服务器上备份本地数据
  8. .sh文件是什么语言_关于Linux文件的一些基本命令和知识:
  9. java中nodelist的用法_我可以在Java中使用for-each遍历一个NodeList吗?
  10. GridSearchCV 参数
  11. 银灿IS916也可以量产三驱三启动成功教程
  12. linux格式化硬盘fat32,linux格式化硬盘教程 linux格式化硬盘教程是什么
  13. 超好用的jQuery插件
  14. Win10切换用户,开始菜单,应用都不见了
  15. 【学习笔记】彻底删除2345输入法
  16. tp5和微信小程序联接mqtt订阅及发布
  17. MCE公司:肺癌治疗新希望——HSP90 抑制剂
  18. java outputstream 输入文件损坏问题
  19. python生成条形码 修改图片大小
  20. 语音-小度自定义技能

热门文章

  1. vue多个表格数据合并导出excel(sheetjs或exceljs)
  2. 24小时只睡了1个小时
  3. 摧毁下属逆商的22种方法(逆商节选)
  4. icomoon下载字体图标
  5. 1000元寻北京网友代劳:去股沟烧香送瘟神!!
  6. Office文件转化PDF实现预览功能
  7. Laravel8 使用 RabbitMQ
  8. 高大上的“区块链”离生活有多远?来看国家超算济南中心专家解码!
  9. 【文献阅读】用于zero-shot识别的双曲视觉嵌入学习网络(S. Liu等人,CVPR,2020)
  10. swagger2文件下载word或者excel报错或者其他文件格式错误的解决方案