zookeeper
了解zk: 参考
zk有序树形节点实现分布式锁: 参考
- Kafka 选举就用的这个。leader选举。
paxos执行过程: 参考
zk基于zab协议,是个paxos的变种。
zk的所有副本都可以提供读服务,与此相对应的,只有主节点可以提供写服务。
选举原则:数据最新or ID最大的节点作为主。
QA
zk会脑裂吗
不会脑裂。默认 只有获得超过半数节点的投票, 才能选举出leader. 因此只会有一个leader存在。可能会有部分节点没有follow leader。这些节点已经挂了。
zk or ZAB为何是最终一致性而不是强一致性
- 写是强一致性,单领导者模型,写需要majority保证(写节点超过一半),脑裂情况下也可以写强一致
- 读两种接口,1:读单个机器的,2:只读主的。如果是后者就是强一致性的。
- etcd做了读的优化,读时也需要majority,需要大伙同意认为它是主,但牺牲了效率。
这里的一致性是从读写方面,写一致性,都写成功,读一致性,从提供的读接口任意时刻咋读都一样。和事务一致性不太一样。