分布式系统指标计算
在日常工作中经常需要去做一些系统优化相关的容量评估,核心是用 Little 定律 把吞吐量、响应时间和并发数联系起来:
并发数 = 系统吞吐量 * 任务平均执行时间
系统吞吐量的计算方式为,任务数量除以任务执行时间(单位时间内完成的任务数,即 QPS/TPS):
吞吐量 = 任务数量 / 任务执行时间
常见中间件吞吐参考
以下是单机、典型硬件、简单负载下的经验量级,实际值会因 CPU/内存/磁盘/网络、payload 大小、是否持久化、是否跨机房等差一个数量级,用来估容量和反推并发数够用。
| 中间件 | 典型吞吐 | 说明 |
|---|---|---|
| Redis | 10 万 ~ 20 万+ QPS | 纯内存 GET/SET,本地网卡、小 value;开启 AOF/大 value/复杂命令会明显下降 |
| MySQL | 读 5k ~ 2 万 QPS;写 1k ~ 5k TPS | 主键点查 + 连接池 + SSD;复杂 JOIN/全表扫描可能只有几百 QPS |
| PostgreSQL | 与 MySQL 同量级 | 简单点查几千~上万;复杂分析查询更低 |
| Kafka | 单分区 1 万 ~ 10 万+ msg/s | 小消息(几百字节);更常按 MB/s 看,单 broker 常见几十 ~ 几百 MB/s |
| RabbitMQ | 2 万 ~ 5 万 msg/s | 小消息、内存队列;持久化、镜像队列会降很多 |
| Nginx | 静态 5 万 ~ 10 万+ req/s | 反向代理/带 upstream 常见 2 万 ~ 5 万 req/s |
| Elasticsearch | 写入 5k ~ 5 万 doc/s | bulk 写入较高;聚合/全文检索视复杂度而定 |
| MongoDB | 简单读 1 万 ~ 5 万 QPS | 索引点查;写通常更低 |
| Memcached | 20 万+ QPS | 比 Redis 略高(功能更少) |
| 业务 HTTP 服务 | 单实例 1k ~ 1 万 QPS | 含 DB/缓存/下游 RPC;纯内存计算可更高 |