1. 延迟基础概念

1.1 什么是 API 延迟

API 延迟(Latency)是指从客户端发起请求到收到完整响应所经历的总时间。在分布式系统中,延迟是衡量 API 服务质量最直接的指标之一,直接影响用户体验和系统可用性。

核心定义:API 延迟 = 请求发出时刻 − 响应接收时刻。单位通常为毫秒(ms)或微秒(µs)。

延迟由多个环节累积而成,典型的 API 请求生命周期包括以下阶段:

  • 网络传输延迟:数据包在客户端与服务器之间往返的时间(RTT)。
  • 排队延迟:请求在负载均衡器、线程池或消息队列中等待处理的时间。
  • 处理延迟:服务器端业务逻辑、数据库查询、外部服务调用等实际计算时间。
  • 序列化/反序列化延迟:数据格式转换(JSON/Protobuf)消耗的 CPU 时间。
API 请求延迟分解 客户端 网络传输 排队 处理 序列化 延迟累积公式: 总延迟 = 网络传输延迟 + 排队延迟 + 处理延迟 + 序列化延迟 • 网络传输延迟:受物理距离、带宽、丢包率影响 • 处理延迟:包含数据库查询、外部服务调用、业务计算 • 序列化延迟:JSON/XML/Protobuf 编解码耗时

1.2 延迟与吞吐量的关系

延迟(Latency)和吞吐量(Throughput)是衡量系统性能的两个核心指标,二者相互影响、相互制约。理解它们的关系是 API 优化的重要基础。

指标 定义 单位 关注点
延迟 单个请求从发出到完成的总耗时 毫秒(ms)、微秒(µs) 响应速度、用户体验
吞吐量 单位时间内系统处理的请求数量 QPS(每秒查询数)、TPS(每秒事务数) 系统容量、并发能力
关键认知:低延迟不一定意味着高吞吐量,高吞吐量也不一定意味着低延迟。例如,批量处理可以大幅提升吞吐量,但单个请求的延迟会显著增加。

延迟与吞吐量的典型关系曲线:

  • 线性区:系统负载较低时,延迟保持稳定,吞吐量随并发线性增长。
  • 拐点区:当系统资源(CPU、内存、连接池)接近饱和时,延迟开始缓慢上升。
  • 饱和区:资源耗尽后,延迟急剧飙升,吞吐量反而下降(队列堆积、超时重试)。
延迟与吞吐量关系曲线 吞吐量(QPS) 延迟(ms) 线性区 拐点区 饱和区 拐点 • 线性区:延迟稳定,吞吐量增长 • 拐点区:延迟开始上升 • 饱和区:延迟急剧飙升

1.3 延迟的度量单位

API 延迟的度量单位根据系统规模和场景不同而有所差异。选择合适的度量单位有助于精确描述和诊断问题。

单位 符号 换算关系 典型场景
秒 s 1 s = 1,000 ms 慢查询、超时配置、批处理任务
毫秒 ms 1 ms = 1,000 µs API 响应时间、数据库查询、缓存访问
微秒 µs 1 µs = 1,000 ns 内存访问、CPU 指令、本地函数调用
纳秒 ns 1 ns = 0.001 µs CPU 缓存命中、硬件级操作
常见误区:许多开发者在优化 API 时只关注毫秒级延迟,却忽略了微秒级的累积效应。例如,一次数据库查询 5 ms 看似正常,但若在循环中执行 1000 次,总延迟将高达 5 秒。微秒级优化在高频调用场景下至关重要。

实际生产环境中,延迟度量通常采用以下统计方式:

  • 平均延迟(Avg):所有请求延迟的算术平均值,容易受极端值影响。
  • 百分位延迟(P50/P95/P99):P50 表示 50% 的请求延迟低于该值,P99 表示 99% 的请求延迟低于该值。P99 是衡量尾部延迟的关键指标。
  • 最大延迟(Max):最慢请求的延迟,通常用于发现异常尖刺。
行业参考标准:
• 内部服务调用:P99 < 10 ms
• 面向用户的 API:P99 < 200 ms
• 实时交互系统(如游戏、视频会议):P99 < 50 ms