对akka集群中外部系统的负载平衡调用

对akka集群中外部系统的负载平衡调用,akka,akka-http,akka-cluster,Akka,Akka Http,Akka Cluster,阿克卡聚类图: DATA CENTER 1 DATA CENTER 2 +-------------------------------+ +-------------------------------+ | +--------+ +--------+ | | +--------+ +--------+ | | | NODE 1 |---------| NODE

阿克卡聚类图:

          DATA CENTER 1                            DATA CENTER 2
+-------------------------------+        +-------------------------------+
| +--------+         +--------+ |        | +--------+         +--------+ |
| | NODE 1 |---------| NODE 2 | |        | | NODE 4 |---------| NODE 5 | |
| +--------+         +--------+ |        | +--------+         +--------+ |
|     |                  |      +--------+     |                  |      |
|     |    +--------+    |      |        |     |    +--------+    |      |
|     +----| NODE 3 |----+      |        |     +----| NODE 6 |----+      |
|          +--------+           |        |          +--------+           |
+-------------------------------+        +-------------------------------+
要求:

  • 该集群需要为各种服务提供运行状况监视
  • 每个节点都可以访问需要定期调用的相同健康检查URL列表
  • 运行状况检查调用的分布应在节点之间平衡
  • 不希望多个节点调用相同的运行状况检查URL
  • 如果某个节点发生故障,则其运行状况检查调用应重新分配给启动的节点
想法:

  • 建立一个统一的管理体系,集中对外电话的责任。但是,在多数据中心设置中,将有两个单例(每个数据中心一个),那么如何在它们之间分配调用呢
  • 是否有更好的集群单例替代方案?根据文档:“使用单例不应该是第一个设计选择。它有几个缺点,例如单点瓶颈。”

那么,您将如何设计Akka集群系统来平衡对外部系统的负载调用呢?

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

如果一个实例发生故障,碎片将自动分配给应用程序的另一个实例,并在该新实例上再次启动该实体。为了聚合健康检查,可以将它们全部发送到Kafka主题,或者将它们发送到集群单例进行聚合。也许您计划将结果发送到statsd端点或将其插入数据库。不清楚您的问题中的健康检查结果将如何使用。

您查看了吗?