gpt4 book ai didi

java - 使用 Actors/AKKA 的面向 session 的异步架构

转载 作者:行者123 更新时间:2023-11-29 05:31:30 28 4
gpt4 key购买 nike

我们正在构建的应用程序有一个非常简单的概念:它接收来自数据库的传入事件,并且对于每个事件,它通过显示菜单打开与客户端(在事件中)的交互式 session 。根据客户的 react ,我们进入下一个状态或采取一些具体行动(例如转移资金)。

session 是相互独立的。例如,假设我们从数据库中得到两个事件,表明客户 A 和 B 的账户余额已达到零状态。为了响应这个事件,我们建立了两个连接到 A 和 B 显示一个如下所示的菜单:

 Please select an option:
1. Get $5
2. Get $10
3. Ignore

对于选项 1 和 2,我们要求以第二个菜单的形式进行确认。

 Are you sure?
1. yes
2. no

在这种情况下,我们将有两个 session 。客户 A 可能会选择选项 1(1. 获得 5 美元),而客户 B 选择选项 3 [在第一个菜单中]。对于客户端 A,如果响应为 1,我们将显示第二个菜单(上图)。是的,我们将采取一些具体的行动,例如转移资金和结束 session 。

所有客户端通信均由第 3 方系统完成,该系统采用 JSON 格式(包括客户端地址、菜单文本)并将响应返回给我们。它负责实际维护在线 session ,而我们只需要进行响应关联和处理 session 状态。

我们预计将同时处理 50,000 个此类 session

之前,我们使用 SEDA 模型用 Java 设计系统。听说过 Actors,我们愿意检查它们并快速编写一个 PoC 项目(Java/AKKA)。我的问题是:

  1. 有没有人有构建此类应用程序的经验? 50,000 个并发 session 对 AKKA 来说是否太多了? (注意,我们只是在等待响应。当响应到来时,我们根据答案跳转到下一阶段,所以应该可以)。

  2. 哪种架构风格/范式最适合 AKKA 中的这个问题?有没有解决这类问题的框架?

最佳答案

这实际上是 Akka 集群的一个相当简单的用例。 50K session 表示为每个 Actor 实例的负载不是很高。使用集群的原因只是为了容错。

该架构背后的想法是拥有一个 Web 层来处理与 session 相对应的 RESTful 请求。这些请求将被发送到 Akka 集群并通过 session ID 路由到适当的 session Actor,或者创建一个新的。 session 完成后,您将停止与其关联的参与者。

请注意, session 参与者应通过调度程序向自己发送超时消息。处理完一条新消息后,Actor 应该通过 ActorSystem 调度程序为自己安排一条消息,持续 15 分钟(或任何超时时间)。当收到新的 session 消息时,应该取消该计划的任务,处理新的更新,然后安排新的超时。这里有一个合理的竞争条件,因为超时消息可能在 session 消息之后的 session 参与者的邮箱队列中,但是如果您的超时消息包含它被安排的时间(15 分钟前),您可以检查并忽略它并重新安排另一个(就像避免内存泄漏的安全机制一样)。如果时间大于 15 分钟前,则停止 actor。

要了解如何将工作分配给 session 参与者,请参阅 Typesafe 激活器中的“使用 Akka 和 Java 的分布式工作人员”模板。您将拥有一个完全运行的集群 Akka 应用程序,您可以对其进行定制以执行我上面描述的 session 管理。然后您可以导出项目并在 Eclipse/IntelliJ/Sublime/TextMate/等中处理它。要下载 Activator,请参阅 here .

关于java - 使用 Actors/AKKA 的面向 session 的异步架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20938075/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com