基于路由和QoS令牌桶的集中式限速网关
2019-12-24梁润强
◆梁润强 史 伟
基于路由和QoS令牌桶的集中式限速网关
◆梁润强 史 伟
(广东睿江云计算股份有限公司 广东 528000)
企业或数据中心的带宽总是有限的,但是需要服务的用户却不止一个,特别是在当前云计算兴起的背景下,云计算节点的用户数量通常都是巨大的,但是带宽容量固定,不能由于某个用户的大流量传输拥塞了网络,导致其他用户无法正常使用服务。设备通讯协议的设计最初只是考虑比较简单的场景,而到目前为止,组网的环境复杂多样,有公共互联网,有专线网络。而目前兴起的云计算节点也需要接入到现有的网络环境中,这众多的网络连接在一起,承载传输着各种各样的应用流量,而应用流量有些需要大带宽,而有些却对延时有比较严格的要求,但是这其中几乎所有的流量都是基于TCP/IP协议传输的。在这复杂的环境中如何实现资源的合理性调度、有效性管理和可靠性实现,也就提出了网络对服务质量QoS(Quality of Service)的要求。
路由;QoS;令牌桶;限速
0 引言
下文将简单介绍QoS中令牌桶算法的工作原理,并且浅显分析为什么TCP协议不能简单地进行流量限制而令牌桶算法能很好地为TCP协议服务,简述在目前新兴的云计算技术环境下如何使用令牌桶技术比较合理。
1 为什么使用令牌桶
我们首先来想想使用何种技术对流量进行控制,一个容易想到的方法:在流量处理设备上面设定两个线程,分别为统计线程T和报文线理线程P,P线程收到报文的时候,使用该报文上的某个标识,例如目标IP地址作为索引,首先判断该IP的速率是否大于设定值,是的话则丢弃报文,否则让该IP的当前报文数量加1,且发送该报文;T线程负责对每个IP进行速率统计,每一秒钟使用IP的当前报文减去上一秒的报文,得到该IP的速率。
这种简单粗暴的流量控制方法对UDP协议的控制没有问题,但对TCP协议的控制有一个致命的缺点:假如在某个TCP会话传输的过程中,P线程发现当前速率大于设定值,那么在T线程得出下一秒速率之前,该会话的所有后续报文都将会被丢弃,这将会使该会话因为丢失过多报文而断开,无法保证QoS要求的可靠性。
1.1 什么是令牌桶
令牌桶是QoS中一种对流量的控制技术,目前大众普遍认可使用这种技术来实现对流量的限速需求。令牌桶通过设定大小固定的装载一定数量的令牌的桶,然后设置向桶添加令牌的速率,当有报文需要通行时,需要首先向令牌桶申请取出同等大小数量的令牌。假如目前桶中没有足够的令牌数,则对当前报文采取禁止通行或者缓存到队列或者做特殊标记,以此实现对流量的控制和监管。
1.2 令牌桶如何限速
令牌桶定义了3个参数:
(1)承诺信息速率(CIR):此为向令牌桶中添加令牌的速率;
(2)承诺突发量(Bc):此为令牌桶的容量大小;
(3)时间间隔:用来作为测量时间(Tc),用于规定间隔多长时间向令牌桶加入令牌。
可通过CIR和Bc的关系计算得到:Tc=Bc/CIR。比如,将CIR设置为1000bit/s,如Bc设为200,那Tc就是200/1000=0.2,也就是200ms。
根据令牌桶添加速率和令牌桶容量大小算出的间隔时间Tc,每间隔Tc就向令牌桶中添置一定数量的令牌,假如目前令牌桶已满,则将多余的令牌丢弃。当有大小为n的报文需要通行时,向令牌桶中取出n个令牌,假如令牌数充足则允许报文通行,否则采取相应的限制手段,根据使用需求的不同,可以将不被允许通行的报文放上缓存队列待令牌充足时再允许通行,或者打上颜色标记以表示报文的转发优先级。
1.3 令牌桶分类
根据使用场景的不同,令牌桶设计成三种类别,分别为单速双色的单速单桶令牌桶算法、单速双桶令牌桶算法和双速双桶令牌桶算法。其中,第一种单速单桶比较适合于单纯限速的场景,由于单速双桶令牌桶和双速双桶令牌桶算法较为复杂,下面将只介绍单速单桶令牌桶算法。
1.4 单速单桶令牌桶如何实现
(1)设置好令牌桶的几个关键参数,包括令牌桶的尺寸大小设置为a(以字节byte为单位,一个字节代表一个令牌),向桶中添加令牌的速率r和缓存队列长度L(以字节为单位)。
(2)每隔1/r秒向桶中添加一个令牌,当桶目前的令牌数大于或等于a时,则将令牌丢弃。
(3)当需要使用令牌桶限制速度的流量的报文到达时,假设当前报文的大小为n(单位为字节),而当前桶中剩余令牌数为m,则需要考虑下面情况:
①如果n<=m(令牌数量充足),就从令牌桶中取出n个令牌,数据包允许通行并被发送到网络出口;
②如果n>m(令牌数量不足),那么不会清除令牌,并且认为这个数据包在流量限制之外。
(4)对于在流量限制外的数据包处理方式有三种:一是直接被丢弃;二是排放在缓存队列中等待当令牌桶中累积了足够多的令牌时再传输,但是如果n>L,数据包也将被丢弃;三是它们可以继续发送,但需要做特殊标记,比如设置较低的优先级。
1.5 为什么令牌桶算法对TCP进行流量控制不会使其连接断开
采用令牌桶算法实现流量控制的情况下,是按照1/cir(速率)秒向令牌桶中添加令牌的,当不断到来的TCP报文取空了当前令牌桶而被丢弃的时候,令牌桶很快又会被重新填入新的令牌,下一个TCP报文无须等到下一秒钟而只需要等待令牌桶重新有足够令牌时就能够被发送了,而TCP协议本身就具备拥塞控制算法,在不断地通信过程中,发现某个时刻的报文被丢弃,就会调整连接双方的发送和接收窗口的大小,从而适配实际可以使用的带宽。而一个实际更好的令牌桶实现方案是,令牌桶无须自主按照固定速率向令牌桶中添加令牌,而只需要在报文到来的时刻,计算与上一个报文的时间差,再以此计算需要往令牌桶中添加多少个令牌,这样的实现方式更为简单。
2 为什么在路由基础上实施QoS
云计算节点通常由多个不同的模块组成,例如计算资源模块和网络资源模块,一般情况下的网络通信流程是位于计算资源模块下的虚拟机向外发出报文,再经由网络资源模块比如NAT网关进行地址转换后,再按照路由方式转发至网关。假如目前需要在云计算节点中实现QoS限速功能,一个实现是可以在计算资源模块中进行部署,但是这样无法实现多个虚拟机共用一个公网IP的限速的场景,所以这个限速设备部署位于网络资源模块和公网网关之间比较合适。而限速设备与网络资源模块和公网网关之间的接入方式,也可以选择使用串联方式或者路由方式,而使用路由方式则较为理想,因为串联的方式会造成单点故障,也不灵活,使用基于路由的方式,可以最大限度地符合原先的网络架构和网络标准,也具备良好的扩展性。
3 结语
几十年前设计的TCP/IP通信协议,并没有考虑到发展到目前这么复杂多样的应用场景,而由于组网环境中的各个节点分布极为广阔,各个节点的网络实现又不尽相同,传输的带宽和传输的时延等等都是千差万别的,通过连接所有网络节点的传输设备已经被大量部署,且这些设备通常由不同的厂商生产,快速且大量地更新这些通信设备成本极高,实施难度太大,所以在面对如此复杂的网络环境和设备更新手段的诸多限制时,对实现面向服务质量的网络提出了极大的挑战。
[1]李建宝,桑海.令牌桶算法在IP QoS中的应用[J].华南金融电脑,2006,14(04):98-99.
[2]常恒,陈丹,王利存.网络QoS技术研究[J].信息技术,2005(08):11-15.
[3]马素刚.QoS技术的研究与实现[J].电子设计工程,2015,23(22):14-17.
[4]费嘉.浅析QoS中的令牌桶算法[J].邮电设计技术,2014(06):54-57.