扒皮云对象存储:从降本到杀猪

微信公众号原文 | Vonng博客

对象存储是云计算的定义性服务,曾被视为云上降本的典范。不幸的是随着硬件的发展,资源云(Cloudflare R2)与开源平替(MinIO)的出现,曾经“物美价廉”的对象存储服务失去了性价比,和EBS一样成为了杀猪盘。我们在《云计算泥石流》系列中已经深入剖析过云上 EC2 算力,EBS 磁盘,RDS 数据库的成本构成,今天我们就来审视一下云服务之锚 —— 对象存储。

从降本到杀猪

对像存储,又称简单存储服务(Simple Storage Service,缩写为 S3,以下用S3代指), 曾经是云上“物美价廉”的拳头产品。

在十几年前,硬件的价格高昂;能够用一堆几百GB的机械硬盘,三副本搭建可靠的存储服务,并设计实现一套优雅的 HTTP API,还是一件颇有门槛的事情;因此相对于那些“企业级IT”存储方案,物美价廉的 S3 显得很有吸引力。

但是计算机硬件这个领域非常特殊 —— 有着一个价格每两年减半的摩尔定律。在 AWS S3 的历史上的确有过几次降价,下面的表格里整理了几次主要降价后的 S3 标准档存储单价,也整理了对应年份企业级 HDD/SSD 的参考单位价格。

Date $/GB·月 ¥/TB·5年 HDD ¥/TB SSD ¥/TB
2006.03 0.150 63000 2800
2010.11 0.140 58800 1680
2012.12 0.095 39900 420 15400
2014.04 0.030 12600 371 9051
2016.12 0.023 9660 245 3766
2023.12 0.023 9660 105 280
其他参考价 高性能存储 顶配底折价 与采购NVMe SSD 价格参考
S3 Express 0.160 67200 DHH 12T 1400
EBS io2 0.125 + IOPS 114000 Shannon 3.2T 900

不难看出,S3 标准档的单价从 2006 年的 0.15 $/GB·月 到 2023 年的 0.023 $/GB·月 ,降到原来的 15%,便宜了 6 倍,听上去不错;然而当你考虑到 S3 底层 HDD 的价格从降到原来的 3.7% ,便宜了整整 26 倍时,就能发现这里面的猫腻了。

S3 的资源溢价倍数从 2006 年的 7 倍增长到了当下的 30 倍!

在2023年当下,当我们重新进行成本核算时,不难看出 S3 / EBS 这类存储服务的性价比早已今非昔比 —— 云上的算力 EC2 相比自建服务器有着 5 ~ 10 倍的溢价,而云上的块存储 EBS 相对本地SSD有着几十倍到一两百倍的溢价。云上的 S3 相对普通HDD也有着三十倍左右的资源溢价。而作为云服务之锚的 S3 / EBS / EC2 价格,又会传导到几乎所有的云服务上去 —— 这让云服务的性价比彻底丧失吸引力。

这里的核心问题是:硬件资源的价格随着摩尔定律以指数规律下降,但节省的成本并没有穿透云厂商这个中间层,传导到终端用户的服务价格上逆水行舟,不进则退,降价速度跟不上摩尔定律就是其实就是变相涨价。以S3为例,在过去十几年里,云厂商S3虽然名义上降价6倍,但硬件资源却便宜了 26 倍,所以这个价格又该怎么说呢?

成本、性能、吞吐

尽管云服务有着高昂的溢价,但如果它是不可替代的最优选,那么即使溢价高性价比低,也不影响价格钝感的高价值头部客户使用。然而不仅仅是成本,存储硬件的性能也遵循摩尔定律,随着时间累积,自建S3的性能也开始出现显著优势。

S3 的性能主要体现在吞吐量上,AWS S3 的 100 Gb/s 网络提供了高达 12.5 GB/s 的访问带宽,这一点确实值得称道。这样的吞吐量放在十年前毫无疑问是让人震撼的,然而在今天,一块两万块不到的企业级 12 TB NVMe SSD ,单卡就可以达到 14 GB/s 的读写带宽,100Gb的交换机和网卡也已经非常普及,想做到这一点并不复杂。

在另一个关键性能指标“延迟”上,S3也被本地磁盘吊打。S3 标准档的首字节延迟相当拉垮,根据文档说明在 100~200ms 百毫秒的范围。当然 AWS 也刚刚在 2023 Re:Invent 上新发布了 “高性能S3” —— S3 Express One Zone ,能够达到单毫秒级的延迟,弥补了这个短板。但是和 4K随机读/写延迟 55µs/9µs 十微秒量级的NVMe 还是相距甚远。

S3 Express 的毫秒级延迟听上去很不错,但是当我们将其与 NVMe SSD + MinIO 自建对比时,这种“毫秒级”性能就只能自惭形秽了 —— 当代的 NVMe SSD 的4K随机读/写延迟已经达到了 55µs/9µs ,套上一层薄薄的MinIO转发,首字节输出延迟要比 S3 Express 好至少一个数量级。如果用标准档 S3 对比,性能的差距会进一步拉大到三个数量级。

