1. 延迟基础概念
1.1 什么是 API 延迟
API 延迟(Latency)是指从客户端发起请求到收到完整响应所经历的总时间。在分布式系统中,延迟是衡量 API 服务质量最直接的指标之一,直接影响用户体验和系统可用性。
核心定义:API 延迟 = 请求发出时刻 − 响应接收时刻。单位通常为毫秒(ms)或微秒(µs)。
延迟由多个环节累积而成,典型的 API 请求生命周期包括以下阶段:
- 网络传输延迟:数据包在客户端与服务器之间往返的时间(RTT)。
- 排队延迟:请求在负载均衡器、线程池或消息队列中等待处理的时间。
- 处理延迟:服务器端业务逻辑、数据库查询、外部服务调用等实际计算时间。
- 序列化/反序列化延迟:数据格式转换(JSON/Protobuf)消耗的 CPU 时间。
1.2 延迟与吞吐量的关系
延迟(Latency)和吞吐量(Throughput)是衡量系统性能的两个核心指标,二者相互影响、相互制约。理解它们的关系是 API 优化的重要基础。
| 指标 | 定义 | 单位 | 关注点 |
|---|---|---|---|
| 延迟 | 单个请求从发出到完成的总耗时 | 毫秒(ms)、微秒(µs) | 响应速度、用户体验 |
| 吞吐量 | 单位时间内系统处理的请求数量 | QPS(每秒查询数)、TPS(每秒事务数) | 系统容量、并发能力 |
关键认知:低延迟不一定意味着高吞吐量,高吞吐量也不一定意味着低延迟。例如,批量处理可以大幅提升吞吐量,但单个请求的延迟会显著增加。
延迟与吞吐量的典型关系曲线:
- 线性区:系统负载较低时,延迟保持稳定,吞吐量随并发线性增长。
- 拐点区:当系统资源(CPU、内存、连接池)接近饱和时,延迟开始缓慢上升。
- 饱和区:资源耗尽后,延迟急剧飙升,吞吐量反而下降(队列堆积、超时重试)。
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
• 内部服务调用:P99 < 10 ms
• 面向用户的 API:P99 < 200 ms
• 实时交互系统(如游戏、视频会议):P99 < 50 ms