1. qdisc(排队规则)、class(类别)和filter(过滤器)

Linux操作系统中的流量控制器TC(TrafficControl)用于Linux内核的流量控制,它利用队列规定建立处理数据包的队列,并定义队列中的数据包被发送的方式,从而实现对流量的控制。

  • qdisc通过队列将数据包缓存起来,用来控制网络收发的速度
  • class用来表示分类策略
  • filter用来将数据包划分到具体的分类中

1.1 队列

TC模块实现流量控制功能使用的队列规定分为两类:

  • 一类是无类队列规定
    无类队列对进入网络设备(网卡)的数据流不加区分统一对待的队列
    这类队列规定形成的队列可以对整个网络设备(网卡)的流量进行整形,但不能细分各种情况。
    这类队列规定使用的流量整形手段主要是排序、限速和丢包。
    常用的无类队列规定主要有pfifo_fast(先进现出)、TBF(令牌桶过滤器)、SFQ(随机公平队列)、ID(前向随机丢包)等等。

  • 另一类是分类队列规定
    分类队列对进入网络设备的数据包根据不同的需求以分类的方式区分对待的队列规定。
    数据包进入一个分类的队列后,它就需要被送到某一个类中,也就是说需要对数据包做分类处理。
    对数据包进行分类的工具是过滤器,过滤器会返回一个决定,队列规定就根据这个决定把数据包送入相应的类进行排队。每个子类都可以再次使用它们的过滤器进行进一步的分类。直到不需要进一步分类时,数据包才进入该类包含的队列排队。
    除了能够包含其它队列规定之外,绝大多数分类的队列规定还能够对流量进行整形。这对于需要同时进行调度(如使用SFQ)和流量控制的场合非常有用。

1.2 控制策略

流量控制包括以下4种方式

  1. SHAPING(限制)
    当流量被限制,它的传输速率就被控制在某个值以下。限制值可以大大小于有效带宽,这样可以平滑突发数据流量,使网络更为稳定。shaping(限制)只适用于向外的流量。
  2. SCHEDULING(调度)
    通过调度数据包的传输,可以在带宽范围内,按照优先级分配带宽。SCHEDULING(调度)也只适于向外的流量。
  3. POLICING(策略)
    SHAPING用于处理向外的流量,而POLICIING(策略)用于处理接收到的数据。
  4. DROPPING(丢弃)
    如果流量超过某个设定的带宽,就丢弃数据包,不管是向内还是向外。

2. TC命令操作

2.1 tc命令

tc可以使用以下命令对QDisc、类和过滤器进行操作:

tc qdisc [ add | change | replace | link ] dev DEV [ parent qdisc-id | root ] [ handle qdisc-id ] qdisc [ qdisc specific parameters ]
tc class [ add | change | replace ] dev DEV parent qdisc-id [ classid class-id ] qdisc [ qdisc specific parameters ]
tc filter [ add | change | replace ] dev DEV [ parent qdisc-id | root ] protocol protocol prio priority filtertype [ filtertype specific parameters ] flowid flow-id
tc [-s | -d ] qdisc show [ dev DEV ]
tc [-s | -d ] class show dev DEV tc filter show dev DEV

2.2 基本步骤

  1. 针对网络物理设备(如以太网卡eth0)绑定一个队列QDisc;
  2. 在该队列上建立分类class;
  3. 为每一分类建立一个基于路由的过滤器filter;
  4. 最后与过滤器相配合,建立特定的路由表。

3. 流控算法

3.1 漏桶(Leaky Bucket)算法

水(请求)先进入到漏桶里,漏桶以一定的速度出水(接口有响应速率),
当水流入速度过大会直接溢出(访问频率超过接口响应速率), 然后就拒绝请求,

漏桶算法有两个变量:
一个是桶的大小,支持流量突发增多时可以存多少的水(burst),
另一个是水桶漏洞的大小(rate)。

3.2 令牌桶算法(Token Bucket)

随着时间流逝,系统会按恒定1/QPS时间间隔(如果QPS=100,则间隔是10ms)
往桶里加入Token(想象和漏洞漏水相反,有个水龙头在不断的加水)
如果桶已经满了就不再加了. 新请求来临时
会各自拿走一个Token,如果没有Token可拿了就阻塞或者拒绝服务.

3.3 漏桶算法与令牌桶算法的区别

  • 漏桶算法能够强行限制数据的传输速率
  • 令牌桶算法能够在限制数据的平均传输速率的同时还允许某种程度的突发传输

4. 云环境下的动态流控

传统的流控采用的是静态预分配。
而在云计算环境下,服务节点也会由于服务的动态上下线而处于频繁变化的状态,这种场景下静态分配显然没办法满足需求。
云服务的资源也是动态分配的,静态分配阈值的方法没办法迁移到云上

4.1 方案一:动态流控

以服务注册中心以流控周期T为单位,动态推送每个节点分配的流控阈值QPS,当服务节点发生变更时,会触发服务注册中心重新计算每个节点的配额,然后进行推送,这样无论是新增还是减少服务节点,都可以在下一个流控周期内被识别和处理,实现动态变更

4.2 方案二:配额动态申请和返还

