1、性能基础:读写延迟与吞吐量的核心概念,如何量化评判系统I/O性能
做性能优化这么多年,我越来越觉得——所有问题到最后都归结为两个数字:延迟和吞吐量。不管你调数据库、优化存储还是搞分布式系统,最终都要跟这两个指标打交道。今天咱们先把这两个概念彻底讲透。
1.1 延迟:系统要你等多久?
延迟是什么?说白了,就是你发一个读写请求,系统要多久才能给你回应。单位通常是微秒(μs)或毫秒(ms)。我个人习惯把延迟看作是系统的"反应速度",它直接决定了每次操作要等多久。
为什么会慢?从流程上看,延迟 = 排队延迟 + 服务延迟。请求到了系统,先排队等资源,然后才被处理。你想想看,高峰期去银行办业务,排队半小时,办业务5分钟——那半小时就是排队延迟。存储系统也是这个道理。
不同存储介质的延迟差别巨大,我列个表格给你看:
| 存储介质 | 随机读延迟 (4K) | 顺序读带宽 | 典型IOPS (4K随机) |
|---|---|---|---|
| 机械硬盘 | 10–20 ms | ~200 MB/s | 100–200 |
| SATA SSD | 0.1–0.2 ms | ~500 MB/s | 10K–50K |
| NVMe SSD | 0.02–0.1 ms | 3–7 GB/s | 100K–1M+ |
| 内存 | ~0.1 μs | 10–50 GB/s | 极高 |
我在项目中遇到过磁盘延迟从2 ms飙升到200 ms的情况。现象很简单——接口响应变慢,数据库连接池被打满。查了一圈才发现是磁盘队列堆积,大量请求在排队,服务延迟被拉高。那次之后我养成一个习惯:延迟不仅要看平均值,更要看分位值。
核心要点:延迟由排队延迟和服务延迟构成。不同介质延迟跨度从微秒到毫秒,选型时要心中有数。
1.2 吞吐量:系统能搬多少?
吞吐量衡量的是系统在单位时间内能处理多少I/O请求。两个常见的度量方式:IOPS 和 带宽。
IOPS 关注的是"次数"——每秒能执行多少次I/O操作。适合小数据块、高并发的场景,比如数据库OLTP。带宽关注的是"数据量"——每秒能传输多少字节。适合大数据块、流式传输的场景,比如视频转码、日志采集。
我记得有一次帮客户做数据库迁移,他们只盯着IOPS看。换了高性能SSD后,IOPS确实上去了,但带宽成了瓶颈,大查询依然慢。后来一测,顺序读带宽只有标称值的60%。你看,单一指标容易骗人。
小提示:IOPS和带宽是吞吐量的两个侧面。小数据块看IOPS,大数据块看带宽,混合场景两者都要看。
1.3 延迟与吞吐量的关系
这两个指标不是独立的。系统负载低时,延迟很稳定;随着负载增加,吞吐量上升,延迟也开始上升。到了某个点,吞吐量不再增加,延迟却急剧飙升。这个点就是性能拐点。
为什么会这样?因为系统资源是有限的。当并发请求超过系统的处理能力,请求就开始排队,排队时间越长,延迟越高。你想想看,高速公路上车少的时候跑得又快又顺畅,车一多就开始堵,速度直线下降。
下面这张图展示了读写性能的核心概念体系,帮你理清延迟、吞吐量以及它们之间的关系: