3.4 相对于ZooKeeper的区别

ZooKeeper无疑是一款成功的开源产品,并拥有广泛的信任者和应用场景,和以往一样,老外作者在Apache网站上发布了一款产品,我们的工程师马上会虚心地学习和忠心捍卫,而国产原创的产品往往会遭到百般质疑,因为我们的原创更多是抄袭和粗制滥造,我们的国产更多是框架集成而不是架构设计。这种情感上的倾向性不是一天能改变的。

做产品对比和列举优势往往容易引起激烈争论,会被认为是在宣传和引导产品使用,实际上在都能满足功能需求的情况下,选择使用哪款产品更多是政治因素决定的,而不是技术因素,领导意志及工程师本身的熟悉程度和爱好等都是决定因素。

这里我们仅仅从技术角度阐述几点优势,ZooKeeper作为一个Chubby和Paxos模仿品,缺乏创新型的设计改进,它仍然存在以下缺点:

❏ 树型配置节点的繁琐复杂,性能低下。为了保证这种结构,ZooKeeper需要维持一套虚拟文件结构的开销,对于目录结构深的树节点造成性能影响,而配置信息结构实际上往往不一定需要树结构。

❏ “观察”(watch)机制的僵化设计:ZooKeeper没有获取最新版本信息的方法支持,它只能粗暴地在每次写入更新等方法时注册一个watch,当这些方法被调用后就回调,它不考虑信息内容是否变化,对于没有使信息内容发生改变的更新,ZooKeeper仍然会回调,并且ZooKeeper的回调比较呆板,它只能用一次,如果信息持续变化,必须又重新注册watch。而Fourinone的事件处理则可以自由控制是否持续响应信息变化。

❏ 领导者选举机制实现得太过局限,集群只有两个节点,ZooKeeper无法进行领导者选举,ZooKeeper的领导者选举必须要奇数节点的奇怪限制。另外,ZooKeeper的领导者选举实现虽然比原始的Paxos要简化,但是它仍然存在领导者(Leader)、跟随者(Follower)、观察者(Observer)、学习者(Learner)等众多角色,以及跟随状态(Following)、寻找状态(Looking)、观察状态(Observing)、领导状态(Leading)等复杂状态。相对于Fourinone的领导者选举,ZooKeeper仍然不够直观简洁,难以用较少配置和代码演示。

❏ Windows系统上几乎不支持,需要安装Linux壳,并且仅建议用于学习研究。Fourinone支持Windows、Linux集群混合使用。

Fourinone提出一种新的分布式协调系统设计,在满足ZooKeeper所有功能下,克服了以上缺点,提出了新的配置结构、变化事件机制、简化的领导者选举实现,能更好地满足分布式协调需求。