作者回复: Redis是吧,区别挺大的,文章中我用了一副思维导图从数据复制、数据分片、存储引擎、API等方面总结etcd v2技术点,我简单从这些方面给你对比一下,数据复制上Redis是主备异步复制、etcd使用的是Raft,前者可能会丢数据,为了保证读写一致性,etcd读写性能相比Redis差距比较大。数据分片上Redis有各种集群版解决方案,可以承载上T数据,存储的一般是用户数据,而etcd定位是个低容量的关键元数据存储,db大小一般不超过8g。存储引擎和API上Redis内存实现了各种丰富数据结构,而etcd仅是kv API, 使用的是持久化存储boltdb。
作者回复: 感谢对专栏的支持,正如你所看到的,专栏27讲,每讲内容特别丰富,大部分5000到6000字,整个专栏至少15万字,写作不易,我也是在工作日的凌晨、周末业余时间为大家呈现一个etcd全方位特性解读,更新是固定的1周3篇,春节都在加班加点创作了,麻烦稍等哈,基础篇春节期间会更新完毕,你把基础篇的内容踏踏实实学完,动手做几个小实验,我相信面试哪个大厂,都无压力了哈。
作者回复: 感谢你的细心和反馈,我查阅etcd官方资料写得也是的确有误,之前以为是很久之前zk使用的rpc api,看了下commit记录貌似一直都是juite,后面我们修正下,谢谢
作者回复: 也有可能在部分场景出现不一致哈,后面实践篇会和大家分析。异地容灾建议使用raft learner特性,添加learner节点,make mirror是基于watch机制的,稳定性、可靠性等相比learner要差点,但是目前社区对learner限制太多,不支持快照等,我们自己做了定制化,大家使用上要等等,估计3.5版本才比较好用
作者回复: 嗯,list pod太恐怖了,哈哈,线上大部分异常一般都是list pod,configmap,crd
作者回复: 嗯,etcd与k8s相互影响、促进,etcd社区任何核心特性首先也是考虑是否有益于k8s场景等,新版本发布,也是拿k8s做性能稳定性测试
作者回复: 是的,我们使用raft learner节点,跨城容灾,进行了一些定制化改造
作者回复: 我认为最主要的是还是Go语言和容器生态,zookeeper当时也没好用的go client库,watch特性也没etcd好用,核心还是文中说得,当时没一个项目满足k8s需求,只有coreos团队不停的推动etcd与k8s相互适配改造,维护k8s etcd代码,让k8s核心开发者有更多精力去开发更重要的特性开发。
作者回复: 感谢你的留言与支持
作者回复: 嗯,感谢支持,想深入了解更多的,可以翻一番早期etcd/kubernetes issue/pr