设计帮助:Akka集群和动态创建的参与者

设计帮助:Akka集群和动态创建的参与者,akka,akka-cluster,Akka,Akka Cluster,我的基础设施中有N个节点(即不同的JRE)运行Akka(尚未群集化) 节点没有特定的“角色”,但它们只是数据的处理器。这些数据的“处理器”将是参与者。所有类型的非Akka/Actor(其他java代码)(调用者)都可以通过创建要处理的消息来调用特定类型的处理器。最终他们需要返回结果 “processor”参与者非常简单,支持“process(data)”之类的方法,它们是无状态的,它们进行变异并将数据发送到外部系统。这些处理器在执行时间上可能会有所不同,因此它们非常适合作为演员 这些“处理器”有

我的基础设施中有N个节点(即不同的JRE)运行Akka(尚未群集化)

  • 节点没有特定的“角色”,但它们只是数据的处理器。这些数据的“处理器”将是参与者。所有类型的非Akka/Actor(其他java代码)(调用者)都可以通过创建要处理的消息来调用特定类型的处理器。最终他们需要返回结果

  • “processor”参与者非常简单,支持“process(data)”之类的方法,它们是无状态的,它们进行变异并将数据发送到外部系统。这些处理器在执行时间上可能会有所不同,因此它们非常适合作为演员

  • 这些“处理器”有许多不同类型,每个唯一处理器的配置都存储在数据库中。我的系统中的每个节点在启动时都需要创建一个路由器参与者,该路由器参与者面对这些独特处理器参与者类型的N个实例。我不能静态地定义/命名/创建这些角色,这些角色是用代码或akka配置硬连接的

  • 需要注意的是,任何参与者处理器的配置都可以在数据库中随时定期更改。这些参与者的路由器的创建者需要根据新配置动态终止并重新创建它们

  • 一个关键点是,这些“处理器”中的一些在我的所有节点上只能有非常有限的Actor实例。也就是说,processorType-A可以有无限数量的实例,而processorType-B只能有2个实例在整个集群中运行。因此,NODE1上要调用processorType-B的调用者需要将消息路由到NODE2,因为该节点是唯一运行processorType-B参与者实例的节点

  • 考虑到这一点,这里是我的问题,我正在寻找一些设计帮助:

    • 对于上面的第1、2、3、4点,我对

    • 但是,对于第5点和第6点,我不确定如何使用Akka集群正确实现这一点,因为我的“节点”彼此都不知道,并且它们都运行相同的代码,以便根据该数据库配置动态创建这些路由器参与者)

    我想到的问题有:

    • 如何正确处理集群中这些路由器参与者的“名称”?例如,对于“processorType-A”,它可以有无限数量的参与者实例。每个节点在本地都有这些实例可用,但如果它们都在单个节点上终止,我仍然希望它们的“处理器类型”的消息路由到另一个仍然有可用实例的节点上

    • 如何在集群中强制/协调“processor”实例限制(即“processorType-B”在全局范围内只能有2个实例)等,而processorType-A可以有更高的数量。它的同类节点需要有某种方式相互检查,以确定是谁在集群中创建了这些实例?我不确定Akka是否有自己的设施来完成这项工作

    ClusterRouterPool?是否有ClusterRouterPool设置

    非常感谢您的任何想法和/或设计提示/想法!谢谢