我有一个名为TaskRunner的演员。 任务可能需要1分钟才能运行。 由于我使用的库只能在每个jvm /节点上拥有一个演员。 我有1000个这些节点分布在各种机器上。
我想使用各种规则将任务分配给这些节点,但最重要的一点是:
- 永远不要在TaskRunner节点的邮箱中排队任务,在向其发送任务之前始终等待TaskRunner可用
我想到的方法是,在另一个节点上拥有一个演员(让我们称其为Scheduler actor),监听来自TaskRunner节点的注册,并保持已发送到何处的内部状态。
假设如果我这样做,我只能拥有此调度程序演员的一个实例,因为如果有多个实例,它们将不知道哪些TaskRunner节点当前正在忙碌,因此我们会得到任务在队列中的情况。
这是否意味着我应该使用Cluster Singleton作为调度程序演员?
是否有更好的方法来实现我的目标?