如何自动扩展分片 Akka 集群?
Posted
技术标签:
【中文标题】如何自动扩展分片 Akka 集群?【英文标题】:How to scale sharded Akka Cluster automatically? 【发布时间】:2020-12-09 08:56:58 【问题描述】:Akka 集群文档没有指定我们如何自动扩展集群 - 添加或删除节点。这应该如何在 Akka 生态系统中实现?例如,在两种情况下 - 当我们使用虚拟机作为节点或 Kubernetes 中的容器组成集群时。
如果特定节点的负载较低,Akka Cluster 是否会将 Actor 从那里移动到其他节点并自动关闭未充分利用的节点?
如果 Akka Cluster 没有弹性功能,并且依赖于例如Kubernetes(如here 所述),然后再次如果 Kubernetes 决定删除未充分利用的 Akka 集群节点,如何确保剩余在未充分利用节点中的 Actor 将“优雅地”移动到其他集群节点?
【问题讨论】:
【参考方案1】:Akka Cluster 不处理从一个节点到另一个节点的移动角色。
随着节点离开和加入集群,集群分片将转移托管分片的责任。基本上,如果一条消息通过集群分片发送到一个无主分片中的参与者(例如,因为托管该分片的节点不再在集群中),一个节点将被分配该分片(默认情况下,如果我没记错的话,策略是在负责最少分片的节点上启动分片,但其他策略,例如在发送初始消息的节点上启动分片(对于从分区的 Kafka 主题中提取有用)。
当参与者在新节点上启动时,默认情况下,他们不会保留之前运行的任何节点的状态。 Akka Persistence 提供了让 actor 恢复其状态的能力;这就是为什么在使用 Akka Cluster Sharding 时使用 Akka Persistence 非常普遍的原因。
启动服务实例不是 Akka 的责任,而是 Kubernetes、Mesos 或您想使用的任何控制平面的责任。至于缩小规模,如果集群节点不忙,让它们自己脱机并不是特别困难:尽管您在某种程度上要靠自己来实现它(并且可能必须与 k8s 等交互以防止优雅退出被解释为需要生成新实例的失败)。
【讨论】:
感谢您提供有关该主题的全面信息。以上是关于如何自动扩展分片 Akka 集群?的主要内容,如果未能解决你的问题,请参考以下文章