【问题标题】:Playframework Webapp with Akka Cluster backend - architecture带有 Akka Cluster 后端的 Playframework Webapp - 架构
【发布时间】:2014-12-23 20:02:48
【问题描述】:

我还没有遇到很多将 Play 与 akka-cluster 后端和像 Cassandra 这样的 NoSql 存储相结合的示例,因此我在实施这样的系统时存在一些不确定性。

为了具体起见,而不是抽象地描述设置,我提出了一个示例,它代表了 play 和 akka 可以大放异彩的一整类问题:

考虑: 一个数据库支持的(让我们使用 Cassandra 集群)公路旅行应用程序,当您旅行时,它会推荐兴趣点。用户有帐户、输入设置和一些偏好。有一个旅行仪表板视图,包括旅行历史等。计划是使用 Play 和 Angular 的 web 应用程序,大多数 web 应用程序是从数据库中提取用户数据和 POI 数据并模板化、更新视图的简单案例。然而,计算和排序区域中 POI 的算法使 akka-cluster 和 actor 模型成为一个引人注目的解决方案。它需要用户数据(每天更新)和 POI 数据(按位置更新)作为输入,然后根据该数据运行算法。

总结: - 为请求提供服务的播放前端,并调用由数据库支持的服务来满足请求(获取用户数据、模板等) - 一个 akka 集群后端,它从前端(或客户端)获取请求,根据用户数据(即偏好、年龄、历史记录)对区域中的兴趣点进行排名。这也需要通过参与者访问数据库。

讨论的一部分可能必然包括对所选数据存储的最佳选择,但这里是高级解决方案:

  1. 将所有数据访问职责委托给 akka 集群,Play 仅将“获取一些数据”请求以及“基于数据 x、y 和 z 进行一些计算”请求转发到后端。这消除了多租户混淆

  2. 保留所有基本请求,在播放端用数据存储数据填充模板,并仅将集群用于 cpu 密集型计算。 play frontend 转发计算请求。这意味着两者都可以访问 cassandra 集群(可怕吗?)

  3. Play 应用程序只做计算,Akka-http 为客户端公开了计算 Api(角度,两个微服务都可以访问同一个 cassandra 集群

  4. 使用 Akka-http 和 angular 消除游戏并使其成为休息服务

抱歉,这个问题太高级了。有什么想法吗?

【问题讨论】:

    标签: architecture playframework typesafe akka-cluster


    【解决方案1】:

    正如您所说,这是一个高级别的问题,但我认为您走在正确的轨道上,即您正在考虑不同的选择。另一件有用的事情是考虑每个选项的权衡

    更具体地说,我建议以下内容。基本上为架构中的每一层(或环)分配职责。关键思想是您应该能够独立部署和扩展每一层。

    1. 将所有数据访问和计算分配给 Akka。这将允许您的 Akka 集群独立扩展。这也意味着您的用户界面层对您的数据存储一无所知。假设明天你从 Cassandra 迁移到 HBase,你的前端将产生最小的影响。

    2. 将所有与 HTTP 和用户界面相关的内容分配给 Play。确保您没有在 Play 中保留任何状态。将所有状态推送到 Akka 或您的数据库。这将允许您水平缩放播放层。

    3. 使用 Spray REST 服务为您的 Akka 集群提供数据端点。您可以在两者之间添加一个缓存层以加快访问速度。

    我不建议取消 Play,因为它提供的不仅仅是 REST 端点。

    最后,根据我的经验,这不是“正确”的架构。它确实归结为您的特定需求和要求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-31
      • 1970-01-01
      • 1970-01-01
      • 2015-09-15
      • 1970-01-01
      • 1970-01-01
      • 2011-11-29
      相关资源
      最近更新 更多