领导人选举:Etcd vs Zookeeper vs Hazelcast

Mic*_*ael 5 high-availability consistency hazelcast etcd apache-zookeeper

我们正在选择最佳选项,以实现由多个(例如3个)实例组成的服务(用Java编写)的领导者选举,以实现高可用性。我们的目标是在任何给定时间仅激活一个实例。

非常高兴听到您对以下选项的意见:

1)Hazelcast。使用“法定人数”和一把锁,我们可以实施领导者选举。但是,我们可能会遇到裂脑问题,一段时间内可能会出现两名领导人。另外,似乎Hazelcast不支持SSL。

2)Zookeeper。我们可以在Zookeeper集成(在我们的每个服务实例上运行ZK节点)的顶部实现领导者选举。Zookeeper是否比Hazelcast提供更好的一致性保证?它也遭受脑​​裂问题困扰吗?

3)等 我们可以使用Jetcd库,它似乎是最现代,最强大的技术。在一致性方面真的比Zookeeper好吗?

谢谢。

mdo*_*gan 6

1)Hazelcast(版本3.12)提供了CPSubsystem一个CP基于CAP的系统,并使用Hazelcast集群内部的Raft共识算法构建。CPSubsytem有一个称为的分布式锁定实现FencedLock,可用于实现领导者选举。

有关更多信息CPSubsystemFencedLock请参见;参见。

3.12之前的Hazelcast版本不适合领导者选举。如您已经提到的,它可以在网络拆分期间选择可用性,这可以导致选举多个领导者。

2)Zookeeper不会遭受提到的脑裂问题,当网络分裂发生时,您将不会观察到多个领导者。Zookeeper建立在ZAB原子广播协议上。

3)Etcd正在使用Raft共识协议。Raft和ZAB具有相似的一致性保证,均可用于实施领导者选举过程。

免责声明:我在Hazelcast工作。