Akka集群文档没有说明如何自动扩展集群-添加或删除节点。这在Akka生态系统中应该如何实现?例如,在两种情况下-当我们使用VM作为节点,或使用Kubernetes中的容器组成集群时。
如果某个节点的负载较低,Akka Cluster是否会将执行元从该节点移动到其他节点,并自动关闭未充分利用的节点?
如果Akka集群没有弹性功能,并且依赖于Kubernetes(如here所述),那么,如果Kubernetes决定删除未充分利用的Akka集群节点,如何确保未充分利用的节点中剩余的操作者将“优雅地”移动到其他集群节点?
1条答案
按热度按时间06odsfpq1#
Akka集群不处理在节点之间移动演员。
当节点离开和加入集群时,集群分片将转移托管分片的责任。(例如,因为托管该碎片的节点不再位于集群中),将为节点分配该碎片(默认情况下,如果我没记错的话,策略是在负责最少分片的节点上启动分片,但其他策略,比如在发送初始消息的节点上启动shard(对于从分区的Kafka主题中摄取之类的事情很有用)。
当执行元在新节点上启动时,默认情况下,它们不会保留它们以前在任何节点上运行时的状态。Akka Persistence提供了允许执行元恢复其状态的能力;这就是为什么每当使用Akka集群分片时,使用Akka持久性是非常普遍的。
启动服务示例不是Akka的责任,而是Kubernetes、Mesos或任何您希望使用的控制平面的责任。至于缩减,让集群节点在不忙的情况下离线并不困难:尽管您在某种程度上需要自己来实现它(并且可能必须与k8等交互,以防止优雅退出被解释为需要产生新示例的失败)。