使用 Zookeeper 而不仅仅是数据库来管理分布式系统的目的是什么?

2023-12-26

我正在学习Zookeeper,到目前为止我不明白将其用于数据库无法解决的分布式系统的目的。

我读过的用例是通过让 Zookeeper 客户端读/写 Zookeeper 服务器来为分布式系统实现锁、屏障等。不能通过读/写数据库来实现同样的目的?

例如,我的书描述了使用 Zookeeper 实现锁的方法是让想要获取锁的 Zookeeper 客户端创建一个ephemeral znode并在下面设置了一个顺序标志lock-znode。那么该锁就由其子 znode 具有最低序列号的客户端拥有。

书中所有其他 Zookeeper 示例都只是使用它来存储/检索值。

Zookeeper 与数据库/任何存储的唯一区别似乎是“观察者”概念。但这可以使用其他东西来构建。

我知道我对 Zookeeper 的简化看法是一个误解。那么有人可以告诉我 Zookeeper 真正提供了哪些数据库/自定义观察程序无法提供的功能吗?


难道不能通过读/写数据库来实现同样的目的吗?

从理论上讲,是的,这是可能的,但通常,将数据库用于要求苛刻的分布式协调用例并不是一个好主意。我见过使用关系数据库来管理分布式锁的微服务,其后果非常严重(例如数据库中存在数千个死锁),这反过来又导致 DBA 与开发人员关系不佳:-)

Zookeeper 具有一些关键特征,使其成为管理的良好候选者应用程序元数据

  • 通过添加新节点来水平扩展的可能性ensemble
  • 保证数据在一定时间内最终一致。如果客户愿意的话,可以以更高的成本获得严格的一致性(Zookeeper是CAP术语中的CP系统)
  • 顺序保证——保证所有客户端都能够按照数据写入的顺序读取数据

上述所有这些都可以通过数据库来实现,但需要应用程序客户端付出巨大的努力。还watches and 临时节点数据库可以通过使用触发器、超时等技术来实现。但它们通常被认为是低效的或反模式的。

关系数据库提供强大的事务保证,这通常是有代价的,但管理应用程序元数据通常不需要。因此,寻找更专业的解决方案(例如 Zookeeper 或 Chubby)是有意义的。

此外,Zookeeper 将其所有数据存储在内存中(这限制了其用例),从而实现高性能的读取。大多数数据库通常不是这种情况。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Zookeeper 而不仅仅是数据库来管理分布式系统的目的是什么? 的相关文章

随机推荐