我刚刚遇到了Zookeeper,我想知道Zookeeper和一个可用的、一致的、持久的、分布式的、复制的数据库服务,比如亚马逊DynamoDB,甚至亚马逊S3(存储服务)有什么不同。配置管理、分布式同步等关键功能可以通过像亚马逊DynamoDB这样的数据库产品很好地实现。我知道Zookeeper和像DynamoDB这样的产品在架构上会有所不同。但是,从功能的角度来看,这两者之间有什么主要区别吗?有什么理由使用Zookeeper而不是其他的吗?
发布于 2019-10-22 10:19:04
简而言之,Zookeeper如果是一个分布式内核,它提供了低级原语,您可以使用这些原语进一步构建复杂的分布式系统。
1) Zookeeper提供有序消息,分布式锁非常需要有序消息(一般是分布式系统)。Dynamo db不提供每个客户端的有序消息保证。
2) Sequential znode提供了原子方式,以有序的方式添加具有公共前缀字符串的元素。与临时节点和有序通知相结合,它们可以让您创建通知。
假设你想锁定一个锁来执行一项工作,每台机器都可以写Create (‘/ customerABCD /customerABCD-’,Sequential)如果有两个节点在Create上面执行,那么形成的znode将是/customerABCD/customerABCD-1& /customerABCD/ lock -2。
要决定谁是领导者,您可以简单地查询Get('/customerABCD')键,然后确定键值最小的领导者。现在假设创建lock-1的节点死了,lock-2将收到来自zookeeper的通知消息,然后它可以声明customerABCD的所有权。有关此类分布式任务的更多示例,请参阅https://learning.oreilly.com/library/view/zookeeper/9781449361297/ch02.html
在创建了/customerABCD/ lock -2的Dynamo机器中,znode必须进行轮询才能知道锁是否存在。这是获取锁的慢方法,因为它需要基于超时的轮询,这是低效的,因为还需要计算来执行轮询,并且还增加了系统的轮询负载。
3)当znode被添加/删除时,zxid版本会递增。这构成了版本控制的基础,分布式系统可以使用它来实现带有隔离的锁,如link https://martin.kleppmann.com/2016/02/08/how-to-do-distributed-locking.html中的“使用隔离使锁安全”中所述。
同样,Dynamo似乎没有类似的自动递增父序列号工具。
发布于 2018-05-21 17:16:10
首先,让我告诉你一些你可能已经知道的关于zookeeper的基础知识:
Zookeeper不是一个database
现在,来回答你的问题:
Zookeeper用于为具有主从架构的服务提供独占锁,并且您只需要一个服务处于活动状态并执行所有读/写操作。
Zookeeper也可以用于会话。就像为会话为每个用户生成一个临时节点一样,当用户注销时,该节点将自动从zookeeper内存中删除。
Zookeeper是可靠的和容错的,并执行内存中的操作,这使得它更快。
因此,这就是为什么zookeeper被认为高于任何其他提供协调的服务的主要原因。
https://stackoverflow.com/questions/50438214
复制相似问题