etcd 层面,作为 Kubernetes 存储对象的数据库有哪些改进?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
第一版本的改进,我们通过将 etcd 的数据转存到 tair 集群中,提高了 etcd 存储的数据总量。但这个方式有一个显著的弊端是额外增加的 tair 集群,增加的运维复杂性对集群中的数据安全性带来了很大的挑战,同时其数据一致性模型也并非基于 raft 复制组,牺牲了数据的安全性。 第二版本的改进,我们通过将 API Server 中不同类型的对象存储到不同的 etcd 集群中。从 etcd 内部看,也就对应了不同的数据目录,通过将不同目录的数据路由到不同的后端 etcd 中,从而降低了单个 etcd 集群中存储的数据总量,提高了扩展性。 第三版本的改进,我们深入研究了 etcd 内部的实现原理,并发现了影响 etcd 扩展性的一个关键问题在底层 bbolt db 的 page 页面分配算法上:随着 etcd 中存储的数据量的增长,bbolt db 中线性查找“连续长度为 n 的 page 存储页面”的性能显著下降。