对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端点或将其插入数据库。不清楚您的问题中的健康检查结果将如何使用。您查看了吗?