【问题标题】:Spring Cloud: Canary Deployments with ZuulSpring Cloud:使用 Zuul 进行 Canary 部署
【发布时间】:2015-10-25 11:40:12
【问题描述】:

我开始使用 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 版本?
  • 正确答案是“以上所有”吗? :)

【问题讨论】:

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


    【解决方案1】:

    假设您也使用 Ribbon,我将保留服务 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;
        }
    }
    

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

    这都是基于最好的猜测,我还没有真正实现过。我意识到这个问题已经快 4 个月了。因此,如果您在此期间找到了其他解决方案,如果您能在自己的问题的答案中分享它,那就太好了。

    【讨论】:

    • 我们将 Zuul 与 Ribbon 一起使用,但我没想到要查看 Ribbon 项目的规则示例。这很有帮助。一旦我们深入研究,我会回复。
    • @Ryan 我很想学习,您是如何解决问题的?
    • 你深入了解@RyanJ.McDonough 了吗?
    • 我也有兴趣。我们将有 100 个客户,我想用 10 个特定的、唯一可识别的客户进行金丝雀测试。客户端应用程序不会改变,只是微服务的内部结构。我如何配置网关(?)以将请求路由到这 10 个客户端的新版本微服务而不更改客户端中的任何内容
    猜你喜欢
    • 2019-07-08
    • 1970-01-01
    • 2016-06-24
    • 2019-08-20
    • 2017-09-29
    • 2021-02-02
    • 2016-01-27
    • 2018-07-31
    • 2019-02-12
    相关资源
    最近更新 更多