我们通过在eureka服务注册中心注册了多个实例来扩展我们系统中的所有服务。
此外,它们也由前面的zuul服务器代理。
我的问题是,当从客户端访问时,我们如何确保zuul代理的可扩展性。
我能想到的一个解决方案是在eureka注册表中注册了多个代理实例。但如果这样做,我们如何决定将哪些实例暴露给客户。
答案 0 :(得分:4)
我们的应用程序遇到了同样的问题,在我们的后端有多种类型的微服务类型应用程序。所有服务器都在Eureka注册。问题是我们还配置了多个安全网关(基于这个优秀教程中描述的架构:https://spring.io/guides/tutorials/spring-security-and-angular-js/)。
最终我们决定使用硬件http负载均衡器,以循环方式调用我们的安全网关(我们的解决方案是在本地)。
我们使用带有@EnableHttpRedisSession注释的Redis使spring会话在所有服务器上同步,因此http负载均衡器不必处理粘性会话或有状态注意事项。它只对所有安全网关进行循环。如果负载均衡器击中SG1,SG2或SG3并不重要,它们都会共享来自Redis的相同会话信息(也配置为使用Redis Sentinel进行故障转移)。