知识卡片

网络延迟的可变性本质是排队而延迟保证是资源利用率换来的成本

结构图卡

内容

网络延迟的波动几乎全部来自各个层面的排队:多台机器同时往同一目标发数据包时,交换机 要把它们排队逐个送入目标链路,队满了就丢包重发;数据包到机器后,如果CPU核心都在忙, 操作系统会把请求排队等应用处理;虚拟化环境里,另一个虚拟机占用CPU时本机会被暂停 几十毫秒,这段时间传入数据被虚拟机监视器缓冲;TCP自己也做流量控制,节点会限制发送 速率避免压垮链路或接收方,这意味着数据进入网络之前发送端就要先排队;TCP若超时未 收到确认还会自动重传,应用层虽感知不到丢包重传本身,却能感知到由此产生的额外延迟。 一个自然的问题是:为什么不能在硬件层面直接把网络做得像传统电话网那样可靠、有固定 延迟上限?答案在于两种网络在设计目标上根本不同。电话网络是电路交换:通话建立时就 为这次通话预留了固定带宽,全程独占、不排队,因此延迟有硬性上限(有限延迟);但这种 “预留”意味着即使你此刻是唯一在打电话的人、其余9999条线路空闲,你的电路依然只能用 预分配的那份带宽——本质是拿资源利用率换延迟确定性。互联网和数据中心网络是分组 交换:为了应对没有固定带宽需求的突发流量(网页请求、邮件、文件传输”越快越好”而非 “恒定速率”),数据包机会性地争抢任何可用带宽,网络交换机动态决定每一刻转发哪个包 ——这带来排队的代价,但换来了资源被更充分利用(一条线路能服务更多用户、单位成本 更低)。因此,网络里的可变延迟不是什么自然规律或工程失误,而是一个”更贵更确定”和 “更便宜更不确定”之间的成本/收益权衡的直接结果,这个权衡在CPU多线程调度、虚拟机 资源共享等场景里也同样成立。

结构图

flowchart LR
    A[电路交换: 电话网] --> A1[通话建立即预留固定带宽]
    A1 --> A2[全程独占, 不排队, 延迟有硬上限]
    A2 -.代价: 空闲时段带宽仍被独占, 利用率低.-> A2
    B[分组交换: 互联网/数据中心网络] --> B1[数据包机会性争抢可用带宽]
    B1 --> B2[多层排队: 交换机/操作系统/虚拟化/TCP流控]
    B2 -.代价: 延迟不可预测, 收益: 资源利用率更高更便宜.-> B2

参考来源

- 位置:《数据密集型应用系统设计》第八章《分布式系统的麻烦》"网络拥塞和排队""同步 网络与异步网络""延迟和资源利用"(源文件:_epub-src/ch8_split_001.html, ch8_split_002.html) - 结论依据:原文详述交换机排队、操作系统排队、虚拟化暂停、TCP流量控制与重传导致 网络延迟可变,对比电路交换(固定带宽预留、有限延迟但利用率低)与分组交换(机会性 争抢带宽、延迟不可预测但利用率高),并总结延迟可变性是成本/收益权衡的结果,直接 支撑本卡片的结构梳理。 - 原始内容:计算机网络上数据包延迟的可变性通常是由于排队……这种网络是同步的:即使 数据经过多个路由器,也不会受到排队的影响……我们称之为有限延迟……相比之下,互联网 动态分享网络带宽……网络中的可变延迟不是一种自然规律,而只是成本/收益权衡的结果。