etcd raft cap 理解
label: cap、raft、etcd
写这篇文章,主要是在smartx面试时,被CTO问到了一些顶层设计的问题,这让我感觉到自己对raft理解太浅了,或者说根本没理解清楚。
首先raft的协议是做什么的?
分布式共识算法,通过raft协议让各个节点保持状态一致;
etcd基于raft来做的分布式kv数据库的目的是什么?
etcd收zk的启发,基于raft协议开发的。分布式etcd能够带来什么优势呢?HA,etcd的HA表现在多节点能够对外提供数据一致的服务,同时在发生节点宕机、网络分区等,etcd集群整体仍能对外提供服务。
通过etcd的HA,我们明白raft协议的目的是,提供HA的环境下的一致性数据。而不是,之前乱向的提高读性能。
从其设计出发点,应该明白etcd提供的kv不适合对读写性能要求特别高的场景,它比较适合量小,但需要可靠的一致性数据存储服务,比如存储配置数据,在k8s中etcd用来存储集群的元数据。
网络分区对etcd的影响,以及节点数量对于服务的影响?
以5(ABCDE,A:leader)节点的etcd集群为例,发生网络分区AB|CDE:
AB部分,leader A向followers发送心跳,但无法获得大多数节点的响应,timeout后,进入选举阶段,AB都无法获得大多数的节点投票(因为和CDE分区,5节点下大多数要求包括