Zookeeper与托管复制数据库服务之间的区别

时间:2018-05-20 18:40:23

标签: amazon-web-services amazon-dynamodb apache-zookeeper distributed-system

我刚遇到Zookeeper,我想知道Zookeeper与可用,一致,持久,分布式,复制的数据库服务(如AWS DynamoDB甚至AWS S3(存储服务))之间的区别是什么。使用AWS DynamoDB等数据库产品可以很好地实现配置管理,分布式同步等关键功能。据我所知,Zookeeper与DynamoDB等产品之间存在架构差异。但是,从功能的角度来看,两者之间是否存在重大差异? 是否有任何理由使用Zookeeper而不是另一个。

2 个答案:

答案 0 :(得分:0)

首先让我告诉你一些关于zookeeper的基础知识,你可能已经知道了:

  
      
  • Zookeeper不是数据库
  •   
  • Zookeeper是一项协调服务
  •   
  • Zookeeper具有高可用性,能够管理群集中的4000多个节点。
  •   
  • Zookeeper将所有信息存储在znodes中,每个Znode最大可达1 mb。
  •   
  • Zookeeper提供3种类型的znode:短暂的,顺序的和持久的
  •   

现在,回答你的问题:

Zookeeper用于为具有主从架构的服务提供独占锁,并且您只希望一个服务处于活动状态并执行所有读/写操作。

Zookeeper也可以用于会话。就像每个用户为会话生成一个临时节点一样,当用户注销时,该节点将自动从zookeeper内存中删除。

Zookeeper可靠且容错,并执行内存中操作,这使得它更快。

因此,动物园管理员被认为是提供协调的任何其他服务的主要原因。

答案 1 :(得分:0)

如果是分布式内核,Zookeeper简而言之,它提供了较低的原语,您可以使用它们来进一步构建复杂的分布式系统。

1)Zookeeper提供了有序消息,这对于分布式锁(通常是分布式系统)非常需要。 Dynamo db不为每个客户保证提供有序消息。

2)顺序znode提供了一种原子方式,可以使用公共前缀字符串以有序方式添加元素。结合临时节点和有序通知,它们使您可以创建通知。

让我们说您想锁定一个客户ABCD来执行工作,每台机器都可以写 创建('/ customerABCD / lock-',顺序) 如果在创建上方执行2个节点,则形成的znodes将为 / customerABCD / lock-1和/ customerABCD / lock-2。

要确定谁是领导者,您可以简单地查询 获取('/ customerABCD')键,然后决定键值最小的领导者。现在,假设创建了锁1的Node死亡,然后锁2将从zookeeper获得通知消息,然后可以声明对customerABCD的所有权。 https://learning.oreilly.com/library/view/zookeeper/9781449361297/ch02.html

中提供了此类分布式任务的更多示例

在创建/ customerABCD / lock-2 znode的Dynamo机器中,必须轮询以了解锁是否存在。这种获取锁的方法很慢,因为它需要基于超时的轮询,但是效率低下,因为还需要计算才能执行轮询,并且还会给系统增加轮询负载。

3)添加/删除znodes时,zxid版本将增加。这形成了版本控制的基础,分布式系统可使用该版本控制来实现带防护的锁定,如链接https://martin.kleppmann.com/2016/02/08/how-to-do-distributed-locking.html

中的“使带有防护的锁安全”中所述。

重新生成Dynamo似乎没有类似的自动递增父序列号功能。