【问题标题】:How to scale sharded Akka Cluster automatically?如何自动扩展分片 Akka 集群?
【发布时间】:2020-12-09 08:56:58
【问题描述】:

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

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

如果 Akka Cluster 没有弹性功能,并且依赖于例如Kubernetes(如here 所述),然后再次如果 Kubernetes 决定删除未充分利用的 Akka 集群节点,如何确保剩余在未充分利用节点中的 Actor 将“优雅地”移动到其他集群节点?

【问题讨论】:

    标签: akka scalability akka-cluster elasticity


    【解决方案1】:

    Akka Cluster 不处理从一个节点到另一个节点的移动角色。

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

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

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

    【讨论】:

    • 感谢您提供有关该主题的全面信息。
    猜你喜欢
    • 1970-01-01
    • 2019-12-01
    • 2020-02-26
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    相关资源
    最近更新 更多