ZooKeeper是针对数据中心的高度可用的协调服务。它起源于Hadoop项目。在此之上,可以实现锁定,故障转移,领导者选举,小组成员资格和其他协调问题。ZooKeeper是否有替代品?(当然是免费软件)
Answers:
我已经广泛研究过Zookeeper / Curator,Eureka,etcd和领事。如果您在Java世界中,Zookeeper / Curator和Eureka在许多方面都是最精致,最容易集成的。Etcd非常酷并且非常灵活,但是它实际上只是一个HA密钥存储区,因此您必须编写大量代码才能将其转变为可靠的服务发现系统。
领事对我而言是两全其美的。这是一个自发的服务发现系统,写在serf之上,使用筏进行集群共识,使用八卦进行通信。它使用完善的REST api公开发现/注册端点,还允许您发现具有DNS SRV记录的服务,并通过配置注册服务(即,您可以注册无法与之集成客户端的数据库或应用程序,或者如果您只是想使服务发现与应用程序分离开来)
我写了一篇有关领事的博客文章,您可以在其中了解更多信息并逐步完成“试用”演示
如果您想了解有关自定义代码的外观的更多信息,我还与etcd和docker讨论了服务发现。
最后一件事!etcd&consul是用go语言编写的,因此维护它们比使用zookeeper之类的Java解决方案要容易得多。您只需要consul / etcd二进制文件。没有依赖项,没有链接的库,没有jvm。
ZooKeeper有一个非常有前途的替代方法,称为Cored团队编写的etcd(github.com/coreos/etcd)。与Doozerd不同,etcd正在积极开发中。
刚发现Accord(C)和OpenReplica / ConCoord(Python)可能是有趣的解决方案
[编辑] Vagrant和Packer声望很高的Hashicorp团队正在烹饪“服务发现和编排的分散式解决方案”,称为Serf。
[EDIT2] Hashicorp再次罢工!他们刚刚发布了在Serf之上构建的Consul。主题:“用于服务发现和配置的解决方案,完全分布式,高可用性,可扩展到跨多个数据中心的数千个节点和服务”。
是的,还有Doozerd(https://github.com/ha/doozerd)。好好看一下,它是Heroku开发的一种不错的单一二进制分布式协调服务。具有Java / python / ruby / node的绑定/库。非常容易上手并玩转。
我的研究小组的OpenReplica是针对数据中心的高度可用的FOSS协调服务。它可用于实施锁定,故障转移,领导者选举,小组成员资格和其他协调服务。它与ZooKeeper的区别在两个关键方面:
它使用面向对象的API。这使得编写协调服务变得更加容易。OpenReplica的同步代码与教科书完全相同。无需像ZooKeeper和Chubby中那样掌握文件和基于上行的API。
它允许对副本集进行动态成员资格更新。不需要静态配置文件。该系统已集成到DNS(权威,OpenReplica的从属服务器或Amazon Route 53)中。
我们会积极支持该系统,如果您还有其他问题,请随时与我们联系。
github上有一个名为Noah的项目,看起来很有趣,它说它“宽松地基于Apache ZooKeeper” https://github.com/lusis/Noah,其中REST支持是关键功能(ZK将此作为contrib / option而不是比内置的)。
有多种工具可针对不同的工程权衡进行优化。
其他的有些有趣,但是通常没有得到证实。如果打算用于生产用途,请不要出错。
我发现了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 ”
好处是,您将获得一个非常简单的集群管理器,并且可以将其与您喜欢的配置,部署或持续集成工具结合在一起。