更新akka群集入口点数据

时间:2013-09-18 01:55:55

标签: scala concurrency cluster-computing akka spray

我正在开发一个利用Akka集群的系统。我面临的困境是如何更新入口点数据。我有以下结构:

  

[负载均衡器] - > [入口点](喷雾动力) - > [工人]

在入口点我需要保留一个允许访问数据的用户列表,换句话说我需要保留一个列表,比如电子邮件。但是,在授权或删除新用户时,必须经常更新此列表。

解决这个问题的最佳方法是什么?我正在考虑将这个电子邮件/ ID容器切换到可变的容器,但问题是系统是否会在事件处理中锁定这些数据以及它如何影响性能。

任何建议都会很棒!

更新: - 通过定期喷洒休息请求分配新用户。从授权用于此类系统的外部请求将使用安全密钥和要添加到列表的用户ID进行请求 - 有多个节点,每个节点都有喷涂进入点 - 速度无关紧要,只要几秒钟 - 订单没关系。

系统只需在负载均衡器上获取一条消息,即它必须再向用户列表添加一个ID。由于负载平衡器,它将最终位于其中一个入口点喷射节点上。它必须更新自己的ID列表,并广泛投射到应用程序中的所有其他入口点(基本上都来自负载均衡器列表)所需的更新。

希望这能更好地澄清。

1 个答案:

答案 0 :(得分:0)

好的,这是初稿。

每个喷涂端点必须与访问列表具有相同的“视图”,否则您的请求可能会被拒绝,具体取决于它们与哪个端点平衡。

因此,您需要具有官方访问列表的指示对象,以便您可以从崩溃中恢复和/或创建具有最新访问列表的新喷射节点。

您可以在akka群集中创建一个singleton actor,负责从持久性商店中读取和更新访问列表。

然后使用distributed akka pub/sub extension,您可以创建一个分布式消息总线,其中:

  • 例如,所有喷射端点和单身演员都订阅了频道“访问更新”。这样,所有演员都可以将他们的访问列表保持“同步”。

  • 当喷涂端点收到添加或删除用户/访问的请求时,它会在通道“访问更新”上发送通知。每个喷涂端点都可以更新其访问列表,因此单例更新商店中的持久列表。

您怎么看?