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

78

ZooKeeper 是一个用于数据中心的高可用性协调服务。它起源于Hadoop项目。在其之上,可以实现锁定、故障切换、领导者选举、组成员资格和其他协调问题。 是否有ZooKeeper的替代方案?(当然是免费软件)

11个回答

61
我已经广泛研究了Zookeeper/Curator, Eureka, etcd和Consul。如果你在Java世界中,Zookeeper/Curator和Eureka在很多方面都是最成熟和最容易集成的。Etcd非常酷且非常灵活,但它实际上只是一个高可用性键值存储,因此您需要编写大量代码将其转换为一个有意见的服务发现系统。 Consul(对我来说)是两全其美的选择。它是一个基于serf编写的有意见的服务发现系统,使用raft进行集群共识和gossip进行通信。它通过文档完善的REST API公开了发现/注册端点,并允许您使用DNS SRV记录发现服务,并使用配置注册服务(例如,您可以注册无法与客户端集成的数据库或应用程序,或者如果您只想使服务发现与应用程序解耦)。
我已经写了一篇关于 Consul 的博客文章,您可以在那里学习并使用我的“尝试”演示。
我还讨论了使用 etcd 和 Docker 进行服务发现,如果您想看看自定义代码的更多内容。
最后一件事!etcd 和 Consul 是用 go 语言编写的,因此与像 Zookeeper 这样的 Java 解决方案相比,它们的维护要容易得多。所有你需要的就是 Consul / etcd 二进制文件。没有依赖项、没有链接库、没有 JVM。

26

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


11

刚刚发现了 Accord (使用C语言) 和 OpenReplica/ConCoord (使用Python),它们可能是有趣的解决方案。

[编辑] Hashicorp小组,Vagrant和Packer的作者,正在推出一个名为Serf的 "面向服务的去中心化解决方案"。

[编辑2] Hashicorp再次惊艳亮相!他们刚刚发布了Consul,建立在Serf之上。其宣传口号是:"一个完全分布式、高度可用、可扩展到数千个节点和多个数据中心的服务发现和配置解决方案"。


1
Accord是一个专门针对写入密集型负载的新兴项目。它使用CoroSync,该技术也被Qpid所采用,并且可以与Linux HA一起使用。 - user246672
Accord似乎已经无法使用: "该网站无法访问,www.osrg.net的服务器IP地址无法找到。" - Trade-Ideas Philip

8

是的,还有Doozerd (https://github.com/ha/doozerd)。好好看看它,这是由Heroku开发的一个漂亮的、单一二进制分布式协调服务。它有java/python/ruby/node的绑定/库。非常容易入门和玩耍。


6
Doozerd很好,但它没有得到维护并且没有生产记录。 - user246672

6

看一下 Serf。 这里与Zookeeper进行了比较


4
我的研究团队开发的OpenReplica是一个高可用的数据中心自由软件协调服务,可用于实现锁定、故障转移、领导者选举、组成员身份和其他协调服务。它与ZooKeeper有两个关键的不同之处:
  • 它使用面向对象的API。这使得编写协调服务更加容易。OpenReplica的同步代码与其课本对应物完全相同;无需像ZooKeeper和Chubby那样掌握基于文件和upcall的API。

  • 它支持动态成员更新到副本集。不需要静态配置文件。该系统集成在DNS中(OpenReplica的权威、从属或Amazon Route 53)。

我们积极支持该系统,如果您有进一步的问题,请不要犹豫告诉我们。


  1. ZooKeeper是面向对象的,详见http://zookeeper.apache.org/doc/trunk/zookeeperProgrammers.html
  2. ZK基本上是一个微型文件系统,用于存储基础设施元数据,同时支持存在检测(短暂节点)和观察者。
- user246672
我已经拉取了git仓库,看起来最后一次提交是在五月份。希望你还在 :) - wizzard0
嗨Barry:ZooKeeper不是面向对象的。主要抽象(znodes,路径,监视器)都在那里支持维护小对象,并且API就像文件系统一样。如果您仔细查看OpenReplica,您会发现ZK的文件系统API和OpenReplica的OO API之间存在很大差异。wizzard0:我们还活着并且状态良好!新版本计划于4月初发布。 - user1404662

1

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


1
在Github上有一个名为Noah的项目,看起来很有趣。它声称“松散基于Apache ZooKeeper”https://github.com/lusis/Noah,其中REST支持是其关键功能(而ZK则是将其作为contrib / option而非内置)。

2
Noah 可能适用于不需要高可用性或工作安全性是可选的应用程序。 - user246672

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"
优点是,你可以得到一个非常简单的集群管理器,并且你可以将其与你喜欢的配置、部署或持续集成工具结合使用。

1

有不同的工具可以优化不同的工程折衷。

  • ZooKeeper 读取规模略微扩大;带有许多观察者的写入可能会变慢。它已被证明,并拥有庞大的社区。
  • Accord 对于写入密集型用途似乎很有趣,但是典型的用例已经有了特定于域的解决方案(即日志记录、遥测)。

其他工具有些有趣,但通常未经验证。如果用于生产使用,请不要弄错。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接