【发布时间】:2011-08-28 05:19:45
【问题描述】:
ZooKeeper 是面向数据中心的高可用性协调服务。它起源于 Hadoop 项目。可以在它之上实现锁定、故障转移、领导者选举、组成员资格和其他协调问题。 ZooKeeper 有什么替代品吗? (当然是免费软件)
【问题讨论】:
标签: locking cluster-computing high-availability heartbeat apache-zookeeper
ZooKeeper 是面向数据中心的高可用性协调服务。它起源于 Hadoop 项目。可以在它之上实现锁定、故障转移、领导者选举、组成员资格和其他协调问题。 ZooKeeper 有什么替代品吗? (当然是免费软件)
【问题讨论】:
标签: locking cluster-computing high-availability heartbeat apache-zookeeper
我广泛研究了 Zookeeper/Curator、Eureka、etcd 和 consul。如果您在 Java 世界中,Zookeeper/Curator 和 Eureka 在许多方面都是最完善和最容易集成的。 Etcd 非常酷且非常灵活,但它实际上只是一个 HA 密钥存储,因此您必须编写大量代码才能将其变成一个固执己见的服务发现系统。
Consul(对我来说)是两全其美的。它是一个基于serf 编写的固执己见的服务发现系统,使用 raft 进行集群共识和 gossip 进行通信。它使用记录良好的 REST api 公开发现/注册端点,还允许您使用 DNS SRV 记录发现服务,并使用配置注册服务(即,您可以注册无法与客户端集成的数据库或应用程序,或者如果你只是想让你的服务发现与你的应用程序分离)
我写了一个blog post about consul,您可以在其中了解更多信息并浏览我的“试用”演示
如果您想了解更多关于自定义代码的外观,我还讨论了service discovery with etcd & docker。
最后一件事! etcd 和 consul 是用 go 编写的,因此维护它们比 zookeeper 之类的 java 解决方案要容易得多。您只需要 consul / etcd 二进制文件。没有依赖项,没有链接库,没有 jvm。
【讨论】:
有一个非常有前途的 ZooKeeper 替代方案,名为 etcd (github.com/coreos/etcd),由 CoreOS 团队编写。与 Doozerd 不同,etcd 正在积极开发中。
【讨论】:
刚刚发现 Accord (C) 和 OpenReplica/ConCoord (Python) 可能是有趣的解决方案
[编辑] 以 Vagrant 和 Packer 闻名的 Hashicorp 团队正在打造名为 Serf 的“用于服务发现和编排的去中心化解决方案”。
[EDIT2] Hashicorp 再次出击!他们刚刚发布了Consul,建立在 Serf 之上。宣传语:“一种服务发现和配置解决方案,完全分布式,高度可用,可扩展到跨多个数据中心的数千个节点和服务”。
【讨论】:
是的,还有Doozerd (https://github.com/ha/doozerd)。好好看看,它是 Heroku 开发的一个不错的单一二进制分布式协调服务。使用 java/python/ruby/node 的绑定/库。很容易上手和玩耍。
【讨论】:
我的研究小组的OpenReplica 是一个高可用的数据中心 FOSS 协调服务。它可用于实现锁定、故障转移、领导者选举、组成员资格和其他协调服务。它在两个关键方面与 ZooKeeper 不同:
它使用面向对象的 API。这使得编写协调服务变得更加容易。 OpenReplica 的同步代码看起来与它的教科书对应物一模一样;无需像 ZooKeeper 和 Chubby 那样掌握文件和基于 upcall 的 API。
它启用对副本集的动态成员资格更新。不需要静态配置文件。该系统已集成到 DNS(权威、OpenReplica 的从属设备或 Amazon Route 53)中。
我们积极支持该系统,如果您有其他问题,请随时告诉我们。
【讨论】:
在 github 上有一个名为 Noah 的项目,看起来很有趣,它说它“松散地基于 Apache ZooKeeper”https://github.com/lusis/Noah,其中 REST 支持是一个关键特性(ZK 将此作为贡献/选项而不是内置)。
【讨论】:
有不同的工具可以针对不同的工程权衡进行优化。
其他的有些有趣,但通常未经证实。如果打算用于生产用途,请不要弄错。
【讨论】:
我发现了 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”
优点是,您将获得一个非常简单的集群管理器,并且您可以将它与您最喜欢的配置、部署或持续集成工具相结合。
【讨论】:
看来Corosync 也像 ZooKeeper。
【讨论】:
我知道这篇文章已经很老了,但是有人正在寻找所有可能的替代方案,我还想推荐 JGroups 库,它足够成熟,可以在生产环境中使用。我在我的一个项目中成功地使用了它,主要用于分布式协调和集群之间的消息共享。除了其灵活的架构外,它还支持 AWS 支持,您可以在其中自定义其堆栈以获得所需的内容。建议你have a look at it
【讨论】: