2017-04-18 31 views
0

实际上,对于我所需要的可能存在更好的术语,但我不知道它,并且会感谢任何人提出建议和/或编辑该问题的主题适当。B是退步时的一种A/B测试

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

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

因此,我得到S_updated必须通过阶段的阶段,然后才能部署到生产。由于对代码库所做的更改,我期望此服务既可以作为以前的版本工作,也可以不工作,因为集成问题。仍然有改变系统行为的风险,但我可以忍受,希望单元测试是一个相当好的安全网。实践也证明了这一点。

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

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

+1

你需要研究金丝雀的释放和蓝/绿部署。这些是你所描述的模式。 – Paolo

回答

1

保罗的评论是正确的。您正在询问Canary release process.

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

如何做到这一点取决于您使用的基础设施。

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

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

+0

是的,非常类似于加那利。但是我不能划分请求,因为用户基数太小。=)测试需要几个月。 –

+1

另一种替代方法是使用API​​网关并对其进行配置,以将失败的请求重新路由到替代端点。用Hystrix的东西来看看Kong或Zuul。如果你的用户无法为你测试,也可以考虑编写更多的自动化测试:) –

相关问题