akka-cluster中对外部系统的负载均衡调用
Load balancing calls to external system in akka-cluster
Akka集群图:
DATA CENTER 1 DATA CENTER 2
+-------------------------------+ +-------------------------------+
| +--------+ +--------+ | | +--------+ +--------+ |
| | NODE 1 |---------| NODE 2 | | | | NODE 4 |---------| NODE 5 | |
| +--------+ +--------+ | | +--------+ +--------+ |
| | | +--------+ | | |
| | +--------+ | | | | +--------+ | |
| +----| NODE 3 |----+ | | +----| NODE 6 |----+ |
| +--------+ | | +--------+ |
+-------------------------------+ +-------------------------------+
要求:
- 该集群需要为各种服务提供健康监控
- 每个节点都可以访问需要定期调用的相同健康检查列表URL
- 运行状况检查调用的分布应该在节点之间平衡
- 不希望多个节点调用同一个健康检查URL
- 如果一个节点出现故障,其运行状况检查调用应重新分配给正常运行的节点
想法:
- 设置一个cluster singleton来集中对外调用的责任。但是,在多数据中心设置中,会有两个单例(每个数据中心一个),那么如何在它们之间分配调用?
- 有没有比集群单例更好的选择?根据文档:"Using a singleton should not be the first design choice. It has several drawbacks, such as single-point of bottleneck."
那么你会如何设计一个Akka集群系统来负载均衡对外部系统的调用?
听起来您只想大致均匀地分布运行状况检查。您可以将 Akka 的集群分片与记忆实体一起使用,并使分片数量等于每个分片单个实体的健康检查数量。然后,当每个实例启动时,它只需向所有分片发送一条消息,以确保它们已启动。如果他们已经开始,他们将忽略该消息。我在这里假设您要执行的健康检查明显多于 6 项。
如果一个实例出现故障,分片会自动分配给应用程序的另一个实例,并且该实体会在该新实例上再次启动。为了聚合健康检查,您可以将它们全部发送到 Kafka 主题或将它们发送到集群单例以进行聚合。也许您计划将结果发送到 statsd 端点或将它们插入数据库。目前尚不清楚如何使用您的问题中的健康检查结果。
Akka集群图:
DATA CENTER 1 DATA CENTER 2
+-------------------------------+ +-------------------------------+
| +--------+ +--------+ | | +--------+ +--------+ |
| | NODE 1 |---------| NODE 2 | | | | NODE 4 |---------| NODE 5 | |
| +--------+ +--------+ | | +--------+ +--------+ |
| | | +--------+ | | |
| | +--------+ | | | | +--------+ | |
| +----| NODE 3 |----+ | | +----| NODE 6 |----+ |
| +--------+ | | +--------+ |
+-------------------------------+ +-------------------------------+
要求:
- 该集群需要为各种服务提供健康监控
- 每个节点都可以访问需要定期调用的相同健康检查列表URL
- 运行状况检查调用的分布应该在节点之间平衡
- 不希望多个节点调用同一个健康检查URL
- 如果一个节点出现故障,其运行状况检查调用应重新分配给正常运行的节点
想法:
- 设置一个cluster singleton来集中对外调用的责任。但是,在多数据中心设置中,会有两个单例(每个数据中心一个),那么如何在它们之间分配调用?
- 有没有比集群单例更好的选择?根据文档:"Using a singleton should not be the first design choice. It has several drawbacks, such as single-point of bottleneck."
那么你会如何设计一个Akka集群系统来负载均衡对外部系统的调用?
听起来您只想大致均匀地分布运行状况检查。您可以将 Akka 的集群分片与记忆实体一起使用,并使分片数量等于每个分片单个实体的健康检查数量。然后,当每个实例启动时,它只需向所有分片发送一条消息,以确保它们已启动。如果他们已经开始,他们将忽略该消息。我在这里假设您要执行的健康检查明显多于 6 项。
如果一个实例出现故障,分片会自动分配给应用程序的另一个实例,并且该实体会在该新实例上再次启动。为了聚合健康检查,您可以将它们全部发送到 Kafka 主题或将它们发送到集群单例以进行聚合。也许您计划将结果发送到 statsd 端点或将它们插入数据库。目前尚不清楚如何使用您的问题中的健康检查结果。