14

我开始使用Eureka和Zuul的Spring Cloud,并且对构建蓝/绿和金丝雀部署有一些疑问。到目前为止,我已经完成了基础知识,并且拥有Eureka,Zuul和配置服务器按预期工作。我试图完成的是建立一个有两个版本的服务,比如1.0和1.1。对于特定用户的一个子集,我想将它们路由到1.1版本,其他人应该转到1.0版本。春云:Zuul的金丝雀部署

Zuul过滤器API在文档上有点亮,而且我正努力钻研一些概念,所以我想我会在这里问几个问题。我也有一些基本的过滤器在运行,除了获得他们要求的委托人和服务的身份之外,这些过滤器并不是一个很好的工作。我打墙的地方是了解如何向Eureka和Zuul公开两种不同版本的相同服务。我很好奇几件事:

  • 在文档,文章和其他堆栈溢出之间,术语“服务”和“集群”似乎可以互换使用。它是否正确?
  • 这样说,如果我有一个服务名为/simpleservice我是否暴露两个不同的服务ID(即simpleservicesimpleservice-1.1)?如果我这样做,当其中一个目标用户请求/simpleservice时,我让Zuul将它们发送到/simpleservice-1.1
  • 或者,是否将另一个节点添加到现有服务ID并向每个节点添加其他元数据,以便Zuul和区分版本1.0和1.1?
  • 正确的答案是“以上所有”? :)

回答

6

假设您使用功能区以及我将离开服务ID,因为它们。相反,我会看看com.netflix.loadbalancer包。金丝雀部署本质上是非常具体的约束条件下的负载平衡。您可以实现您自己的AbstractLoadBalancerRule,该服务器根据您希望基于路由的某个属性选择服务器。然后将该规则添加到Zuul实例的配置中。

@Configuration 
public class CanaryConfiguration { 
    @Bean public IRule canaryDeploymentRule(IClientConfig config) { 
     CanaryDeploymentRule rule = new CanaryDeploymentRule(); 
     rule.initWithNiwsConfig(config); 
     return rule; 
    } 
} 

如果你让你的服务注册自己尤里卡不同的服务ID(“simpleservice”和“simpleservice-xy格式”),我想事情都会变得复杂。当从Eureka检索可用服务器列表时,您将不得不扩展发现客户端以忽略版本部分(“-xy”,同时仍能够处理“foo-service”),然后执行一些选择过程来选择无论如何都是正确的。所以我想事情会变得更加复杂。

这都是基于最好的猜测,我没有实际执行这个。我意识到这个问题已经快4个月了。因此,如果您在此期间找到了其他解决方案,那么如果您可以将它分享给您自己的问题的答案,那将是非常好的。

+1

我们在功能区使用Zuul,但我没有想到要查看规则示例的Ribbon项目。这有很大帮助。一旦我们深入了解,我会回来。 –

+0

@Ryan我对学习很感兴趣,你是如何解决你的问题的? –

+0

你有更深入的了解@ RyanJ.McDonough? – Gerardo