Leader 选举:Consul vs ZooKeeper
Leader Election : Consul vs ZooKeeper
我们正在选择实施领导选举以实现高可用性的最佳方案。我们的目标是在任何给定时间只有一个实例处于活动状态。我们正在使用 Spring Boot 来开发默认部署在 Tomcat 上的应用程序。很高兴听到您对以下选项的意见:
Zookeeper 是否提供比 Consul 更好的 CP?
查看 maintenance/complexity ?
ZooKeeper 基于 ZAB,Consul 基于 Raft。两者都是高层非常相似的原子广播算法。因此,就 CAP 的 "Consistancy"(实际上是线性化,一种非常强的一致性形式)而言,两者都将提供类似的保证。它们都对法定人数(多数)进行线性化写入。默认情况下,其他节点(不在仲裁中)可能会滞后于更新,从而导致读取过时。这是这样做的,因为完全线性化会使事情变慢,而且许多应用程序在有一点陈旧读取的情况下是好的。但是,如果这在特定用例中不可接受,则始终可以在 ZooKeeper 中使用 sync
读取前调用,并在 Consul 中使用 Consistent
模式来实现完全线性化。
然而,对于服务发现,Consul 似乎提供了更高级别的构造,这些构造在 ZooKeeper 中并非开箱即用。
在领导者选举用例方面,两者都可以使用。
但鉴于 ZooKeeper 被许多顶级 apache 项目使用,而且它也比 Raft 和 Consul 更老,我希望它能有更好的社区支持和文档。提供各种 recepes 的 Apache 文档也很棒。
最后,如果您使用 ZooKeeper,您可能还想使用 Apache Curator,它在 ZooKeeper 之上提供更高级别的 API。
我们正在选择实施领导选举以实现高可用性的最佳方案。我们的目标是在任何给定时间只有一个实例处于活动状态。我们正在使用 Spring Boot 来开发默认部署在 Tomcat 上的应用程序。很高兴听到您对以下选项的意见:
Zookeeper 是否提供比 Consul 更好的 CP?
查看 maintenance/complexity ?
ZooKeeper 基于 ZAB,Consul 基于 Raft。两者都是高层非常相似的原子广播算法。因此,就 CAP 的 "Consistancy"(实际上是线性化,一种非常强的一致性形式)而言,两者都将提供类似的保证。它们都对法定人数(多数)进行线性化写入。默认情况下,其他节点(不在仲裁中)可能会滞后于更新,从而导致读取过时。这是这样做的,因为完全线性化会使事情变慢,而且许多应用程序在有一点陈旧读取的情况下是好的。但是,如果这在特定用例中不可接受,则始终可以在 ZooKeeper 中使用 sync
读取前调用,并在 Consul 中使用 Consistent
模式来实现完全线性化。
然而,对于服务发现,Consul 似乎提供了更高级别的构造,这些构造在 ZooKeeper 中并非开箱即用。
在领导者选举用例方面,两者都可以使用。
但鉴于 ZooKeeper 被许多顶级 apache 项目使用,而且它也比 Raft 和 Consul 更老,我希望它能有更好的社区支持和文档。提供各种 recepes 的 Apache 文档也很棒。
最后,如果您使用 ZooKeeper,您可能还想使用 Apache Curator,它在 ZooKeeper 之上提供更高级别的 API。