Hetzner的独立服务器和云主机在国内开发者圈子里口碑不错,性价比是出了名的高。不过在配置存储的时候,很多人会面临一个选择:用服务器自带的本地NVMe硬盘,还是挂载Hetzner Cloud Volume云存储?这两种方案在底层实现、性能表现和使用场景上差别不小,选错了可能导致数据库卡顿,或者数据迁移时陷入被动。这篇文章就从实际使用角度出发,把两者的差异讲清楚。

一、本地NVMe和云存储Volume的本质区别
Hetzner独立服务器(比如AX系列、SX系列)以及部分云主机型号提供的是物理上直接插在机器上的NVMe SSD。这类硬盘通过PCIe通道与CPU直连,数据读写不经过网络,属于典型的本地存储。它的特点是延迟极低、带宽大,但容量受限于机器本身的硬盘位数量。
而Hetzner Cloud Volume是基于网络块设备实现的云存储。Volume创建后会通过网络挂载到云主机上,对操作系统来说呈现为一块普通块设备(通常是/dev/sdb之类的路径),可以随时在线扩容、随时从一台机器卸载再挂载到另一台机器。它的灵活性远超本地盘,但代价是所有IO都要走网络,性能天花板受网络和后端存储集群的限制。
简单概括:本地NVMe追求的是极致速度,云存储Volume追求的是弹性与可管理性。两者的设计目标不同,所以不能简单地说谁更好,要看你的业务更看重哪一边。
二、性能对比:延迟、IOPS和吞吐量
从实测数据看,两者的差距相当明显。本地NVMe盘在4K随机读写测试中,IOPS通常能达到几十万级别,顺序读写带宽可以跑到2GB/s以上,延迟在几十微秒这个量级。而Cloud Volume在同样的4K随机测试下,IOPS一般在几千到几万的范围,延迟普遍在毫秒级,比本地NVMe慢了一到两个数量级。
可以用下面的方式自己在服务器上跑一个简单的对比测试:
# 安装fio测试工具
apt-get install -y fio
# 测试4K随机写,本地NVMe
fio --name=randwrite --filename=/dev/nvme0n1 --rw=randwrite \
--bs=4k --size=2G --numjobs=4 --iodepth=32 --direct=1 \
--group_reporting
# 测试4K随机写,挂载的Cloud Volume
fio --name=randwrite --filename=/dev/sdb --rw=randwrite \
--bs=4k --size=2G --numjobs=4 --iodepth=32 --direct=1 \
--group_reporting需要注意的是,测试时务必加上--direct=1参数绕过系统缓存,否则测出来的数字会好看得离谱,但没有参考价值。另外不建议直接对正在承载数据的设备做写测试,用测试文件代替裸设备更安全。
对顺序读写敏感的业务,比如大文件传输、视频转码的临时目录,两者的差距相对小一些;但对随机IO敏感的业务,比如MySQL、PostgreSQL这类数据库,本地NVMe的优势是压倒性的。一台跑在NVMe上的数据库,查询响应时间往往只有跑在网络存储上的几分之一。
三、可靠性与数据安全
本地NVMe最大的隐患在于:硬盘坏了,数据就没了。Hetzner独立服务器的硬盘如果出现物理故障,官方会更换硬件,但不会帮你恢复数据。如果你的业务只有单机单盘,没有做任何冗余或备份,一次硬盘故障就可能造成灾难性后果。多盘服务器可以用软RAID或者ZFS做镜像来缓解这个问题,但会牺牲一半容量。
Cloud Volume在这方面的表现要好得多。Volume背后是Hetzner的分布式存储集群,数据默认有冗余机制,单块物理硬盘损坏不会影响Volume的可用性。此外Volume还支持手动快照,在升级系统、执行危险操作之前先打个快照,出问题可以快速回滚。
不过要提醒一点:无论用哪种存储,重要数据都必须要有异地备份。云存储的冗余保护的是硬件故障,防不了误删除rm -rf这种人为事故,也防不了账号层面的意外。定期用restic、borgbackup或者rclone把数据同步到对象存储或其他机器,才是稳妥的做法。
四、价格与扩容能力
价格方面两者各有优势。Hetzter Cloud Volume按容量计费,每100GB每月大约0.5欧元出头,价格不算贵,而且可以随时扩容,从10GB一路扩到10TB都不需要停机。本地NVMe则是打包在服务器价格里的,SX系列这类多盘位机型折算下来单位容量成本其实很低,但扩容只能通过换更大容量的硬盘或者换机器来实现,灵活性差很多。
举个例子:如果你的数据量从500GB涨到了3TB,用Volume的话在线点几下就完成了扩容;用本地盘的话,你需要买新盘、停机、迁移数据、重新配置,整个过程可能要耗费数小时甚至更久,还伴随操作风险。
五、怎么选:按场景对号入座
数据库、高并发Web应用、Elasticsearch集群这类对IO延迟敏感的场景,毫无疑问优先选择本地NVMe。毫秒级的存储延迟叠加数据库的随机IO模式,会让Cloud Volume成为明显的性能瓶颈。
而文件服务器、网站静态资源、备份存储、开发测试环境这类以顺序读写为主、对延迟不敏感的场景,Cloud Volume更合适。它带来的扩容便利和挂载灵活性,价值远超那点性能损失。尤其是备份场景,把备份放在与计算节点分离的Volume上,本身就是一个合理的安全设计。
还有一种常见组合方案:数据库放本地NVMe保证性能,同时用Volume或者对象存储做备份与归档。这样既拿到了速度,又保住了数据安全,是多数生产环境比较推荐的架构。
六、总结
本地NVMe和Cloud Volume不是竞争关系,而是互补关系。前者解决快的问题,后者解决弹性和可靠的问题。如果预算只允许选一个,就看你跑的是什么:数据库选NVMe,存储型业务选Volume;如果预算充足,两者搭配使用是最稳妥的方案。另外无论选哪种,都别忽略异地备份这一层最后的安全网,硬件和云平台能保障的永远有限,数据的最终责任还是在你自己手里。