工人拨打多个大师的模式?

时间:2017-04-07 17:07:45

标签: scala akka akka-cluster

为Akka描述了一个工人拨入模式,特别是在这里:http://letitcrash.com/post/29044669086/balancing-workload-across-nodes-with-akka-2。它描述了一种在多个远程工作者之间公平分配负载的方法。它假设只有一个主人,工人发现并注册它。有没有办法用工作人员拨入模式支持多个主人,这支持多个主人之间公平和确定地分享工人?

我想象以下情况。让我们说有一个具有2个不同节点角色的集群:前端和工作者。有多个前端节点运行HTTP服务器。这些前端将业务逻辑委托给在工作节点上运行的actor。前端位于简单的HTTP循环负载均衡器(Nginx)之后。

我希望拥有一个可由任何前端使用的工作节点共享池。如果一个节点的负载比其他节点多,那么它应该消耗更多的工作节点。容量。如果负载太重,我应该能够添加更多的工作节点(可能通过自动缩放自动添加),并且他们应该再次根据需要公平地支持所有前端。

有一些天真的实施会导致不同的缺陷。如果工作人员以某种方式决定支持哪个单一前端,那么工作人员的容量可能无法公平地传播,因为前端负载是高度动态的。或者,如果工作人员将在所有前端注册,则当多个前端请求来自单个工作人员的某些工作时,可能存在竞争条件。总而言之,我没有看到支持这一点的好方法。有没有人有更好的主意?

1 个答案:

答案 0 :(得分:0)

通过使用集群当前状态,我们可以添加多个主服务器

   .match(CurrentClusterState.class, state -> {
        for (Member member : state.getMembers()) {
          if (member.status().equals(MemberStatus.up())) {
            register(member);
          }
        }
      })