B是后备时的一种A / B测试

时间:2017-04-18 07:03:52

标签: .net testing microservices staging abtest

实际上,对于我需要的东西,可能存在更好的术语,但我不知道它,并且会感谢任何建议和/或正确编辑问题主题的人。

考虑部署到生产服务器的web api服务S。让我们把它视为真理的工作来源。

然后,我需要更新一些外部依赖项或更改基础架构代码,既不会直接影响核心业务逻辑,也不会影响服务的公共合同。

因此,我得到S_updated,它必须通过阶段阶段,然后才会部署到生产阶段。由于对代码库进行了哪些更改,我希望此服务可以作为先前版本工作,或者由于集成问题而无法工作。仍然存在以某种方式改变系统行为的风险,但我可以忍受它,并期望单元测试是一个相当好的安全网。这也是通过实践证明的。

我真正想要的是能够将S_updated部署到生产环境,并让一些代理服务调度全部或部分(取决于配置)对前S服务的失败请求。

是否存在针对此类功能的一些通用可配置解决方案?

1 个答案:

答案 0 :(得分:1)

Paolo的评论是正确的。您要求Canary release process.

部署后,客户很有可能获得旧服务,并且很少有机会获得新服务。因此,如果呼叫失败(由于新服务中的错误),客户端可以重复呼叫并且很有可能成功到达旧服务。

如何执行此操作取决于您使用的基础架构。

例如,如果您要使用kubernetes群集,则应为服务配置前端负载均衡器,以便仅将一小部分流量发送到正在运行的第二个群集(或第二个服务,如果在同一群集上运行)新版本的服务。

另一个例子是,如果您使用基于DNS的负载平衡解决方案,则必须将DNS策略更改为加权模式,该模式使用新服务将一小部分流量发送到服务器。