桶子算法

简介:
1.       什么叫桶子算法?
桶子算法是网络通讯的两端看成是一定时间上的具有长度和宽度的桶子;数据在通讯的两端传输时候数据在不停的过去,这个时间可以看成是长度,及从开始通讯到现在已经经过了多长时间,而宽度当然是网络带宽了;二者的乘积可以看成是具有一定体积的桶子。如下图:
 

2.       用途
桶子算法的目的是为了对发送端的数据流量进行控制。
3.       原理
我们假定这个桶子具有T (ms)长度,带宽为B (kbps),那么这个桶子的体积位:
V=T * B
从某个时间T1开始,有数据不断填充这个桶子,但如果数据填充的不是非常快,或者说数据的流量小于网络带宽B的时候,这个桶子永远都填不满,如下列图表示:
 

如图所示我们这个桶子的体积随着时间在增加,从T1时刻的V1(B*(T1-T0))变化到T2时刻的V2(B*(T2-T0)),桶子的体积增加了B*(T2-T1),如果在这段时间内,实际的数据流量小于这个增量,那么桶子始终有空闲的地方,这样桶子就不会满,实际上在这种情况下桶子算法对流量是控制不了的。
如果在T2-T1时间内,网络的实际数据流量很大,即数据在很短的时间内(小于T2-T1)就将填满了这段容量,那么桶子算法开始发挥流量控制的作用。
在发送数据的时候需要检测桶子的可用大小,如果桶子的可用大小为0表示已经不能再向这个桶子填充任何数据了,必须等待桶子恢复到一定的体积之后才能再接收数据(我们假设为半桶的体积);当桶子恢复的时候我们又可以向这个桶子填充数据了,但如果又很快满了,那么必须又停止下来等待桶子恢复。桶子算法就是通过发发停停来控制流量的。当然如果你将带宽设置的大一些,桶子的体积就大一点,就不那么容易被填满,也能够更快速的发送数据。
 
4.       注意
桶子算法又几点需要注意:
l         桶子的最大容积;这是由时间来决定,我们假定的T,这个值的选择也决定了你可以向桶子发送多大的数据,当然这个时间在不同的网络环境下取值是不同的;在有的网络下,即使你设置的很大,但下面的套接字层已经没有办法发送更快了。
l         恢复算法的采用;一般桶子满了之后需要等待一段时间,如果设置一个时间让网络不至于太闲或造成数据的突然高峰,也不至于让数据不停的跳动,确实很重要。
l      这个流量控制只能对物理带宽以内的流量进行控制。


本文转自jazka 51CTO博客,原文链接:http://blog.51cto.com/jazka/197371,如需转载请自行联系原作者
 
相关文章
|
定位技术 开发工具 图形学
|
分布式计算 Serverless 调度
EMR Serverless Spark:结合实时计算 Flink 基于 Paimon 实现流批一体
本文演示了使用实时计算 Flink 版和 Serverless Spark 产品快速构建 Paimon 数据湖分析的流程,包括数据入湖 OSS、交互式查询,以及离线Compact。Serverless Spark完全兼容Paimon,通过内置的DLF的元数据实现了和其余云产品如实时计算Flink版的元数据互通,形成了完整的流批一体的解决方案。同时支持灵活的作业运行方式和参数配置,能够满足实时分析、生产调度等多项需求。
61175 107
|
Ubuntu Linux 网络安全
从头安装Arch Linux系统
本文记录了作者安装Arch Linux系统的过程,包括安装成果展示和遇到的疑难点及其解决方法,如硬盘不足、下载失败、设置时区、安装微码和配置无密码登录等。
451 1
从头安装Arch Linux系统
|
Oracle 关系型数据库 数据库
关系型数据库Oracle执行RMAN脚本
【7月更文挑战第22天】
387 2
|
数据可视化 前端开发 JavaScript
【Echarts大屏】智慧图书馆可视化大屏(附源码一键复制)
【Echarts大屏】智慧图书馆可视化大屏(附源码一键复制)
【最全最详细】publiccms常用的代码片段
【最全最详细】publiccms常用的代码片段
|
域名解析 网络协议 Linux
Linux DNS服务详解——DNS服务搭建细节
Linux DNS服务详解——DNS服务搭建细节
298 5
|
存储 Rust 索引
Rust 笔记:Rust 语言中的运算符
Rust 笔记:Rust 语言中的运算符
398 0
|
SQL 数据库 HIVE
python链接hive数据库实现增删改查操作
python链接hive数据库实现增删改查操作
652 0