System Design 过程中的软硬件限制
· 3 min read
在系统设计中,了解硬件资源限制、数据库性能指标和常见数据规模是至关重要的。以下是整理的关键参数和参考范围,涵盖数据规模、硬件配置、数据库性能等方面:
一、数据规模参考
-
文件/数据大小
- 单条用户数据(如 JSON 记录):1 KB - 10 KB
- 高清图片:1 MB - 5 MB
- 短视频(1 分钟):10 MB - 100 MB
- 长视频(1080p,1 小时):1 GB - 3 GB
- 数据库单表容量限制:
- MySQL/PostgreSQL:单表建议 ≤ 500GB(性能下降临界点)
- 分布式数据库(如 Cassandra):单表可支持 PB 级
- 用户规模与数据总量
- 100 万用户(中等规模):
- 用户数据总量:1 TB - 10 TB(假设每人 10 MB 数据)
- 10 亿用户(大型系统):
- 用户数据总量:10 PB - 100 PB
- 100 万用户(中等规模):
二、硬件配置范围
-
单节点配置
- CPU:
- 轻量级服务(API 网关):2-4 核
- 计算密集型(视频转码):16-32 核
- 云服务器上限(AWS EC2):128 vCPU
- 内存:
- 缓存服务器(Redis):16 GB - 256 GB
- 数据库节点(MySQL):32 GB - 512 GB
- 大数据节点(Spark/Hadoop):64 GB - 1 TB
- 硬盘:
- SSD(生产数据库):1 TB - 10 TB(IOPS: 10K - 100K)
- HDD(冷存储):10 TB - 100 TB(吞吐量:100-200 MB/s)
- 云存储(如 S3):理论上无限扩展
- CPU:
-
网络带宽
- 单机:1 Gbps(125 MB/s) → 10 Gbps(1.25 GB/s)
- 跨数据中心:100 Mbps - 10 Gbps(受延迟影响)
三、数据库性能指标
数据库类型 | 读 QPS | 写 QPS | 适用场景 | 内存需求(生产) |
---|---|---|---|---|
MySQL | 1K - 10K | 500 - 5K | 关系型事务(OLTP) | 16GB - 128GB |
PostgreSQL | 5K - 50K | 1K - 10K | 复杂查询、GIS | 32GB - 256GB |
MongoDB | 10K - 100K | 5K - 50K | JSON 文档、高吞吐 | 32GB - 512GB |
Cassandra | 50K - 500K | 10K - 100K | 分布式写入、高可用 | 32GB - 1TB |
Redis | 100K - 1M | 100K - 1M | 缓存、实时计数 | 8GB - 256GB |
Elasticsearch | 10K - 50K | 5K - 20K | 全文搜索、日志分析 | 32GB - 512GB |
注:QPS 受索引设计、硬件配置和查询复杂度影响极大。
四、系统设计中的关键限制
-
单机瓶颈
- CPU:单线程性能瓶颈(如 Python/Node.js 的 Event Loop)。
- 内存:Java 堆内存限制(-Xmx 参数通常 ≤ 32GB,避免 GC 停顿)。
- 硬盘:SSD 寿命(DWPD 指标,如 1 DWPD = 每天全盘写入 1 次)。
-
分布式系统扩展
- 分片(Sharding):单分片建议 ≤ 1TB(如 MongoDB)。
- 副本(Replication):通常 3-5 副本(CAP 定理权衡)。
-
云服务限制
- AWS RDS MySQL:最大 16 TB 存储、40K IOPS。
- DynamoDB:单表无上限,但分区键热区可能限制吞吐。
五、场景示例
- 社交网络(读多写少):
- 缓存层(Redis):100K QPS,数据热区占 20%。
- 数据库(MySQL):主从分离,读 QPS 10K,写 QPS 2K。
- 物联网(写多读少):
- 时序数据库(InfluxDB):写 QPS 50K,按时间分片存储。
六、设计原则
- 横向扩展优先:无状态服务易扩展,数据库分片需谨慎。
- 预估峰值:按 3 倍日常流量设计容量。
- 监控与调优:实际 QPS 可能因慢查询下降 90%。
这些数字是通用参考,实际需通过压测验证(如 JMeter)。