Zookeeper与In-memory-data-grid对比Redis

VB_*_*VB_ 14 distributed-computing redis hazelcast apache-zookeeper

我在多个资源中找到了不同的zookeeper定义.也许其中一些是脱离背景,但看看它们:

  1. Zookeeper使用的典型示例是分布式内存计算......

  2. ZooKeeper是一个开源Apache™项目,提供集中式基础架构和服务,支持跨集群进行同步.

  3. Apache ZooKeeper是一个开源文件应用程序接口(API),它允许大型系统中的分布式进程相互同步,以便所有发出请求的客户端都能获得一致的数据.

我曾与Redis和Hazelcast合作,通过与Zookeeper进行比较,我更容易理解Zookeeper.

你能比较Zookeeper与内存数据网格和Redis吗?

  1. 如果分布式内存计算,zookeeper与内存数据网格有何不同?
  2. 如果跨群集同步,那么它与所有其他内存存储有何不同?相同的内存数据网格也提供了群集范围的锁.Redis也有某种交易.
  3. 如果只是关于内存中的一致数据,那么还有其他选择.Imdg让你实现同样的目标,不是吗?

Rob*_*ser 36

https://zookeeper.apache.org/doc/current/zookeeperOver.html

默认情况下,Zookeeper会将所有数据复制到每个节点,并允许客户端监视数据以进行更改.变更会很快(在有限的时间内)发送给客户.您还可以创建"临时节点",如果客户端断开连接,则会在指定时间内删除它们.ZooKeeper针对读取进行了高度优化,而写入速度非常慢(因为一旦写入,它们通常会被发送到每个客户端).最后,Zookeeper中"文件"(znode)的最大大小为1MB,但通常它们是单个字符串.

总而言之,这意味着zookeeper并不意味着存储大量数据,而且绝对不是缓存.相反,它用于管理心跳/知道哪些服务器在线,存储/更新配置,以及可能的消息传递(尽管如果你有大量的消息或高吞吐量需求,像RabbitMQ这样的任务会更好).

基本上,ZooKeeper(以及基于它构建的Curator)有助于处理集群的机制 - 心跳,分发更新/配置,分布式锁等.

它与Redis并不具有可比性,但针对具体问题......

  1. 它不支持任何计算,并且对于大多数数据集,将无法以任何性能存储数据.

  2. 它被复制到集群中的所有节点(没有像Redis集群那样可以分布数据).所有消息都以原子方式完整处理并排序,因此没有真正的事务.可以使用它来为您的服务实现群集范围的锁(实际上它非常好),并且在znode本身上有许多锁定原语来控制哪些节点访问它们.

  3. 当然,但ZooKeeper填补了一席之地.它是一种使分布式应用程序在多个实例中运行良好的工具,而不是用于存储/共享大量数据.与为此目的使用IMDG相比,Zookeeper将更快,以可预测的方式管理心跳和同步(有许多API使这部分变得简单),并且具有"推送"范例而不是"拉",因此节点是很快就通知了变化.

来自链接问题的引文......

Zookeeper使用的典型示例是分布式内存计算

......是IMO,有点误导.您可以使用它来编排计算,而不是提供数据.例如,假设您必须处理表的1-100行.您可以放置​​10个ZK节点,名称如"1-10","11-20","21-30"等.客户端应用程序将自动通知ZK此更改,并且第一个将抓住" 1-10"并设置一个短暂的节点clients/192.168.77.66/processing/rows_1_10

下一个应用程序会看到这个,然后去下一个要处理的组.要计算的实际数据将存储在别处(即Redis,SQL数据库等).如果节点在计算的中途失败,另一个节点可以看到(30-60秒后)并再次获取作业.

我会说ZooKeeper的典型例子是领导者选举.假设你有3个节点 - 一个是主节点,另外两个是从节点.如果主站发生故障,从站节点必须成为新的领导者.这种类型的东西非常适合ZK.

  • 这是Web上最好的Zookeeper定义之一. (5认同)