ZooKeeper替代品? (集群协调服务)

时间:2011-05-18 16:26:04

标签: locking cluster-computing high-availability heartbeat apache-zookeeper

ZooKeeper是一个高度可用的数据中心协调服务。它起源于Hadoop项目。可以在其上实现锁定,故障转移,领导者选举,组成员身份和其他协调问题。 ZooKeeper还有其他选择吗? (当然是免费软件)

11 个答案:

答案 0 :(得分:49)

我广泛关注Zookeeper / CuratorEurekaetcd和领事。如果您在Java世界中,Zookeeper / Curator和Eureka在很多方面都是最精致和最容易集成的。 Etcd非常酷且非常灵活,但它实际上只是一个HA密钥存储区,因此您必须编写大量代码才能将其转换为一个固定的服务发现系统。

Consul(对我而言)是两全其美的。它是一个自以为是的服务发现系统,写在serf之上,使用raft进行集群共识和八卦进行通信。它使用详细记录的REST api公开发现/注册端点,还允许您使用DNS SRV记录发现服务,并使用配置注册服务(即,您可以注册无法与客户端集成的数据库或应用程序,或者,如果您只想让您的服务发现与您的应用程序分离)

我写了blog post about consul,你可以在那里了解更多信息并完成我的“试用”演示

如果您想了解更多有关自定义代码的信息,我还讨论了service discovery with etcd & docker

最后一件事! etd& consul是用go编写的,所以维护它们比像zookeeper这样的java解决方案要容易得多。你需要的只是consul / etcd二进制文件。没有依赖,没有链接的库,没有jvm。

答案 1 :(得分:25)

有一个非常有前途的ZooKeeper替代方案,名为etcd (github.com/coreos/etcd),由CoreOS团队编写。与Doozerd不同,etcd正在积极开发中。

答案 2 :(得分:10)

刚刚发现Accord(C)和OpenReplica/ConCoord(Python)可能是有趣的解决方案

[编辑] Hashicorp工作人员,Vagrant和Packer成名,正在烹饪“分散的服务发现和协调解决方案”,称为Serf

[EDIT2] Hashicorp再次罢工!他们刚刚发布了基于Serf的Consul。推销:“服务发现和配置的解决方案,完全分布式,高可用性,可扩展到多个数据中心的数千个节点和服务”。

答案 3 :(得分:8)

是的,还有Doozerd (https://github.com/ha/doozerd)。仔细看看它,它是由Heroku开发的一个很好的单一二进制分布式协调服务。使用java / python / ruby​​ / node的绑定/库。很容易上手和玩耍。

答案 4 :(得分:6)

看看Serf。与Zookeeper here进行比较。

答案 5 :(得分:4)

来自我的研究小组的{p> OpenReplica是针对数据中心的高度可用的FOSS协调服务。它可用于实现锁定,故障转移,领导者选举,组成员资格和其他协调服务。它与ZooKeeper的区别在于两个关键方面:

  • 它使用面向对象的API。这使得编写协调服务变得更加容易。 OpenReplica的同步代码看起来就像它的教科书对应物;没有必要掌握像ZooKeeper和Chubby那样的文件和基于上行调用的API。

  • 它可以对副本集进行动态成员资格更新。不需要静态配置文件。系统已集成到DNS(权威,OpenReplica的从属或Amazon Route 53)中。

我们积极支持该系统,如果您有其他问题,请随时告诉我们。

答案 6 :(得分:1)

在github上有一个名为Noah的项目看起来很有趣,它说它“松散地基于Apache ZooKeeper”https://github.com/lusis/Noah,REST支持是一个关键特性(ZK将其作为贡献/选项而不是内置)。

答案 7 :(得分:1)

有不同的工具可以针对不同的工程权衡进行优化。

  • ZooKeeper 对读取进行略微缩放;与许多观察者一起写作可能会很慢。它已被证明并拥有相当规模的社区。
  • Accord 对于写密集型用途似乎很有意思,但是典型的用例已经具有特定于域的解决方案(即日志记录,遥测)。

其他人有点有趣但通常未经证实。如果打算用于生产,请不要弄错。

答案 8 :(得分:1)

我发现了Zookeeper,etcd和Doozer的比较: http://devo.ps/blog/zookeeper-vs-doozer-vs-etcd/

Serf(serfdom.io)也是一个很好的解决方案,因为它很简单!但您必须考虑,SERF只是一个集群管理器,它允许您将自定义事件发送到所有集群节点。多数民众赞成,但你必须编写自己的shell脚本(也就是事件)。 请参阅此示例:" https://www.digitalocean.com/community/articles/how-to-set-up-a-serf-cluster-on-several-ubuntu-vps"

优点是,您获得了一个非常简单的集群管理器,并且您可以将其与您喜欢的配置,部署或持续集成工具相结合。

答案 9 :(得分:0)

似乎Corosync也像ZooKeeper。

答案 10 :(得分:0)

我知道这篇文章已经很老了,但是有人正在寻找所有可能的替代方案,我也想建议JGroups库,它已经足够成熟,可以在生产环境中使用。我已经在我的一个项目中成功使用它,主要用于分布式协调和在集群之间共享消息。除了灵活的架构之外,它还支持AWS支持,您可以在其中自定义堆栈以获得所需的内容。我建议你have a look at it