菜单

延迟 vs 吞吐量

相关源文件

本页解释了延迟与吞吐量之间的根本区别——这是系统设计中两个关键的性能指标。理解这些概念对于构建可扩展、高效且能够在高负载下保持响应能力的系统至关重要。

有关一般性能和可伸缩性概念的信息,请参阅性能与可伸缩性

核心概念

延迟是指执行一个动作或产生一个结果所需的时间。它衡量了一个操作从开始到结束所需完成的时间。

吞吐量是指单位时间内可以处理的此类动作或结果的数量。它衡量了系统的处理能力。

来源:README.md426-436

理解延迟

延迟表示发起请求到接收响应之间的时间。它通常以毫秒(ms)或微秒(μs)等时间单位衡量。

延迟可视化

来源:README.md426-429

常见的延迟类型

  1. 网络延迟:数据包从源到目的地所需的时间
  2. 磁盘延迟:读取或写入数据到存储设备所需的时间
  3. 内存延迟:从内存读取或写入内存所需的时间
  4. 进程延迟:计算或处理所需的时间

影响延迟的关键因素

  • 组件之间的物理距离
  • 网络拥塞
  • 服务器负载
  • 资源争用
  • 硬件限制
  • 低效算法
  • I/O 操作
  • 排队时间

来源:README.md426-429 README.md1552-1575

理解吞吐量

吞吐量衡量了系统在给定时间范围内可以执行多少工作。它通常表示为每秒操作数、每秒请求数(RPS)或数据传输速率(例如,MB/s)。

吞吐量可视化

来源:README.md430-432

影响吞吐量的关键因素

  • 可用处理能力(CPU)
  • 内存带宽
  • 网络带宽
  • I/O 容量
  • 并行性和并发性
  • 系统架构
  • 资源分配
  • 负载均衡效率

延迟与吞吐量的关系

延迟和吞吐量是相关但又不同的概念。一个系统可能具有

  • 低延迟但低吞吐量(快速处理请求但无法处理大量请求)
  • 高吞吐量但高延迟(处理大量请求但每个请求耗时较长)
  • 低延迟和高吞吐量(理想情况)
  • 高延迟和低吞吐量(最差情况)

关系可视化

来源:README.md432-436

优化策略

正如系统设计入门中所述:“通常,您应该以最大吞吐量可接受的延迟为目标。”

权衡取舍

  1. 缓存:减少延迟,但可能在缓存未命中时略微影响吞吐量
  2. 负载均衡:通过分配工作提高吞吐量,可能会增加轻微的延迟开销
  3. 异步处理:可以提高吞吐量,但会增加单个操作的延迟
  4. 连接池:减少连接建立延迟,同时提高吞吐量
  5. 批处理:增加吞吐量,但可能会增加批处理中单个项目的延迟

延迟参考值

了解典型的延迟值对于系统设计至关重要。下表列出了每个程序员都应该知道的关键延迟数据

操作延迟相对比较
L1 缓存引用0.5 ns-
分支预测错误5 ns-
L2 缓存引用7 nsL1 缓存的 14 倍
互斥锁/解锁25 ns-
主内存引用100 nsL2 缓存的 20 倍,L1 缓存的 200 倍
使用 Zippy 压缩 1K 字节10,000 ns (10 μs)-
通过 1 Gbps 网络发送 1 KB10,000 ns (10 μs)-
从 SSD 随机读取 4 KB150,000 ns (150 μs)~1GB/秒 SSD
从内存顺序读取 1 MB250,000 ns (250 μs)-
同一数据中心内往返500,000 ns (500 μs)-
从 SSD 顺序读取 1 MB1,000,000 ns (1 ms)~1GB/秒 SSD,内存的 4 倍
磁盘寻道10,000,000 ns (10 ms)数据中心往返的 20 倍
从磁盘顺序读取 1 MB30,000,000 ns (30 ms)内存的 120 倍,SSD 的 30 倍
发送数据包 CA->荷兰->CA150,000,000 ns (150 ms)-

备注

  • 1 ns = 10^-9 秒
  • 1 μs = 10^-6 秒 = 1,000 ns
  • 1 ms = 10^-3 秒 = 1,000 μs = 1,000,000 ns

来源:README.md1552-1575

测量与监控

延迟指标

  • 平均延迟:所有延迟的总和除以操作数量
  • 中位数 (p50):延迟分布中的中间值
  • 百分位数 (p95, p99, p99.9):低于此值的延迟涵盖了特定百分比的请求
  • 最大延迟:观察到的最差情况延迟

吞吐量指标

  • 每秒请求数 (RPS):每秒处理的请求数量
  • 每秒查询数 (QPS):每秒执行的查询数量
  • 每秒事务数 (TPS):每秒完成的事务数量
  • 带宽:每秒传输的数据量(例如,MB/s)

实际应用

Web 服务示例

优化示例

  1. 数据库查询优化:提高查询性能可减少延迟
  2. 连接池:重用数据库连接可提高吞吐量
  3. 缓存:存储常用数据可减少延迟并提高吞吐量
  4. 负载均衡:将负载分配到多台服务器可提高吞吐量
  5. 内容分发网络 (CDNs):将内容放置在离用户更近的位置可减少延迟

最佳实践

  1. 设定明确的 SLA:定义可接受的延迟阈值和吞吐量要求
  2. 测量这两个指标:在生产环境中同时监控延迟和吞吐量
  3. 关注百分位数:关注尾部延迟(p95, p99),而不仅仅是平均值
  4. 进行负载测试:执行负载测试以了解系统在大规模情况下的行为
  5. 考虑成本效益:针对提供最大业务价值的指标进行优化
  6. 理解瓶颈:识别并解决限制性能的组件

结论

延迟和吞吐量是系统设计中影响用户体验和系统容量的基础指标。虽然它们相互关联,但一个指标的改进不一定会导致另一个指标的改进。最佳方法是在特定用例中,以最大吞吐量为目标,同时保持可接受的延迟水平。

理解这些指标及其权衡取舍使工程师能够设计出更高效、更可扩展的系统,从而满足性能和容量要求。

来源:README.md426-436 README.md1552-1575