每个节点根据自己分配到的值和自身处理速率做出预测,若指标有剩余就返还给注册中心,若不够,就主动像注册中心申请,申请不到配额时就做出节流限制

参考

流量控制工具TC详细说明
统一流控服务开源-1:场景&业界做法&算法篇
分布式框架中的流量控制

linux中的TC(TrafficControl)详细说明相关推荐

  1. linux中各目录及详细介绍

    linux中各目录及详细介绍 一.Linux文件系统的层次结构 在Linux或UNIX操作系统中,所有的文件和目录都被组织成一个以根节点开始的倒置的树状结构,如图: 二.目录 1.目录的定义 目录相当 ...

  2. linux中的chmod命令详细介绍、使用及实例

    linux中的chmod命令详细介绍.使用及实例 chmod命令 chmod用于改变 linux 系统文件或目录的访问权限,可以用它控制文件或目录的访问权限.该命令有两种用法:一种是包含字母的文字设定 ...

  3. Linux中虚拟机的安装详细教程

    Linux中虚拟机的安装详细教程 1 linux中虚拟机的安装 1.1 kvm安装条件 1.2 KVM虚拟化安装 1.3 KVM虚拟化相关信息 1.4 手动安装虚拟机步骤 1.5 脚本安装虚拟机 2 ...

  4. Linux中常用命令(更详细)

    一 .学习Linux终端命令的原因 Linux 刚面世时并没有图形界面,所有的操作全靠命令完成,如磁盘操作.文件存取.目录操作.进程管理.文件权限 设定等 在职场中,大量的 服务器维护工作 都是在 远 ...

  5. linux 脚本 ll命令,linux中ll命令的详细解释

    linxu下的ll命令其实是ls-l的一个别名.下面由学习啦小编为大家整理了linux的ll命令的详细解释的相关知识,希望对大家有帮助! 一.linux中的ll命令的详细解释 ll并不是linux下一 ...

  6. head在linux命令中什么意思,linux中head命令的详细解释

    linxu下的head命令是经常使用到的显示文件内容的命令.下面由学习啦小编为大家整理了linux的head命令的详细解释的相关知识,希望对大家有帮助! 一.linux中的head命令的详细解释 he ...

  7. linux中的压缩命令详细解析(一)

    我们在Linux中最常用到的有关压缩的命令,我们知道下面介绍的5种就完全足够了. 它们的格式分别是:*.zip  *.gz  *.bz2  *.tar.gz  *.tar.bz2 OK,言归正传,我们 ...

  8. 在Linux中安装JKD(详细教学)

    一,首先在官网下载Linux版JKD 官网:Oracle | Cloud Applications and Cloud Platform 二,通过xftp上传工具将jdk上传到linux中 三,将JK ...

  9. linux who命令测试,Linux中的who命令详细示例

    who是一个命令行实用程序,可打印当前登录用户的列表.它还可以显示当前的运行级别,上次系统引导的时间等.在本文中,我们解释展示了GNU coreutils软件包中捆绑的who命令用法示例. 如何使用w ...

最新文章

  1. EXCEL实现时间戳格式和日期格互转
  2. ADO.NET中SqlCommand对数据库操作
  3. wordpress插件-really-simple-ssl插件解决网站开启ssl证书后,图片不能正常显示
  4. Java案例:利用JDBC访问SQL Server数据库
  5. 遍历数据元素作为参数发送ajax jsonp请求
  6. SQL Server 2005 性能优化实战系列(文章索引)
  7. Django admin组件源码流程
  8. TCP/IP基础介绍
  9. crackme 004
  10. 计算机英语辅助翻译软件,计算机辅助翻译(CAT)软件 计算机辅助翻译(CAT)软件 v6.3.0.616...
  11. 汇编:Debug的常用命令
  12. Linux-用户操作
  13. 有趣的算法:捞鱼问题
  14. ipa 安装包不用市场如果扫码下载安装 免费IOS安装API
  15. 欧盟要求谷歌美国站点也要执行“被遗忘权”
  16. vue插件瀑布流vue-masonry(带源码)
  17. 微波炉的维修(2)(转自谢工摆渡的博客)
  18. 重磅 | 西安思考:“2018国际人工智能院长论坛”专家思想分享
  19. 三年黑盒测试工程师对嵌入式软件测试的理解
  20. MicroLib微库和ARM标准C库有什么区别?

热门文章

  1. 统计学习导论_统计学习导论 | 读书笔记11 | 多项式回归和阶梯函数
  2. php能干哪些副业,做副业,在能干的基础上踏实肯干
  3. 一篇文章搞定java序列化机制
  4. [k8s]kubelet重启后无法启动
  5. java图形界面关键字_怎样用Java编写一个图形界面,要求可以利用关键词查询txt中的内容...
  6. python教学视频q_#python如何用pyqt5打开视频(还有PPT)并输出到QLabel上?#python怎么运行视屏教程...
  7. java null equals_Java null检查为什么使用==代替.equals()
  8. php购物网站类的继承和多态,类的继承与多态
  9. git配置中文乱码_解决git中文乱码问题
  10. 相机下载_佳能相机如何连接手机传输相片,视频?