Spring Cloud:Zuul的Canary部署

时间:2015-08-03 11:27:35

标签: spring-cloud microservices netflix-eureka netflix-zuul canary-deployment

我使用Eureka和Zuul开始使用Spring Cloud,并且在构建蓝色/绿色和Canary部署方面遇到了一些问题。到目前为止,我已经完成了基础工作,并让Eureka,Zuul和配置服务器按预期工作。我想要完成的是建立一个有两个版本的服务,比如1.0和1.1。对于特定用户的子集,我想将它们路由到1.1版本,其他人都应该转到1.0版本。

Zuul过滤器API对文档有点了解,我正在努力解决一些概念,所以我想我会在这里问几个问题。我还运行了一些基本的过滤器,除了获取他们请求的主体和服务的身份之外,它不会做很多事情。我在墙上的位置是了解如何向Eureka和Zuul公开同一服务的两个不同版本。我很好奇的一些事情:

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

1 个答案:

答案 0 :(得分:6)

假设您也在使用功能区,我会保留服务ID。相反,我会看一下com.netflix.loadbalancer包。 Canary部署本质上是负载平衡的非常具体的约束。您可以实现自己的AbstractLoadBalancerRule,根据您希望以路由为基础的某些属性来选择服务器。然后将该规则添加到Zuul实例的配置中。

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

如果您让您的服务使用不同的服务ID(“simpleservice”和“simpleservice-x.y”)在Eureka注册,我认为事情一定会变得复杂。在从Eureka检索可用服务器列表时,您必须扩展发现客户端以忽略版本部分(“-xy”,同时仍然能够处理“foo-service”),然后执行一些选择过程来选择反正一个。所以我想事情会变得更加复杂。

这都是基于最好的猜测,我实际上没有实现这一点。我意识到这个问题已经快4个月了。因此,如果您在此期间找到了其他解决方案,那么如果您可以在回答自己的问题时分享它,那就太棒了。