使用Akka

时间:2017-03-05 21:33:55

标签: scala akka

假设我们有大量持久的Person actor,每个actor都使用identity和name参数构造。在群集中分发这些角色的最佳方式是:

  • 通过策略X(循环,一致哈希等)将新演员指定为节点
  • “coordinator”actor包含从identity到ActorRef
  • 的映射
  • 一个或多个节点可能会失败,受影响的actor会在其他节点上恢复
  • 没有SPF

我考虑过以下问题,似乎无法解决问题:

  • 群集分片;所有参与者都是平等初始化并由协调员创建
  • 群集感知路由;组或池是固定大小的,无法动态修改

1 个答案:

答案 0 :(得分:0)

听起来你几乎正在描述Akka群集分片,并且没有足够的信息来查看它不适合的原因。

处理这样一个设计问题的常见解决方案是拥有一个未初始化的分片实体状态,它只接受一个包含所需值的初始化命令(如CreateUser(id, name)之类的东西),当它得到它时切换到正常的"行为。

另一种选择可能是引入一个不会启动实际actor的中间actor,直到它无法更改Person actor的设计时提取名称值。

OFC。您也可以直接下载到Akka集群API并构建与您的用例完全匹配的东西,但是处理集群拓扑更改(添加,删除节点等)的重新分配对于实现正确而言并非易事。

我认为您也会意识到,如果没有将分片解决方案与您的业务逻辑紧密结合,那么实现对您的实体完全无创的工具非常困难。