【问题标题】:Akka clustering - force actors to stay on specific machinesAkka 集群 - 强制参与者停留在特定的机器上
【发布时间】:2013-06-16 07:49:05
【问题描述】:

我有一个 akka 应用程序,我将在许多机器上部署它。我希望这些应用程序中的每一个都使用分布式发布/订阅事件总线功能相互通信。

但是,如果我将系统设置为集群,那么我担心一个应用程序的参与者可能会在与他们启动的节点不同的节点上创建。

仅在启动它所属的应用程序的机器上创建参与者非常重要。

基本上,我不想要演员的弹性或集群,我只想要分布式发布/订阅。我可以看到像单例或角色这样的选项,这里提到了http://letitcrash.com/tagged/spotlight22,但我想知道推荐的方法是什么。

【问题讨论】:

    标签: akka akka-cluster


    【解决方案1】:

    目前 Akka 中没有可以移动你的 actor 的功能:要么以编程方式部署到特定机器,要么将部署放入配置文件中。否则它将根据需要在本地创建。

    (Akka 有朝一日可能会自动进行 Actor 树分区,但目前还没有具体说明。)

    【讨论】:

    • 嗯,但是单例管理器将在其他节点上启动参与者。即将发布的分区是否以类似的方式工作。它看起来像在文档中一样。尽管我可能错了,但我需要重新阅读它。否则,聚类的意义何在?
    • @Nick 请参阅此示例,该示例展示了如何确保仅在一台机器上创建特定的演员 stackoverflow.com/questions/24213196/…
    【解决方案2】:

    我认为这不是使用弹性集群的最佳方式。但我们也考虑了同样的问题,发现通过实体 id 的散列(如数据库分片)将参与者分散到节点上可能很有用。例如,在每个节点上,我们创建一个NodeRouterActor,将消息代理到多个WorkerActors。当我们向NodeRouterActor 发送消息时,它通过键id % nodeCount 在哈希表中查找它来选择端点节点,然后端点NodeRouterActor 代理消息到控制实体的特定WorkerActor

    【讨论】:

      猜你喜欢
      • 2011-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-15
      • 1970-01-01
      • 2019-04-13
      相关资源
      最近更新 更多