0

Akka Cluster 文档没有指定我们如何自动扩展集群 - 添加或删除节点。这应该如何在 Akka 生态系统中实现?例如,在两种情况下——当我们使用虚拟机作为节点或 Kubernetes 中的容器组成集群时。

如果特定节点的负载较低,Akka Cluster 是否会将 Actor 从那里移动到其他节点并自动关闭未充分利用的节点?

如果 Akka Cluster 没有弹性能力,并且依赖于例如 Kubernetes(如此所述),那么再次如果 Kubernetes 决定删除未充分利用的 Akka Cluster 节点,如何确保 Actors 留在下面- 使用的节点将被“优雅地”移动到其他集群节点?

4

1 回答 1

2

Akka Cluster 不处理从一个节点到另一个节点的移动参与者。

当节点离开和加入集群时,集群分片将转移托管分片的责任。基本上,如果一条消息通过集群分片发送到一个无主分片中的参与者(例如,因为托管该分片的节点不再在集群中),一个节点将被分配该分片(默认情况下,如果我没记错的话,策略是在负责最少分片的节点上启动分片,但其他策略,例如在发送初始消息的节点上启动分片(对于从分区的 Kafka 主题中摄取等事情很有用)。

当参与者在新节点上启动时,默认情况下,他们不会保留之前运行的任何节点的状态。Akka Persistence 提供了让 actor 恢复其状态的能力;这就是为什么在使用 Akka Cluster Sharding 时使用 Akka Persistence 非常普遍的原因。

启动服务实例不是 Akka 的责任,而是 Kubernetes、Mesos 或您想使用的任何控制平面的责任。至于缩小规模,如果集群节点不忙,让它们自己脱机并不是特别困难:尽管您在某种程度上需要靠自己来实现它(并且可能必须与 k8s 等交互以防止优雅退出被解释为需要生成新实例的失败)。

于 2020-08-20T20:00:52.833 回答