性能的差距仅仅是一方面,更重要的是成本。标准档的 S3 价格自 2016 年至今都没变过,一直是 0.023 $/GB月,每TB·月的人民币价格是 161 元。高级货色 S3 Express One Zone 的价格比标准档高了一个数量级,达到每月·GB $0.16,每TB·月的人民币价格为 1120 元。作为参考,我们可以引用《重新拿回计算机硬件的红利》和 《云盘是不是杀猪盘》中的数据进行对比:

因素 本地 PCI-E NVME SSD Aliyun ESSD PL3 AWS io2 Block Express
成本 14.5 ¥/TB·月 ( 5年均摊 / 3.2T MLC ) 5 年质保,¥3000 零售 3200¥/TB·月 (原价 6400¥,包月4000¥) 3年预付整体打5折才有此价格 1900 ¥/TB·月 使用最大规格 65536GB 256K IOPS 最优惠状态
容量 32TB 32 TB 64 TB
IOPS 4K随机读:600K ~ 1.1M 4K随机写 200K ~ 350K 4K随机读:最大 1M 16K随机IOPS: 256K
延迟 4K随机读:75µs 4K随机写:15µs 4K 随机读: 200µs 随机IO:500µs 上下文推断为16K
可靠 UBER < 1e-18,折合18个9 MTBF: 200万小时 5DWPD,持续三年 数据可靠性 9个9 存储与数据可靠性 持久性:99.999%,5个9 (0.001% 年故障率) io2 说明
SLA 5年质保 出问题直接换新 Aliyun RDS SLA 可用性 99.99%: 月费 15% 99%: 月费 30% 95%: 月费 100% Amazon RDS SLA 可用性 99.95%: 月费 15% 99%: 月费 25% 95%: 月费 100%

这里本地 NVMe SSD 使用的例子是 Shannon DirectIO G5i 3.2TB MLC颗粒企业级SSD,是我们自己大规模使用的SSD卡。全新拆机零售件价 ¥2788 (闲鱼都有!),按5年60个月折算的每TB·月的人民币价格为 14.5 元。咱们退一步将按浪潮列表价 ¥4388 核算,TB·月价也就是 22.8。如果这个例子还不够,我们可以参考《是时候放弃云计算吗》里面 DHH 下云采购的 12 TB Gen4 NVMe 企业级 SSD,2390$ 一块,TB·月价也正好是 23 块钱。

那么问题就来了,性能好几个数量级的 NVMe SSD,为什么单价比 S3 标准档还要便宜一个数量级(161 vs 23),比 S3 Express 便宜了两个数量级(1120 vs 23 x3 )?如果我用这样的硬件(就算上三副本) + 开源软件自建一个对象存储服务,是不是可以实现三个数量级的性价比提升?(这还没提 SSD 在可靠性相对于 HDD 的优势)

特别值得一提的,上面对比的还单纯是存储空间的费用,流入流出对象存储的流量费通常也是一笔非常可观的支出,有的档位收费靠的不是存储费用,而是取回流量费。还有 SSD 相对 HDD 可靠性的问题,云上数据自主可控的问题,这里就不再深入展开了。

当然云厂商也会辩解——说我们这个 S3 啊,可不是纯粹的存储硬件资源,而是一个开箱即用的服务。里面还包含了软件的知识产权,人力的维护成本;而自建故障率高,自建更危险,自建运维人力开销大等等等等,可惜,这套说辞放在 2006 年或者 2013 年还可以说得通,放在今天就显得有些滑稽了。

开源自建对象存储

在十几年前,绝大多数用户都缺乏IT自建能力,S3也没有足够成熟的开源替代品。用户可以容忍接受这样的高科技溢价。然而当各家云厂商、IDC都开始提供对象存储,甚至都出现了开源免费的对象存储方案(MinIO)后,卖方市场变成了买方市场,价值定价逻辑转变为成本定价逻辑后,不降反涨的资源溢价自然就会面临用户的拷问 —— 它到底给我带来了什么额外价值,以至于要收这种巨额费用。

云的倡导者声称,上云相比自建更便宜,更简单,更快捷。对于个人站长,中小互联网企业这些云适用光谱内的用户来说,这么说肯定是没问题的。如果你的数据规模只有几十个GB,或者有一些中小规模的出海业务和CDN需求,我并不会推荐你凑热闹自建什么对象存储,你应该出门左转去 Cloudflare 用 R2 —— 这也许就是最优解。

然而对于真正贡献营收大头的高价值中大规模客户来说,这些价值主张就不一定成立了。如果你主要是在本地存储使用 TB/PB 规模的数据,那么确实应当认真考虑一下自建对象存储服务的成本与收益 —— 现在用开源软件自建已经非常简单、稳定与成熟了。存储服务的可靠性主要取决于磁盘冗余:除了零星的硬盘故障 (HDD AFR 1%,SSD 2~3‰)需要你(请代维服务商)换上备件,并不会有多少额外的负担。

