6

我正在编写一个分布式应用程序,涉及多个前端节点,除非它们是列表的一部分,否则这些节点需要拒绝用户执行操作。

现在我们有超过 4 个节点,但只有一个运行 DB2 的数据库服务器,该服务器经常停机进行维护。

现在我们正在轮询数据库以更新内存中的列表,以便如果从列表中删除用户,则更改会反映到所有 4 个节点。但是,如果在数据库关闭时重新启动其中一个节点,我们最终会得到一个空列表,该列表将拒绝所有我们不想要的用户请求。即使数据库已关闭,我们也可以接受来自用户的请求,因为我们将它们缓冲在消息队列中,但如果需要拒绝它们,我们希望立即拒绝它们!

在我们的 4 个节点上运行一个 Zookeeper 实例并将用户权限存储在 Zookeeper 中是否有意义。因此,阅读应该是快速的,并且数据是高度可用和一致的。我们不再需要进行轮询,即使我们重新启动数据库,节点也能够从 zookeeper 获取配置!

4

1 回答 1

10

是的,按照您描述问题的方式,Zookeeper 应该完全符合要求。虽然有几个问题需要回答:

  • 我们在谈论多少数据?Zookeeper 将数据持久化到磁盘,但仅当数据适合 RAM 时才有效。

  • 数据多久更改一次?Zookeeper 将确保超过一半的节点收到更新,因此写入并不完全有效。

  • 一次应该读取多少数据?Zookeeper 的响应大小限制为 1MB,但他们的建议是将数据保持在远低于该限制的范围内。请注意,如果您列出具有大量子节点的节点,也可以达到此限制,因为子节点名称计为数据。

考虑到数据是从 RAM 提供的,读取它应该不是什么大问题,但是您始终可以缓存结果,并在适当的节点上设置监视以使本地数据无效。

于 2011-10-24T21:17:01.677 回答