一致性:(zab协议)
leader(选举过程)
2pc的实现:
1、占用资源----预提交(leader写日志,写磁盘)
2、ack----等待
3、执行----提交(leader写database,flower写database[异步提交])
少数服从多数
同步过程
领导者选举:
1、集群启动
2、leader挂掉
3、超过一半flower挂掉
zookeeper尽量达到强一致性
zookeeper进行写操作:
1、写到主节点,主要是指写日志
2、包装成事务发送到从节点
3、从节点写日志
4、超过半数ack以后
5、提交commit到队列,这一步是异步的,事务不是强一致性的根本原因
6、写数据到leader的datatree
7、写数据到follower的datatree
(快照+日志)作为持久化的手段
生成日志zxid
每个人都有一个自己的投票箱
每个zookeeper把自己的票广播给其他人
zookeeper:同步阻塞问题、单点问题、数据不一致、容错性不好