Etcd 作为云原生领域知名的开源分布式 KV 存储系统,在存储的数据集较大的情况下一直存在一定的性能问题。所以在其官网文档页面上的 System limits 章节明确指出了建议给存储配置最大的限额是 8 GB:
根据网上众多的资料指出,制约性能的主要关键是其存储引擎: bbolt。
Etcd 目前使用的
bbolt
是 fork 自 Boltdb,原因是Blotdb
的原作者把仓库 archive 了,README 中可以看见描述的理由是认为项目关键目标已经完成,后续没有精力继续维护。
阿里巴巴在 2019 年对 bbolt
提交了一个 PR,还对应在 CNCF 的博客发文 Performance optimization of etcd in web scale data scenario 描述了这个改动的背景,过程和技术细节,号称改善了1000x的速度,让原先 Etcd 文档内提到的最大 8 GB 的文件系统限制不再存在,甚至可以让 Etcd 存储增长到 100 GB 也不会有性能衰减。
从这个 PR 被 merge 的 commit 可以看见,受益的正式版本是 v1.3.2+
。
确定了这个 tag,追踪下 Etcd 的 go.mod
的提交记录就可以很轻松的找到具体是从什么版本开始引入这个变更的。从 vendor: update boltdb and grpc middleware version 可以看出,正式版本是在 v3.4.0+
。
不过很有意思的是,从开头指出的 v3.5
对应文档章节页面能够看出,其实文档并未更新关于 8 GB 限制的这个说法。在 Issues 里有人提 8GB recommended limit can be lifted 认为文档该更新了,但是就是还没更新。serathius
(从此人简介看算是 Etcd 的技术决策者)在评论中指出需要个更官方的测试结果来支撑文档吹上的牛,所以这个估计还得要段时间。
最后写到这,就挺纳闷的:对于 Etcd 这样一个项目来说,如此巨大的性能提升 patch,移除了这样一个限制,居然从 2019 到 2022,经过了数个 minor version,没有更新文档不说,甚至 v3.4.0
的 changelog 里都没提到,是个什么情况呢?