Akka 如何管理阿克卡演员';分布式系统中的路径?
假设我有以下两个演员Akka 如何管理阿克卡演员';分布式系统中的路径?,akka,Akka,假设我有以下两个演员 贮藏 产品 每个商店都可以有多个产品,我想在多台机器上的高流量上动态地将商店分为StoreA和StoreB。分店还将在StoreA和StoreB之间平均分配产品 我的问题是:在拆分后,知道将所有未来BuyProduct请求发送到(StoreA或StoreB)的最佳做法是什么?我问这个问题的原因是,如果收到购买ProductA的请求,我想将其发送到内存中已经有该产品状态的正确商店 解决方案:我能想到的唯一解决方案是存储每个产品的路径Map[productId:Long,sto
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%熟悉(或者自从我第一次学习它以来就一直在看其他东西,所以我已经忘记了),但希望这个概要足以让你继续。