如果说混合了EBS/S3能力的开源 Ceph 还能算有不少运维复杂度,功能也没有完全拉齐;那么完全兼容 S3 的对象存储服务开源替代 MinIO 可以说是开箱即用了 —— 一个没有额外依赖的纯二进制,不需要几个配置参数就可以快速拉起,把服务器上的磁盘阵列转变为一个标准的本地 S3 兼容服务,甚至还集成了了 AWS 的 AK/SK/IAM 兼容实现!

从运维管理的角度看,Redis 的运维复杂度比 PostgreSQL 低一个数量级,而 MinIO 的运维复杂度又比 Redis 还要再低一个数量级。它简单到这样一种程度:我一个人可以花个一周不到时间把 MinIO 的部署/监控作为添头放到我们开源的 PostgreSQL RDS 方案里来,用作可选的中央备份存储仓库。

我在探探时,有几个 MinIO 集群就是这么搭建维护的:放了 25PB 数据,可能是国内先前最大规模的 MinIO 部署。用了多少人来维护呢?抽调了一个运维工程师 1/10 不到的工作时间来兼职罢了,而自建整体综合成本在云列表价 0.5 折浮动。实践出真知,如果有人骗你说对象存储自建很难很贵,你确实可以自己动手试试 —— 要不了几个钟头,这些销售 FUD 话术就会不攻自破。

对于对像存储服务来说,云的三点核心价值主张:“更便宜,更简单,更快捷” ,更简单这条说不上,更便宜走向了反面,恐怕只剩下最后一点更快捷了 —— 在这一点上确实没有谁能比过云,你确实可以在云上用1分钟不到在全世界所有区域申请PB级的存储服务,Which is Amazing!只不过你也要为这个鸡肋特权付出几十倍的高昂溢价。

因此对于对像存储服务来说,云的三点核心价值主张:“更便宜,更简单,更快捷” 中,更简单这条说不上,更便宜走向了反面,恐怕只剩下最后一点快捷了 —— 在这一点上确实没有谁能比过云,你确实可以在云上用1分钟不到在全世界所有区域申请PB级的存储服务,Which is Amazing!只不过你也要为这个特权掏十几倍到几十倍的高昂溢价就是了。而对于有一定规模的企业而言,比起翻几番的运营成本来说,等个两周或者多掏点一次性资本投入根本不算个事。

小结

记得在 2019年4月1日,国内增值税正式从 16% 下调到 13% ,苹果官网随即全面降价,单品最高降价幅度达8% —— iPhone的几个典型产品都降了500元,把税点返还给了用户。但也有许多厂商选择装聋作哑维持原价,自己吃下这个福利 —— 白花花的银子怎么能随便散给别人呢?

类似的事情就发生在云计算领域 —— 硬件成本的指数下降,并没有在云厂商的服务价格上充分反映出来,而这一点,让公有云逐渐从普惠基础设施变成了垄断集中杀猪盘

然而事情正在起变化,硬件重新变得有趣起来,而云厂商没有办法把这部分红利永远掩藏遮盖下去 —— 聪明的人开始计算数字,勇敢的人已经采取行动。像马斯克和DHH这样的先锋已经充分认识到了这一点,从云上下来,脚踏实地 —— 直接产生千万美元的财务效益,并且还有性能上的回报,运营也变得更加自主独立。越来越多的人会同样意识到这一点,追随先驱者做出明智的选择,拿回属于自己的硬件红利。

References

[1] 2006: https://aws.amazon.com/cn/blogs/aws/amazon_s3/

[2] 2010: http://aws.typepad.com/aws/2010/11/what-can-i-say-another-amazon-s3-price-reduction.html

[3] 2012: http://aws.typepad.com/aws/2012/11/amazon-s3-price-reduction-december-1-2012.html

[4] 2014: http://aws.typepad.com/aws/2014/03/aws-price-reduction-42-ec2-s3-rds-elasticache-and-elastic-mapreduce.html

[5] 2016: https://aws.amazon.com/ru/blogs/aws/aws-storage-update-s3-glacier-price-reductions/

[6] 2023: https://aws.amazon.com/cn/s3/pricing

[7] 首字节延迟相当拉垮: https://docs.aws.amazon.com/AmazonS3/latest/userguide/optimizing-performance.html

[8] 存储与数据可靠性: https://help.aliyun.com/document_detail/476273.html

[9] io2 说明: https://aws.amazon.com/cn/blogs/storage/achieve-higher-database-performance-using-amazon-ebs-io2-block-express-volumes/

[10] Aliyun RDS SLA: https://terms.aliyun.com/legal-agreement/terms/suit_bu1_ali_cloud/suit_bu1_ali_cloud201910310944_35008.html?spm=a2c4g.11186623.0.0.270e6e37n8Exh5

[11] Amazon RDS SLA: https://d1.awsstatic.com/legal/amazonrdsservice/Amazon-RDS-Service-Level-Agreement-Chinese.pdf

Last modified 2024-02-29: update content (34b2b75)