我们正在选择实施领导人选举以实现高可用性的最佳选择。我们的目标是在任何给定时间仅激活一个实例。我们正在使用Spring Boot来开发默认情况下已部署在Tomcat上的应用程序。很高兴听到您对以下选项的意见:
Zookeeper是否提供比领事更好的CP?
查看维护/复杂性吗?
答案 0 :(得分:1)
ZooKeeper基于ZAB,Consul基于Raft。从高层看,两者都是非常相似的原子广播算法。因此,就CAP的“一致性”(实际上是线性化,一种非常强的一致性形式)而言,两者都将提供类似的保证。它们都具有线性化的法定人数(多数)。默认情况下,其他节点(非仲裁)可能滞后于更新,从而导致陈旧的读取。之所以这样做,是因为完全的线性化会使事情变慢,并且只需稍作陈旧的读取就可以使许多应用程序运行良好。但是,如果在特定用例中这是不可接受的,则始终可以在ZooKeeper中读取之前先使用sync
调用,在Consul中使用Consistent
模式来实现完全线性化。
但是,对于服务发现,Consul似乎提供了ZooKeeper中没有现成的高级构造。
就领导人选举用例而言,两者都可以使用。
但是考虑到ZooKeeper已被许多顶级apache项目使用,并且它比Raft以及因此的Consul还旧,我希望它会得到更好的社区支持和文档。同样提供各种收益的Apache文档也很棒。
最后,如果您使用ZooKeeper,则可能还需要使用Apache Curator,它在ZooKeeper之上提供了更高级别的API。