实际上,对于我需要的东西,可能存在更好的术语,但我不知道它,并且会感谢任何建议和/或正确编辑问题主题的人。
考虑部署到生产服务器的web api服务S
。让我们把它视为真理的工作来源。
然后,我需要更新一些外部依赖项或更改基础架构代码,既不会直接影响核心业务逻辑,也不会影响服务的公共合同。
因此,我得到S_updated
,它必须通过阶段阶段,然后才会部署到生产阶段。由于对代码库进行了哪些更改,我希望此服务可以作为先前版本工作,或者由于集成问题而无法工作。仍然存在以某种方式改变系统行为的风险,但我可以忍受它,并期望单元测试是一个相当好的安全网。这也是通过实践证明的。
我真正想要的是能够将S_updated
部署到生产环境,并让一些代理服务调度全部或部分(取决于配置)对前S
服务的失败请求。
是否存在针对此类功能的一些通用可配置解决方案?
答案 0 :(得分:1)
Paolo的评论是正确的。您要求Canary release process.
部署后,客户很有可能获得旧服务,并且很少有机会获得新服务。因此,如果呼叫失败(由于新服务中的错误),客户端可以重复呼叫并且很有可能成功到达旧服务。
如何执行此操作取决于您使用的基础架构。
例如,如果您要使用kubernetes群集,则应为服务配置前端负载均衡器,以便仅将一小部分流量发送到正在运行的第二个群集(或第二个服务,如果在同一群集上运行)新版本的服务。
另一个例子是,如果您使用基于DNS的负载平衡解决方案,则必须将DNS策略更改为加权模式,该模式使用新服务将一小部分流量发送到服务器。