如何使用Spring Cloud和Netflix OSS在微服务之间进行路由

And*_*ers 19 blue-green-deployment microservices spring-cloud netflix-eureka netflix-zuul

在我们使用Spring Cloud开发微服务的过程中,我们开始使用Zuul作为从外部到微服务的任何连接的代理,以及任何需要联系其他微服务的微服务.

一段时间后,我们得出结论,Zuul被设计为边缘服务(仅从外部到微服务的代理流量),不应该用于跨微服务通信.特别是Spring Cloud建议使用eureka与另一个服务建立直接(可能是负载平衡)连接的方式使我们反对在所有事件之间使用Zuul.

当然,一切都按预期工作得很好(就像Spring云一样),但我们对如何使用此设置执行某个用例毫无头绪.

在部署新版本的微服务时,我们希望对旧版本和新版本进行蓝/绿部署.但是,在微服务之间没有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实例是此类部署的最佳解决方案?

任何反馈将不胜感激.

亲切的问候,安德烈亚斯

law*_*wal 6

通过在元数据中设置版本号,您可以轻松地使Svc1获取最新版本的Svc2,即始终获取具有最新版本号的实例.请参阅此要点作为指导.

  • 我不想打破这个咒语,但这对我来说似乎是一个重大的黑客攻击.如果出现问题,我们如何回滚到以前的版本? (3认同)