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


73

ZooKeeper是针对数据中心的高度可用的协调服务。它起源于Hadoop项目。在此之上,可以实现锁定,故障转移,领导者选举,小组成员资格和其他协调问题。ZooKeeper是否有替代品?(当然是免费软件)

Answers:


53

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

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

我写了一篇有关领事博客文章,您可以在其中了解更多信息并逐步完成“试用”演示

如果您想了解有关自定义代码的外观的更多信息,我还与etcd和docker讨论了服务发现

最后一件事!etcd&consul是用go语言编写的,因此维护它们比使用zookeeper之类的Java解决方案要容易得多。您只需要consul / etcd二进制文件。没有依赖项,没有链接的库,没有jvm。



10

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

[编辑] Vagrant和Packer声望很高的Hashicorp团队正在烹饪“服务发现和编排的分散式解决方案”,称为Serf

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


1
Accord是一个针对写入密集型负载的新兴项目。它使用CoroSync,Qpid也使用CoroSync,并且可以与Linux HA一起使用。

Accord似乎已死:“无法访问此站点/找不到www.osrg.net的服务器IP地址。”
Trade-Ideas Philip

8

是的,还有Doozerd(https://github.com/ha/doozerd)。好好看一下,它是Heroku开发的一种不错的单一二进制分布式协调服务。具有Java / python / ruby​​ / node的绑定/库。非常容易上手并玩转。


6
Doozerd很不错,但是没有维护,也没有生产记录。


4

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

  • 它使用面向对象的API。这使得编写协调服务变得更加容易。OpenReplica的同步代码与教科书完全相同。无需像ZooKeeper和Chubby中那样掌握文件和基于上行的API。

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

我们会积极支持该系统,如果您还有其他问题,请随时与我们联系。


1)ZooKeeper是面向对象的,请参见zookeeper.apache.org/doc/trunk/zookeeperProgrammers.html 2)?ZK基本上是用于存储基础结构元数据的毫微微文件系统,该系统还支持状态检测(短暂节点)和观察者。

我已经撤回了git repo,看来最近一次提交是从5月开始的。希望你仍然闲逛:)
wizzard0 2012年

嗨,巴里:ZooKeeper不是面向对象的。主要的抽象(znodes,路径,监视)都可以用来维护小对象,而API则是文件系统的API。如果仔细看一下OpenReplica,您会发现ZK的文件系统API与OpenReplica的OO API有很大的不同。wizzard0:我们还活着!新版本计划于4月初发布。
user1404662 2013年

1

github上有一个名为Noah的项目,看起来很有趣,它说它“宽松地基于Apache ZooKeeper” https://github.com/lusis/Noah,其中REST支持是关键功能(ZK将此作为contrib / option而不是比内置的)。


2
对于不需要高可用性或作业安全性可选的应用程序,Noah可能有用。

1

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

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

其他的有些有趣,但是通常没有得到证实。如果打算用于生产用途,请不要出错。


1

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

农奴(serfdom.io)也是一个不错的解决方案,因为它很简单!但是您必须考虑,SERF只是一个集群管理器,使您可以将自定义事件发送到所有集群节点。很好,但是您必须编写自己的Shell脚本(又名事件)。参见以下示例:“ https://www.digitalocean.com/community/articles/how-to-set-up-a-serf-cluster-on-several-ubuntu-vps

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



0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.