【发布时间】:2018-12-31 02:59:13
【问题描述】:
我有一个云原生应用程序,使用Spring Cloud Netflix 实现。
因此,在我的应用程序中,我使用Eureka 服务发现来管理应用程序不同服务的所有实例。当每个服务实例想要与另一个服务实例通信时,它使用Eureka 获取有关目标服务的所需信息(例如 IP 和端口)。
服务编排也可以使用Docker Swarm 和Kubernetes 之类的工具来实现,看起来Eureka 的功能与Docker Swarm 和Kubernetes 的功能之间存在一些重叠。
例如,假设我在Docker Swarm 中创建了一个具有 5 个实例的服务。因此,swarm 确保这 5 个实例始终启动并运行。此外,应用程序的每个服务都在内部定期向Eureka 发送心跳,以表明它仍然存在。看来我们这里有两层健康检查,一层用于Docker,另一层用于Spring Cloud 本身。
或者,例如,您可以为整个 swarm 中的服务公开一个端口,这消除了对服务发现的一些需求(端口总是显而易见的)。另一个例子可能是由 docker 内部的routing mesh 执行负载平衡,而负载平衡由Ribbon 组件或Eureka 本身在内部进行。在这种情况下,拥有一个硬件负载平衡器,我们可以使用 3 层负载平衡功能。
所以,我想知道将这些工具一起使用是否合理?使用这些技术的组合似乎大大增加了应用程序的复杂性,并且可能是多余的。
感谢您的阅读!
【问题讨论】:
标签: java spring docker kubernetes spring-cloud