【发布时间】:2021-02-25 10:22:55
【问题描述】:
我有一个关于当您使用 Spring Cloud 网关将单节点 Docker Swarm 与 Spring Eureka 结合时负载平衡如何工作的问题。我已经成功配置了一个非 Eureka swarm,并且可以看到服务副本之间的 Swarm 负载平衡:
Cloud Gateway route config
.route(r -> r.path("/api/**")
.uri("http://my-service:8081")
.id("my-service"))
如果我随后将其配置为使用 Eureka,我现在有了这个:
.route(r -> r.path("/api/**")
.uri("lb://MY-SERVICE")
.id("my-service"))
我相信我假设网关会知道 IP/端口并相应地进行负载平衡是正确的,但是当请求命中一个 IP 时会蜂拥而至然后决定在副本之间进行负载平衡?
我很欣赏 Eureka 对于小型单节点群来说可能有点过头了,但我认为随着应用程序的扩展并可能变得更加分散,它可能会有所帮助。显然我想避免负载均衡发生两次的情况。
我想我可以只使用http 而不是lb 来阻止网关进行负载平衡。
【问题讨论】:
-
所以我想我找到了答案。我找到了我的副本的容器 IP,并更新了网关以路由到其中一个 IP。我 swarm 服务更新了网关服务,然后检查了每个复制服务的日志。只有网关中 IP 的容器被击中。因此我有信心使用 Eureka 不会造成多重负载均衡。
标签: spring docker spring-cloud docker-swarm netflix-eureka