问题标签 [canary-deployment]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
347 浏览

continuous-deployment - 立即部署到所有生产服务器还是首先部署到子集是持续部署的最佳实践吗?

我们在项目中使用 CD,由于该应用程序在全球范围内使用,我们使用多个数据中心(每个区域一个)。每个数据中心托管一个隔离的应用程序实例(每个区域部署都使用自己的数据库、应用程序服务器等)。数据中心之间不共享数据。

我们可以采取两种不同的方法:

  1. 部署到运行所有测试的集成服务器 (I),然后部署到第一个数据中心 A,然后(一旦部署到 A 完成)到数据中心 B。

  2. 区域 A 的用户群较小,为了防止集成服务器 (I) 上未捕获的软件错误导致 A 和 B 中断,另一种方法是部署到集成服务器,然后将代码“烘焙”到区域 A 24 小时,只有在生产环境测试 24 小时后才能将应用程序部署到数据中心 B。由于在这种情况下没有“持续”部署,这种替代方案是否违反 CI 最佳实践?

0 投票
5 回答
62676 浏览

deployment - Canary release strategy vs. Blue/Green

My understanding of a canary release is that it's a partial release to a subset of production nodes with sticky sessions turned on. That way you can control and minimize the number of users/customers that get impacted if you end up releasing a bad bug.

My understanding of a blue/green release is that you have 2 mirrored production environments ("blue" and "green"), and you push changes out to all the nodes of either blue or green at once, and then use networking magic to control which environment users are routed to via DNS.

So, before I begin, if anything I have said so far is incorrect, please begin by correcting me!

Assuming I'm more or less on track, then a couple of questions about the two strategies:

  • Are there scenarios where canary is preferred over blue/green, and vice versa?
  • Are there scenarios where a deployment model can implement both strategies at the same time?
0 投票
0 回答
172 浏览

javascript - 如何以编程方式使链接在 Chrome 41 中创建一个未聚焦的标签?

目前,我可以模拟“cmd + click”或“ctrl + click”,它适用于除 ie11 之外的所有浏览器。

谷歌即将发布 Chrome 41,这将禁用这样做的能力。在这里提交

我的初步调查使我相信我可能能够在新窗口(选项卡)上强制进行内容处理,但我没有必要的知识来知道我是否应该继续试验,或者我是否会下降兔子洞。

0 投票
2 回答
3168 浏览

design-patterns - 蓝绿部署技术如何处理数据变化?

我研究了这篇关于蓝/绿部署的文章,然后更多的谷歌搜索向我介绍了这篇关于金丝雀发布的文章。我有这样的歧义:数据库会发生什么?我们应该如何使它们同步?我有两种可能的情况:

  • 想象一下,当蓝色处于活动状态时,每个环境(绿色和蓝色)有两个单独的数据库
    ,新记录将被插入到它的数据库中,
    除非我们提供类似触发器的机制(或任何其他机制),否则绿色不会意识到这些变化机制)来更新绿色数据库。
  • 第二种情况建议我们在两个环境之间共享一个向后兼容的数据库,但是
    在处理数据库时向后兼容并不是那么容易,我们必须
    在发布应用程序之前发布数据库更改。

可能存在第三种情况,在主蓝/绿部署中为数据库实施蓝/绿部署。

您认为更好的解决方案是什么,为什么?您是否建议任何其他做法或众所周知的模式?

谢谢你

0 投票
1 回答
3778 浏览

spring-cloud - Spring Cloud:使用 Zuul 进行 Canary 部署

我开始使用 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 版本?
  • 正确答案是“以上所有”吗?:)
0 投票
1 回答
2043 浏览

android-ndk - 使用 gradle-experimental 插件进行 NDK 调试

我正在尝试将本机调试添加到作为 Android Studio NDK 项目的项目中。过去我只是使用 gradle 来启动一个构建 NDK 库的 shell 脚本。现在我正在尝试使用 gradle-experimental 插件。

我已经在网上搜索了关于使用 gradle-experimental 和 NDK 的少量信息(主要是在这里,Android 工具站点 - Gradle Experimental),并且我已经整理了这个使用预览版 NDK 的 build.gradle 文件支持将 NDK 构建与 Java 构建内联。

在最终从零碎的信息中收集到这些信息后,我设法构建了 NDK 部分,但现在它无法包含明确包含在依赖项中的 httpmime-4.4-beta1.jar 文件,而且我已经尝试了许多不同的排列方式,例如:

但无论如何,Jar 文件中缺少符号的错误仍然出现。

build.gradle 源码

