负载均衡调用akka-cluster中的外部系统

时间:2018-04-04 15:32:15

标签: akka akka-http akka-cluster

Akka集群图:

^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,15}$

要求:

  • 此群集需要为各种服务提供运行状况监控
  • 每个节点都可以访问需要定期调用的健康检查URL列表
  • 健康检查呼叫的分配应跨节点平衡
  • 不希望多个节点调用相同的运行状况检查URL
  • 如果某个节点出现故障,则应将其运行状况检查调用重新分配给已启动的节点

思想:

  • 设置cluster singleton以集中外部呼叫的责任。但是,在多数据中心设置中,会有两个单例(每个数据中心一个),那么如何在它们之间分配呼叫呢?
  • 是否有更好的群集单例替代方案?根据文档:“使用单例不应该是第一个设计选择。它有几个缺点,例如单点瓶颈。”

那么您如何设计一个Akka集群系统来平衡对外部系统的调用呢?

1 个答案:

答案 0 :(得分:1)

听起来你只是希望健康检查大致均匀分布。您可以将Akka的群集分片与记住实体一起使用,并使分片数等于每个分片具有单个实体的运行状况检查的数量。然后,当每个实例启动时,它只是向所有分片发送一条消息,以确保它们已启动。如果它们已经启动,它们将忽略该消息。我在这里假设你要执行的健康检查要多得多6个。

如果实例关闭,则会自动将分片分配给应用程序的其他实例,并在该新实例上再次启动实体。要聚合运行状况检查,您可以将它们全部发送到Kafka主题,或将它们发送到集群单例以进行聚合。也许您计划将结果发送到statsd端点或将它们插入数据库。目前尚不清楚如何从您的问题中使用健康检查结果。