使用 web-app 进行分布式计算的 Akka 架构
Akka architecture for distributed computation using web-app
我正在开发一个接受用户输入并使用集群对输入进行并行计算的网络应用程序。 Akka-cluster 用于促进这一点。
我目前正在使用 Play Framework 来管理我的网络应用程序中的 HTTP 请求。由此,我正在考虑将用户输入提交给前端 Akka actor,该 actor 将请求转发给多个后端 actor 以并行计算中间结果。然后我有另一个参与者在最终将最终结果返回给用户之前聚合中间结果。每次计算可能需要几分钟到一个小时。
(我从 this example 得到了使用前端和后端 actor 的想法)
我担心的是,前端演员必须接受每个用户的请求并给出工作进度报告。我的第一个想法是使用 'ask' 模式,但我认为这不是正确的方法,因为这意味着一次只能有一个用户作为服务器。所以我目前正在考虑使用异步 'tell' 来服务请求。
我的问题是:这是解决问题的正确方法吗?如果我使用 'tell',那么在作业完成时如何通知用户?另外,由于我使用的是 Play Framework,是否可以将前端 actor 与 Play 集成以显示网页更新?
不确定 blocking 'ask' pattern
是什么意思。如果您谈论 ?
或 ask
方法来等待 actor 的响应,它基于异步和非阻塞的 Futures,因此在 Play 中使用它非常安全,这确实是一种常见的方法。
另一方面,如果响应需要很长时间,比方说超过 20 秒,我不鼓励这样做,以免保持许多打开的连接并改善用户体验。此外,Akka 鼓励使用 tell
,所以我会选择服务器端推送技术(websockets?),甚至电子邮件消息,如果它可以更长的话。
我正在开发一个接受用户输入并使用集群对输入进行并行计算的网络应用程序。 Akka-cluster 用于促进这一点。
我目前正在使用 Play Framework 来管理我的网络应用程序中的 HTTP 请求。由此,我正在考虑将用户输入提交给前端 Akka actor,该 actor 将请求转发给多个后端 actor 以并行计算中间结果。然后我有另一个参与者在最终将最终结果返回给用户之前聚合中间结果。每次计算可能需要几分钟到一个小时。 (我从 this example 得到了使用前端和后端 actor 的想法)
我担心的是,前端演员必须接受每个用户的请求并给出工作进度报告。我的第一个想法是使用 'ask' 模式,但我认为这不是正确的方法,因为这意味着一次只能有一个用户作为服务器。所以我目前正在考虑使用异步 'tell' 来服务请求。
我的问题是:这是解决问题的正确方法吗?如果我使用 'tell',那么在作业完成时如何通知用户?另外,由于我使用的是 Play Framework,是否可以将前端 actor 与 Play 集成以显示网页更新?
不确定 blocking 'ask' pattern
是什么意思。如果您谈论 ?
或 ask
方法来等待 actor 的响应,它基于异步和非阻塞的 Futures,因此在 Play 中使用它非常安全,这确实是一种常见的方法。
另一方面,如果响应需要很长时间,比方说超过 20 秒,我不鼓励这样做,以免保持许多打开的连接并改善用户体验。此外,Akka 鼓励使用 tell
,所以我会选择服务器端推送技术(websockets?),甚至电子邮件消息,如果它可以更长的话。