一、 云中网络流量控制的痛点与解法为什么需要流量控制 (QoS)云计算平台就像一栋大型合租公寓所有虚拟机都在共享物理网卡的带宽资源抢占木桶效应如果某个租户不自觉在虚拟机里疯狂运行下载任务或遭遇了 DDoS 攻击会瞬间把物理网卡的公共带宽占满导致其他正常租户连网页都打不开。保障服务质量云平台作为“房东”必须要有公平的机制确保每个租户都能获得与其购买规格相匹配的网络带宽绝不能“你用我也用谁猛谁好用”。解法QoS服务质量控制在网络中流量控制分为出、入两个方向出方向 (Egress)流量从本机发出我们可以很好地将它们排队把多余的包缓存起来控制成我们想要的速率发出去这叫Shaping流量整形。入方向 (Ingress)别人发给你的包已经到达你的网卡了你没法让它们在别人的机器上排队因此无法整形。只能通过Policy策略将超出额度的包直接丢弃。QoS (Quality of Service)服务质量。在网络中用来解决网络延迟和阻塞等问题的一种机制通常表现为限速、带宽保障和优先级分配。Shaping (流量整形)平滑网络流量通过把多余的包放入队列缓冲并延时发送来实现限速。二、 底层技术原理拆解TC 与排队规则在 Linux 底层控制出方向流量的核心手段是排队Queuing。Linux 提供了 tc 命令来实现主要分为以下两大类1. 无类别排队规则 (Classless Queuing)这是一种相对简单的排队方式不对网络包做极其详细的分类归属pfifo_fast优先先入先出根据网络包内的 TOS (服务类型) 字段将包分入 3 个优先级队列Band 0、1、2。必须等 Band 0 发完才发 Band 1。随机公平队列 (SFQ)为不同的 TCP Session 计算 Hash 值分发到众多小队列中。发包时采用轮询策略从各个小队列依次取包发送。这样哪怕有人疯狂下载也只会占满自己的 Hash 队列保证了整体公平。令牌桶规则 (TBF)网络包 — 进入队列缓冲 — 获取固定速率生成的令牌— 发送出网卡。注意桶是有容量限制的防止网络空闲时积累大量令牌突然来了大流量瞬间把所有令牌拿走冲垮网络。2. 基于类别的队列规则 (Classful Queuing) 与 HTB在复杂的云平台中最常用的高级流控技术是HTB (分层令牌桶规则)。它本质上是一棵树专门用来管理多租户根节点 (Root)规定了整张网卡的总体发送速率比如最高 100kbps。分支节点 (Class)为不同租户或应用划分子队列。每个分支有两个重要参数rate日常保证速率保底。ceil最高极限速率天花板。借用机制HTB 最大的亮点同一个根底下的分支之间可以相互借用闲置流量。如果分支 A 处于闲置分支 B 的流量很大B 可以突破自己的 rate借用 A 的带宽但最高不超过自己的 ceil最大化利用整体物理带宽资源。TC (Traffic Control)Linux 内核提供的流量控制命令行工具用来配置和挂载各种队列规则。HTB (Hierarchical Token Bucket)分层令牌桶云平台中最常用的基于类别的流控规则支持带宽的按比例分配与自动借用。三、 在云网络中如何控制 QoS (结合 OpenvSwitch)在云计算中所有虚拟机的网卡都连在 OpenvSwitch (OVS) 虚拟交换机上。OVS 对上述 QoS 原理有着完美的支持控制入方向 (Ingress)直接在虚拟机的 TAP 网卡端口上设置 ingress_policing_rate 和 burst 参数超出限制的包立刻被 Policy 丢弃。控制出方向 (Egress shaping)OVS 原生支持 linux-htb 类型的 QoS 规则。我们可以在 OVS 内部创建一棵 HTB 树分配出多个不同 min-rate 和 max-rate对应 rate 和 ceil的 Queue队列。结合流表 (Flow Table)利用 OVS 强大的流表匹配能力编写规则例如当包的源 IP 是租户 A 时执行动作 actionsenqueue:端口号:队列号。这样就能精准地将不同虚拟机的发包流量导入到 HTB 树的不同限速队列中。【流量分配推演举例 3个租户配置的保证带宽比例为 3:1:6】满载情况三家同时疯狂发包 — 总带宽严格按照 3:1:6 的比例公平划分。闲置情况如果只有前两家全速发包第三家占6成没发包 — 闲置的 60% 带宽会自动被前两家借用此时前两家按 3:1 瓜分全部带宽。既保证了各自业务底线又不浪费整体资源。四、 小结本节课核心脉络梳理云计算不仅需要网络连通更需要用QoS (服务质量控制)来解决邻居争抢带宽的灾难。流量控制的核心突破口在出方向 (Egress)依赖于排队缓冲机制Shaping。队列分为无类别如 SFQ、TBF和有类别两类。最适合云平台的是HTB 分层令牌桶它支持多租户比例分配带宽且能够智能借用闲置流量。OpenvSwitch结合灵活的流表过滤 (Flow Table)将特定的网络包精准送入特定的 HTB 队列实现了云网络自动化的流控体系。五、 思考题深度解析思考题 1入口流量其实没有办法控制出口流量是可以很好控制的你能想出一个控制云中的虚拟机的入口流量的方式吗【深度解析】入口流量直接通过 Policy 丢弃太粗暴了会导致上层的 TCP 协议不断触发超时重传严重恶化网络体验。既然我们只能对“出方向Egress”做平滑排队Linux 提供了一种巧妙的虚拟网络黑科技IFB (Intermediate Functional Block) 设备。我们可以利用 tc filter 的重定向Redirect功能把原本准备进入真实网卡的入口流量 (Ingress)强制牵引到一块虚拟网卡 IFB上。此时这批流量对于 IFB 网卡来说就变成了发出 (Egress)的流量。这样我们就能在这块 IFB 虚拟网卡上光明正大地挂载 HTB 排队规则从而变相地对“入口流量”也实现了完美的平滑限速和整形。思考题 2安全性和流量控制大概解决了但是不同用户在物理网络的隔离还是没有解决你知道怎么解决吗【深度解析】这是整个专栏云网络篇的“终极悬念”。前面第 24-26 讲提到的 OVS、安全组和本节的 QoS都只是在解决“权限”和“分配”的问题。而在最底层的物理隔离上如果一直使用传统的 VLAN 技术它的 IDTag仅仅只有 12 个比特最多只能划分 4096 个子网。在阿里云、AWS 这种拥有百万级租户的公有云里4096 个 VLAN 根本不够塞牙缝的。解决大规模物理网络隔离的终极武器是走向大二层网络——即隧道技术和叠加网络Overlay Network。这也就是我们下一讲即将掀开的大名鼎鼎的GRE与VXLAN技术。它们能把二层的以太网包封装在 UDP 里突破物理机房的硬件限制支持多达 1600 万个租户的彻底隔离。