使用Zookeeper存储用户权限是否有意义

时间:2011-10-24 19:52:42

标签: java distributed apache-zookeeper

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

现在我们有超过4个节点,但只有一个运行DB2的数据库服务器通常需要维护。

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

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

1 个答案:

答案 0 :(得分:10)

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

  • 我们谈论了多少数据? Zookeeper会将数据保存到磁盘,但仅当数据适合RAM时才有效。

  • 数据更改的频率是多少? Zookeeper将确保超过一半的节点收到更新,因此写入效果并不完全正确。

  • 应该一次读取多少数据? Zookeeper的响应大小限制为1MB,但他们建议将数据保持在该限制之下。请注意,如果要列出包含大量子节点的节点,也可以达到此限制,因为子项名称将计为数据。

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