硬件选型:SSD vs HDD在时序场景下的成本与性能权衡
做时序索引存储,第一个要面对的问题就是:数据往哪放?
很多人觉得,现在SSD这么便宜了,无脑上SSD不就完了?嗯,我刚开始也是这么想的。直到我负责的那个物联网时序平台,每天写入量超过5TB,连续跑了三个月后,运维同学拿着账单来找我——光存储成本就占了整个集群预算的60%。
说白了,时序数据的特点是:写入量大、查询范围广、冷热分层明显。选错存储介质,要么性能崩,要么成本崩。今天我就把我在这个坑里爬出来的经验,一条条说清楚。
一、时序场景下,SSD和HDD的本质差异
先看一张对比表,把核心差异列清楚:
| 维度 | SSD (NVMe/SATA) | HDD (SATA/SAS) |
|---|---|---|
| 随机读延迟 | 0.1-0.3ms | 5-15ms |
| 顺序写吞吐 | 500-3500 MB/s | 150-250 MB/s |
| 随机写IOPS | 50k-1M | 100-200 |
| 每TB成本 | ¥800-2000 | ¥150-300 |
| 功耗/盘 | 3-8W | 6-12W |
| 寿命(写入量) | 有限(按DWPD计算) | 几乎无限(机械磨损) |
注意看随机写IOPS那一行。时序索引的写入模式,恰恰是典型的小批量随机写——每个时间点的数据要更新到对应的索引块里。HDD在这种场景下,IOPS直接被打到两位数,而SSD可以轻松扛住几十万。
核心结论:时序索引的写入路径,必须跑在SSD上。否则索引构建速度会成为整个系统的瓶颈。
二、我踩过的第一个坑:全盘SSD方案
2019年,我负责一个金融时序项目。当时拍脑袋决定:全部用NVMe SSD,省心。结果呢?
- 成本失控:单节点12块3.84TB NVMe,光硬盘成本就超过15万。集群30个节点,光存储硬件花了450万。
- 容量浪费:90%的数据是超过30天的冷数据,查询频率每周不到一次。这些数据躺在昂贵的NVMe上,纯属浪费。
- 寿命焦虑:时序写入量巨大,NVMe的DWPD(每天全盘写入次数)只有1-3。我们算了一下,3年后就得换盘。
后来我学乖了。时序存储,一定要做冷热分层。
三、正确的分层策略:热SSD + 冷HDD
这是我目前在多个生产环境中验证过的方案:
- 热数据层(0-7天):NVMe SSD,承载写入和近期查询。容量占比10-15%。
- 温数据层(7-30天):SATA SSD或大容量QLC SSD,承载常规查询。容量占比20-25%。
- 冷数据层(30天以上):HDD(16TB+),只做归档和低频回溯查询。容量占比60-70%。
你想想看,这样一拆分,存储成本直接降了40%以上。而且热数据层的SSD寿命压力也小了很多——因为写入量大部分集中在热层,温冷层基本只读。
我的习惯:热层SSD选TLC颗粒,性价比最高。温层可以上QLC,虽然寿命短一点,但读取多写入少,完全够用。冷层HDD选CMR(传统磁记录),别碰SMR(叠瓦式),否则随机读性能会让你怀疑人生。
四、避坑指南:我曾经踩过的三个具体坑
坑1:HDD做索引写入
有一次,我把时序索引的WAL(预写日志)放在了HDD上。结果写入延迟从2ms飙升到200ms,整个写入管道直接堵死。后来排查才发现,WAL是典型的同步随机写,HDD根本扛不住。
教训:所有写路径(WAL、索引更新、元数据变更)必须用SSD。读路径可以视情况放在HDD上。
坑2:忽略SSD的写放大
时序索引经常做小数据块合并(compaction)。每次合并都会产生大量的写放大。我遇到过一块号称5PBW寿命的SSD,在时序场景下只用了2年就挂了。原因就是写放大系数达到了8-10倍。
教训:选SSD时,不要只看标称寿命,要按实际写放大系数折算。我一般按3倍写放大预留寿命余量。
坑3:HDD做跨盘查询
冷数据层用HDD没问题,但查询时如果跨多个HDD做随机读,性能会急剧下降。有一次用户查一个月的时序数据,结果查询跑了40分钟——因为数据分散在20块HDD上,每块盘都要做随机寻道。
教训:冷数据层要按时间范围做连续存储,尽量让一次查询落在尽量少的HDD上。我通常按天或按周做数据分片,保证单次查询最多跨2-3块盘。
特别注意:不要为了省钱把热数据也放HDD。时序索引的写入性能一旦掉下去,整个系统的数据新鲜度就没了。用户查不到最近几秒的数据,这个系统就废了。
五、成本与性能的量化权衡模型
我习惯用一个简单的公式来做选型决策:
总拥有成本(TCO) = 硬件成本 + 功耗成本 + 运维成本 + 性能损失成本
性能损失成本 = (查询延迟 - 目标延迟) × 查询次数 × 单次损失金额
举个例子:
- 全SSD方案:硬件成本100万,功耗5万/年,运维2万/年,性能损失0。
- 分层方案:硬件成本60万,功耗8万/年(HDD多),运维3万/年,性能损失(冷查询慢)折算5万/年。
算下来,分层方案第一年省32万,之后每年省4万。而且随着数据量增长,分层方案的优势会越来越大。
六、一张图看懂选型逻辑
下面这张流程图,是我做选型时的决策框架:
七、总结一下我的选型原则
- 写入为王:所有写入路径(WAL、索引更新、compaction)必须用SSD,这是底线。
- 冷热分离:按时间窗口做分层,热数据用NVMe,温数据用SATA SSD,冷数据用HDD。
- 寿命预算:SSD按3倍写放大预留寿命,HDD选CMR不选SMR。
- 查询优化:冷数据层按时间连续存储,减少跨盘随机读。
嗯,硬件选型这块,说白了就是把钢用在刀刃上。时序场景下,写入性能是命门,必须用SSD保底。但冷数据没必要浪费钱,HDD完全够用。这个平衡做好了,成本能降一半,性能还不打折。
我记得有一次跟一个同行交流,他说他们全用HDD,结果写入延迟高到离谱,每天都要丢数据。我问他为什么不加SSD,他说怕成本太高。后来我帮他算了一笔账:加两块NVMe做写入缓存,成本只增加5%,但写入性能提升了50倍。他当场就改了方案。
所以,别怕花钱,但要花对地方。