Scala 基于web应用的分布式计算Akka体系结构

Scala 基于web应用的分布式计算Akka体系结构,scala,playframework,architecture,akka,actor,Scala,Playframework,Architecture,Akka,Actor,我正在开发一个web应用程序,它接受用户输入,并使用集群对输入进行并行计算。Akka集群用于促进这一点 我目前正在使用Play Framework管理web应用程序中的HTTP请求。因此,我考虑将用户输入提交给前端Akka参与者,该参与者将请求转发给多个后端参与者,以并行计算中间结果。然后我有另一个参与者,在最终将最终结果返回给用户之前聚合中间结果。每次计算可能需要几分钟到一小时。 (我从中得到了使用前端和后端actor的想法) 我担心的是,前端参与者必须接受每个用户的请求,并给出作业的进度报告

我正在开发一个web应用程序,它接受用户输入,并使用集群对输入进行并行计算。Akka集群用于促进这一点

我目前正在使用Play Framework管理web应用程序中的HTTP请求。因此,我考虑将用户输入提交给前端Akka参与者,该参与者将请求转发给多个后端参与者,以并行计算中间结果。然后我有另一个参与者,在最终将最终结果返回给用户之前聚合中间结果。每次计算可能需要几分钟到一小时。 (我从中得到了使用前端和后端actor的想法)

我担心的是,前端参与者必须接受每个用户的请求,并给出作业的进度报告。我的第一个想法是使用“ask”模式,但我认为这不是正确的方法,因为这意味着一次只能有一个用户作为服务器。因此,我目前正在考虑使用异步“tell”来服务请求


我的问题是:这是解决问题的正确方法吗?如果我使用的是“tell”,那么在作业完成时如何通知用户?另外,由于我使用的是Play Framework,是否可以将前端参与者与Play集成,以显示网页的更新?

不确定
阻止“询问”模式是什么意思。如果您谈论
要求
方法等待参与者的响应,它基于异步和非阻塞的未来,因此在游戏中使用非常安全,这确实是一种常见的方法


另一方面,如果响应需要很长时间,比如说超过20秒,我不建议这样做,因为我不希望保持很多开放的连接并改善用户体验。Akka还鼓励使用
tell
,因此我会选择服务器端推送技术(websockets?)或电子邮件,如果可能更长的话。

是的,我的意思是“?”方法。Websocket绝对是一种选择,我目前正在阅读关于它的文章。