2019年面试官最喜欢问的28道ZooKeeper面试题(20)

· 场景二:Leader 服务器上没有 Proposal 缓存队列且 peerLastZxid 不等于 lastProcessZxid

16. zookeeper 是如何保证事务的顺序一致性的?

zookeeper 采用了全局递增的事务 Id 来标识 , 所有的 proposal(提议)都在被提出的时候加上了 zxid , zxid 实际上是一个 64 位的数字 , 高 32 位是 epoch( 时期; 纪元; 世; 新时代)用来标识 leader 周期 , 如果有新的 leader 产生出来 , epoch会自增 , 低 32 位用来递增计数 。 当新产生 proposal 的时候 , 会依据数据库的两阶段过程 , 首先会向其他的 server 发出事务执行请求 , 如果超过半数的机器都能执行并且能够成功 , 那么就会开始执行 。

17. 分布式集群中为什么会有 Master?

在分布式环境中 , 有些业务逻辑只需要集群中的某一台机器进行执行 , 其他的机器可以共享这个结果 , 这样可以大大减少重复计算 , 提高性能 , 于是就需要进行leader 选举 。

推荐阅读