动物园管理员替代品?(集群协调服务)



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

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

领事(对我来说)是两全其美的。它是一个写在农奴之上的固执己见的服务发现系统,使用筏进行集群共识,八卦进行通信。它使用记录良好的 REST API 公开发现/注册终结点,还允许您使用 DNS SRV 记录发现服务,并使用配置注册服务(即,以便您可以注册无法与客户端集成的数据库或应用程序,或者如果您只想将服务发现与应用分离)

我写了一篇关于 consul 的博客文章,您可以在其中了解更多信息并浏览我的"试用"演示

我还与 etcd 和 docker 讨论了服务发现,如果你想了解更多关于自定义代码可能是什么样子的信息。

最后一件事!etcd和consul是用go编写的,所以维护它们比像Zookeeper这样的Java解决方案要容易得多。您所需要的只是领事/etcd二进制文件。没有依赖关系,没有链接库,没有JVM。

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

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

[编辑] Hashicorp团队,以Vagrant和Packer而闻名,正在烹饪"一种用于服务发现和编排的分散解决方案",称为Serf。

[编辑2] 桥队再次出击!他们刚刚释放了建立在农奴之上的执政官。宣传:"用于服务发现和配置的解决方案,完全分布式,高度可用,可扩展到跨多个数据中心的数千个节点和服务"。

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

看看农奴。 这里有一个与动物园管理员的比较。

我的研究小组的OpenReplica是数据中心的高可用性FOSS协调服务。它可用于实现锁定、故障转移、领导者选举、组成员身份和其他协调服务。它与ZooKeeper在两个关键方面有所不同:

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

  • 它启用对副本集的动态成员身份更新。不需要静态配置文件。该系统集成到 DNS(权威、OpenCopy 的从属或 Amazon Route 53)中。

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

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

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

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

其他的有些有趣,但通常未经证实。 如果用于生产用途,请不要误会。

我发现了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"

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

我知道

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

看起来Corosync也像ZooKeeper。

相关内容

  • 没有找到相关文章

最新更新