使用Istio进行金丝雀或A / B部署时控制用户体验

问题描述 投票:0回答:2

我有一个具有多个服务的应用程序,这些服务从主应用程序服务中调用。我了解执行金丝雀和A / B部署的基本知识,但是我看到的所有示例都显示了一个循环机制,其中每个请求在版本之间进行切换。

我希望的是,一旦给定的用户/会话与某个版本相关联,它将保持这种方式以避免给用户带来混乱的体验。

如何通过Kubernetes或Istio / Envoy实现?

kubernetes istio envoyproxy canary-deployment
2个回答
0
投票

我们一直在努力解决这个问题,因为我们希望将测试微服务部署到生产中,并且仅在第一个请求包含“暗发布”标头时才公开它们。

如乔纳斯(Jonas)所述,从理论上讲,Cookie和标头值可用于实现所需的内容。如果您正在启用的服务处于边缘状态,而您的用户正在直接访问,则非常容易实现。

问题是,您提到您有多种服务。如果您有一条链,其中用户访问边缘服务A,然后再对服务B,服务C等进行调用,则标头或cookie不会从一个服务传播到另一服务。

这是我们尝试进行分布式跟踪时遇到的相同问题。 Istio文档当前具有此常见问题解答:

https://istio.io/faq/distributed-tracing/#istio-copy-headers

总而言之,您将必须手动进行标头传播。幸运的是,我的大多数微服务都是基于Spring Boot构建的,我可以通过一个简单的5行类来实现头传播,该类可以拦截所有传出的调用。但这仍然是侵入性的,必须在任何地方进行。服务网格的对立面。

可能有一种巧妙的解决方法,但是很难从文档中推断出什么是可能的,什么不是。我已经看到Istio开发人员提出的一些github问题来解决此问题,但是我看到的每个问题在最初的热情之后都变得过时了。


1
投票

您可以使用Request Routing - Route based on user identity在Istio上执行此操作,但我不知道该功能的成熟程度。也可以根据Cookie或标头值进行路由。

© www.soinside.com 2019 - 2024. All rights reserved.