出于沮丧,我切换回非实验分支,即使使用旧的 build.gradle 文件,它现在也无法找到相同的 jar 文件。那么 Android Studio 2.0 Preview 6 有问题吗?

有没有其他人经历过这个,或者有解决方案?最终在 Android Studio 中进行 NDK 调试工作会非常方便,如果不是因为这最后一个障碍,我想我会在那里。

由于没有重写依赖于该 jar 文件的代码,我不知道还能尝试什么。我也愿意接受有关上述 build.gradle 文件格式的建议,因为这些新功能的文档仍然非常稀少,而且一些示例在正确的语法方面似乎已经过时了。

我错过了什么?

您可以看到 C 和 Cpp (mobile:compileNativeArmeabiDebugArmSharedLibraryNativeMainCpp) 步骤进行得很好,但是 Javac 失败了。在过去 2 年左右的时间里,这种 jar 文件方法对于来自 apache 的 http-mime 库一直运行良好,所以我不明白为什么突然会出现问题。

Apache Jar 缺少符号 是的,我知道 apache 库已被弃用,但这是遗留代码,尽管如此,它应该可以工作,并且将来会更新。

0 投票
1 回答
147 浏览

javascript - 金丝雀版本,如果可能的话,如何用编码模拟它

我在一个项目中,我正在构建一个网站模拟器。我正在测试功能切换如何提供一些缺点,这些缺点可以帮助团队比现在更频繁地发布。

我喜欢模拟的一件事是 Canary 版本是如何工作的。假设我刚刚完成了一个新功能的构建,我需要在生产中对其进行测试。Canary 发布只是为了将此功能推送给少数用户。

你如何用代码模拟这个?我正在使用带有 typescript 的 angular2 anad 构建应用程序。为我可以使用的功能创建了配置文件。

你如何,假设只选择 5% 的随机访问该网站的人来测试特定功能?是否全部通过服务器配置完成(在不同的服务器上运行另一个构建)。

如果有人可以制作一个代码示例来说明我如何在应用程序启动时模拟它,我会很高兴。

自己制作了这段代码:

这可能是一个不好的例子,因为我认为它不会在实时站点(在互联网上)上运行,这仅在 localhost 服务器上进行了测试。基本上,我将一个 1-11 的数字保存在本地存储中,我可以在其中显示基于一个或多个数字的功能。

任何人有一些想法我可以如何轻松地做到这一点?

0 投票
1 回答
219 浏览

kubernetes - Kubenetes - 对于基于 Web 的应用程序,它是否支持基于 cookie 的路由,以便将客户子集路由到新版本的应用程序?

假设有一个 1.0 版的 Web 应用程序在生产中运行。您希望与生产版本 1.0 并排部署新版本 2.0。您希望将流量从用户/客户子集路由到新版本。换句话说,如何在 Kubernetes 上为基于 Web 的应用程序实现真正的金丝雀版本(如本文所定义

Kubernetes文档讨论了金丝雀部署,但没有提到如何实现基于用户的路由。是否可以通过 Kubernetes 提供的现有负载均衡支持实现基于 cookie 的粘性负载均衡。

0 投票
1 回答
7212 浏览

spring - 在 Spring Cloud Netflix Zuul 中以编程方式设置路由

我创建了两个 AWS Beanstalk 环境,每个环境都有自己的应用程序版本。这些环境的 url 是https://beta.myserver.com/v1073https://beta.myserver.com/v1084 这些 url 指向负载均衡器。

现在我也有一个具有以下配置的 Zuul 实现。

对我的应用程序的请求必须具有版本标头。我有一个检查此标头值的 Zuul“预”过滤器。目标是根据标头值路由请求。

我已经能够拦截请求,但无法从过滤器中路由它。代码片段如下。运行代码后,请求仍会尝试转到https://beta.myserver.com/api/ ...

任何建议如何解决这个问题?

0 投票
2 回答
1702 浏览

cloud-foundry - Cloud Foundry 对 Canary 部署的支持

我正在评估 Cloud Foundry 以确定它是否支持我的应用程序的Canary 版本。

到目前为止,我已经找到了对支持金丝雀的 BOSH 的引用。但这似乎是云代工厂在重新部署自己的服务器时使用的一种内部机制。

我也看过cf_canaries但它似乎是为了测试基础设施/整个系统。例如,金丝雀警告内存/cpu/磁盘/网络等使用情况。

是否有任何常用方法来支持使用 Cloud Foundry 进行 Canary 部署?我想它需要以某种方式与 GoRouter 相关联。

我最接近找到解决方案的是来自 Cloud Foundry 的关于Blue-Green Deployments的文档。

但是这种技术不会让我控制流量路由到 Canary 的百分比或流量。