在使用Spring Cloud开发微服务的过程中,我们开始使用Zuul作为从外部到微服务的任何连接的代理,以及任何需要联系其他微服务的微服务的代理。
经过一段时间后,我们得出结论,Zuul被设计为边缘服务(仅代理从外部到微服务的流量),不应用于跨中断服务通信。特别是Spring Cloud建议使用eureka与另一个服务建立直接(可能负载平衡)的连接,这使得我们反对让Zuul介入其中。
当然一切都按预期工作得很好(就像Spring云一样),但我们对如何使用此设置执行某个用例毫无头绪。
在部署新版本的微服务时,我们希望拥有旧版本和新版本的blue/green deployment。 但是,在微服务之间没有Zuul,两个单独服务之间的通信将继续使用旧版本,直到从eureka中删除。
我们正在考虑如何实现这一目标。在下图中,我绘制了我认为可能是一种选择。
在图片的第一部分,Zuul打电话给eureka以获取注册表来创建路线。服务1也调用eureka来使注册表路由到服务2.由于服务2在eureka注册表中,所以路由成功完成。
在图片的第二部分中,部署了服务2(服务2.1)的更新。它也注册了eureka,这使得服务1现在可以路由到服务2和服务2.1。蓝/绿部署不需要这样做。
在第三部分中,展示了针对此问题的另一个eureka实例的潜在解决方案。此实例不支持对等,不会与第一个eureka实例同步。与第一个实例相反,这个唯一的目的是促进蓝色/绿色部署。服务2.1向第二个eureka实例注册,服务1更改其配置以获取其注册表,而不是从第一个eureka实例获取注册表。
我们面临的主要问题是这是否是一个可行的解决方案。具有Zuul路由的灵活性是我们在这种情况下没有的一大优点。我们应该回过头来通过Zuul路由每个服务到服务的呼叫,还是有另一个解决方案(可能是某种类型的功能区配置)更合适?或者,第二个eureka实例是此类部署的最佳解决方案吗?
非常感谢任何反馈。
亲切的问候, 安德烈亚斯