Akka Cluster文档没有指定如何自动扩展集群——添加或删除节点。这应该如何在阿卡生态系统中实施?例如,在两种情况下,当我们使用VM作为节点时,或者使用Kubernetes中的容器来组成集群时。
如果某个特定节点的负载较低,Akka Cluster是否会将Actors从那里移动到其他节点,并自动关闭未充分利用的节点?
如果Akka Cluster没有弹性功能,并且依赖于例如Kubernetes(如本文所述(,那么如果Kubernete决定删除利用率不足的Akka Cluster节点,如何确保剩余在利用率不足节点中的Actor将"优雅"地移到其他集群节点?
Akka集群不处理将参与者从一个节点移动到另一个节点。
集群分片将在节点离开和加入集群时转移托管分片的责任。基本上,如果通过集群分片将消息发送给无主分片中的参与者(例如,因为托管该分片的节点不再在集群中(,节点将被分配该碎片(默认情况下,如果我没记错的话,策略是在负责最少碎片的节点上启动碎片,但其他策略,比如在发送初始消息的节点上开始碎片(对于从分区的Kafka主题中获取等内容很有用((。
当参与者在一个新节点上启动时,默认情况下,他们不会从之前运行的任何节点中保留自己的状态。Akka Persistence提供了允许参与者恢复状态的能力;这就是为什么每当使用Akka集群碎片时,使用Akka Persistence是非常常见的。
启动服务实例不是Akka的责任,而是Kubernetes、Mesos或您想要使用的任何控制平面的责任。至于缩小规模,如果集群节点不忙,让它们离线并不特别困难:尽管你在一定程度上要自己实现这一点(可能需要与K8等进行交互,以防止优雅的退出被解释为需要派生新实例的失败(。