我有一个带有客户演员的测试演员系统。它跟踪客户的状态。事件消息和查询消息被发送到协调器。如果消息不存在客户参与者,则协调器创建一个。工作正常,看起来像这样:
现在我想添加集群。我希望系统足够大,可以容纳许多客户,当一个客户出现故障时,消息仍然可以由其他节点处理。所以在阅读和修改了一下之后,我以为我知道该怎么做,但我一定是误会了。这是我的方法。我在协调器上方添加了一个 ConsistentHashingPool 演员(使用客户 ID 作为键)。然后通过使池集群知道,它可以将协调器与他们的客户一起分发到其他节点。当仍然在一个节点上时,它看起来像这样:
像魅力一样工作。但后来我向集群添加了第二个节点。然后它看起来像这样:
这不是我想要的。所有客户现在都有两个演员代表他们。一些事件最终在节点 1 上结束,其他事件在节点 2 上结束。我显然有一些错误的期望。我有点期望集群感知池“作为一个”存在于两个节点上。
那么我应该怎么做才能实现我的目标呢?也许应该有调度员角色和状态角色?但那时我仍然想要 2 个调度员。我应该看看这个集群单例吗?它指出单例很容易成为瓶颈。最好,我会在每个节点上都有一个路由器,但它们会共享路由,一些是本地的,一些是远程的。