动物园pipe理员的真实世界使用

最近我一直在看Zookeeper ,想知道现在是否有人使用它,以及他们是如何专门使用它来存储的。

最常见的用例是configuration信息,但是您要存储什么样的数据和多less数据?

DOSGi的Apache CXF实现为其服务注册库使用zookeeper。 单独的容器有一个分布式软件(dsw)包,用于监听所有服务事件,以及何时服务状态发生变化,具有指示分布的属性。 dsw与发现包协商,在参考实现的情况下,它使用zookeeper将服务存储为临时节点。 其他实例将查找其本地系统上节点结构和注册代理的更改。 最终的结果是你可以编写普通的OSGi,并以透明的分布结束。

HBase使用Zookeeper协调活动,其“头节点”在当前版本之前负责。 转向使用Zookeeper意味着中央控制不再是一个单一的失败点。

动物园pipe理员是非常灵活的; 下面是使用它来构build分布式并发队列的一个例子:

http://blog.cloudera.com/blog/2009/05/building-a-distributed-concurrent-queue-with-apache-zookeeper/

您当然也可以在分布式系统中使用它来创build资源locking等。

老问题,但自从这个页面出现在谷歌search动物园pipe理员用例首先,我觉得这是最好给一个更新的列表

  1. 维基百科
  2. zookeeper wiki
  3. 真正的用户

由ZooKeeper支持的免费软件项目:

  • AdroitLogic UltraESB
  • 阿卡
  • Eclipse通信框架
  • 日食Gyrex
  • GoldenOrb
  • 且具
  • 凯塔
  • KeptCollections
  • Mesos
  • Neo4j的
  • 诺伯特
  • Talend ESB
  • redis_failover

Apache项目Powered by ZooKeeper:

  • Apache Accumulo
  • Apache BookKeeper
  • Apache CXF DOSGi
  • Apache Flume
  • Apache Hadoop MapReduce
  • Apache HBase
  • Apache Hedwig
  • 阿帕奇卡夫卡
  • Apache S4
  • Apache Solr

来源: https //cwiki.apache.org/confluence/display/ZOOKEEPER/PoweredBy

诺伯特是一个可扩展的生产系统的好例子。 一般来说,它将Netty,Protocol Buffers和Zookeeper集成到一个运行集群服务的轻量级框架中。 协议缓冲区用于指定您的服务API,Netty实现传输层抽象,Zookeeper本质上是一个容错发现服务。

每次启动服务实例时,Norbert都将其注册为特定服务types的可用实例。 从实施的angular度来看,它创build了两个Zookeeper树:

  • “/ ServiceName / members”列出所有已知的服务实例
  • “/ ServiceName / available”列出当前可用的服务实例

每个节点最重要的属性是用于连接到相应服务实例的url。 它使客户端负载平衡 – 一个诺伯特客户端find一个给定的服务名称的url列表,并尝试连接到其中的一个是一些命令(例如循环或随机)。

Solr也正在整合ZooKeeper 。 在这里你可以看到他们正在使用dynamicconfiguration,分片,SPOF消除(主/从选举),重新平衡等。

有一篇很好的文章ZooKeeper -关于ZooKeeper 的协调之王 。

  • Storm被许多公司所使用 (Twitter和Groupon是其中两个最为人熟知的公司)并依靠Zookeeper。
  • 卡夫卡被Linkedin使用,依靠Zookeeper。

Storm使用Zookeeper来存储所有状态,以便它可以从其任何分布式组件服务中断中恢复。

这允许组件服务是无状态的,并且在需要configuration数据时简单地下载或与Zookeeper服务器同步。 如果你曾经不得不恢复生产服务器,你会知道这是多么令人头疼!

卡夫卡队列消费者可以使用Zookeeper来存储队列消耗的信息(高水位标记)。

除了configuration之外,Zookeeper被用于许多事情。 这里是使用zookeeper实现分布式基元的官方列表。

http://zookeeper.apache.org/doc/trunk/recipes.html

在我的情况下,我们将configuration文件存储在zookeeper集合中以用于集群使用。 我们正在使用领导者 – >追随者模式。 所以当一个动物园pipe理员下来,我们切换到另一个(复制模式)

我不知道如何使用它的具体细节,但我知道最新版本的HBase (一个开源的BigTable实现)使用ZooKeeper。

Neo4j使用Zookeeper他们的高可用性企业服务器! http://docs.neo4j.org/chunked/milestone/ha.html

datomic使用apache zookeeper来pipe理基于riak的数据存储。

由于Riak目前只支持最终的一致性,所以在Riak上运行的Datomic系统也使用Apache ZooKeeper这个高度可用的协调服务。 Datomic使用ZooKeeper进行交易者故障转移协调,以及每个数据库需要用CAS更新的less数密钥。 来源: http : //blog.datomic.com/2012/11/riak-and-couchbase-support.html

这里有一些关于HBase如何使用ZooKeeper的细节 ,包括他们打算如何使用它的信息。 通常他们通过使用ZooKeeper实现的Leaderselect来消除区域服务器上的SPOF。

Zookeeper不用于存储数据,它只是用于存储节点。 它用来检查客户端是否可用。