Kubernetes 中如何进行 AB 测试

2020-12-31 17:21:21 +08:00
 idblife
单个服务很好理解。
现在是有 100 个服务,
每个服务都有 AB 两个版本,
如何实现 A 版本的只访问 A 版本的服务呢?
2507 次点击
所在节点    Kubernetes
14 条回复
vemier
2020-12-31 17:27:56 +08:00
istio 很好实现,service 加版本号就行
idblife
2020-12-31 17:34:49 +08:00
@vemier
看了一下文档,没发现啊。
所谓的 AB testing 也是针对单个服务的,但是服务间的调用就控制不了啦。
除非是在服务级别要求复制上一层调用的 http header 传递给下一层调用
vemier
2020-12-31 17:48:59 +08:00
@idblife 有的,你看下 bookinfo 那个 demo,v1 版本的 service 只能调用 v1 版本的其它 service
vemier
2020-12-31 17:50:53 +08:00
@idbl 调用是由 istio 代理转发的,业务代码不用改动,很香
idblife
2020-12-31 17:57:19 +08:00
@vemier
我再仔细看看,非常感谢
eric96
2020-12-31 18:21:50 +08:00
没用过 istio,想问下如果我服务间调用是走的 tcp,还能用 istio 吗
yzbythesea
2020-12-31 18:25:16 +08:00
客户端请求加一个 header 标明版本,然后配置下 Load Balancer,按这个 header 分流。
idblife
2020-12-31 18:29:27 +08:00
@yzbythesea
举个例子
foo 这个服务接收到了客户端请求,
根据客户端 header 里的标明版本访问了 v1 的 foo,
v1 的 foo 去访问 bar 这个服务的时候如何控制访问 v1 的 bar 呢?
idblife
2020-12-31 18:42:48 +08:00
@vemier
这位大哥,请指点下,我又看了遍文档还是没发现具体实现方法。。。
idblife
2020-12-31 18:59:07 +08:00
@yzbythesea
istio 文档里有这个功能,coding 下肯定能实现了,就是还没找到#3 大哥提到的原生解决方案

Headers.HeaderOperations
Overwrite the headers specified by key with the given values
Append the given values to the headers specified by keys (will create a comma-separated list of values)
Remove a the specified headers
vemier
2020-12-31 19:10:43 +08:00
@idblife

具体可以参考 bookinfo/networking 下的配置文件,这是其中一个例子
https://istio.io/latest/docs/tasks/traffic-management/request-routing/#route-based-on-user-identity

然后用 k8s 的方式直接调用
https://stackoverflow.com/questions/53095459/invoke-a-service-from-a-multi-container-pod-with-a-istio-sidecar

新项目用起来很方便,如果是老项目还是在已有框架的基础上修改吧。
pythonee
2021-01-04 20:57:14 +08:00
这个是不是可以考虑在业务代码实现
idblife
2021-01-05 10:54:49 +08:00
@pythonee
业务代码中可以实现,但是成本太高了
9
2021-01-25 14:15:03 +08:00
@idblife

"v1 的 foo 去访问 bar 这个服务的时候如何控制访问 v1 的 bar 呢?"
用 sourceLabels 保证 bar:v1 接受来自 foo:v1 的流量
sourceLabels:
version: v1

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/740711

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX