Akka 如何管理阿克卡演员';分布式系统中的路径?

Akka 如何管理阿克卡演员';分布式系统中的路径?,akka,Akka,假设我有以下两个演员 贮藏 产品 每个商店都可以有多个产品,我想在多台机器上的高流量上动态地将商店分为StoreA和StoreB。分店还将在StoreA和StoreB之间平均分配产品 我的问题是:在拆分后,知道将所有未来BuyProduct请求发送到(StoreA或StoreB)的最佳做法是什么?我问这个问题的原因是,如果收到购买ProductA的请求,我想将其发送到内存中已经有该产品状态的正确商店 解决方案:我能想到的唯一解决方案是存储每个产品的路径Map[productId:Long,sto

假设我有以下两个演员

  • 贮藏
  • 产品
  • 每个商店都可以有多个产品,我想在多台机器上的高流量上动态地将商店分为StoreA和StoreB。分店还将在StoreA和StoreB之间平均分配产品

    我的问题是:在拆分后,知道将所有未来
    BuyProduct
    请求发送到(StoreA或StoreB)的最佳做法是什么?我问这个问题的原因是,如果收到购买ProductA的请求,我想将其发送到内存中已经有该产品状态的正确商店

    解决方案:我能想到的唯一解决方案是存储每个产品的路径
    Map[productId:Long,storePath:String]
    在ProductsPactor中,每次创建新产品时,对于每个
    BuyProduct
    请求,我将查询ProductPathActor,它将返回正确的商店路径,然后将
    BuyProduct
    请求发送到该商店

    在Akka是否有其他管理方法,或者我的解决方案是否正确


    一个很好的方法是使用。从文档中:

    当您需要将参与者分布到多个应用程序时,集群分片非常有用 集群中的多个节点,并希望能够与它们交互 使用它们的逻辑标识符,但不必关心它们的 集群中的物理位置,也可能随时间而变化

    有一个Activator模板演示了它

    对于您的问题,
    StoreA
    StoreB
    的概念都是一个
    ShardRegion
    并将1:1映射到集群节点。
    shardocordinator
    管理这些节点之间的分布,并充当区域之间的管道

    对于这一部分,您的请求处理程序与
    ShardRegion
    对话,必要时与协调器一起路由消息。假设每个请求处理程序都有一个JVM本地
    ShardRegion
    ,但没有理由说它不能是远程参与者

    当节点数量发生变化时,
    shardocordinator
    需要移动将在称为“再平衡”的过程中关闭的碎片(即由该
    ShardRegion
    管理的实体集合)。在此期间,这些碎片中的实体不可用,但发送给这些实体的消息将被缓冲,直到它们再次可用。为此,“可用”意味着新的
    ShardRegion
    响应该实体的定向消息


    由您在新节点上恢复该实体的生命。这非常简单,但需要在过程中使用模式。这不是一件坏事,因为它可以更容易地提高web级性能。当使用的数据库类似于时,尤其如此。您将看到节点被“钝化”,这本质上只是缓存到磁盘,以便在请求时恢复它们,Akka Persistence与该钝化一起工作,在新的
    ShardRegion
    的控制下透明地恢复节点,本质上是一种“移动”。

    谢谢:)。我正在查看模板和文档,但我认为这需要一些时间来解决。但是集群分片会自动将商店分割为StoreA和StoreB,并在StoreA和StoreB之间平均分配商店的子项[产品]吗?太好了!我希望以上的更新足以帮助你考虑“回答”这个问题。还有一些方面我还不是100%熟悉(或者自从我第一次学习它以来就一直在看其他东西,所以我已经忘记了),但希望这个概要足以让你继续。