【问题标题】:How to perform A/B Testing in Polymer Web Components?如何在 Polymer Web 组件中执行 A/B 测试?
【发布时间】:2017-02-11 20:58:13
【问题描述】:

我遇到一个客户的情况:他们想做 A/B 测试。

据我所知,这大部分时间都发生在 LoadBalancer 级别 (Kubernetes),将用户重定向到应用程序的某个版本(例如,使用新版本的 Gmail 并且正在推出一个版本)。

现在对于 Web 组件,该客户希望有一种“dom-if”的情况,即如果组件中的某个要求得到满足,功能就会被打开。这当然会增加开销。

我想知道这是否是要走的路。他们对这个客户的推理是,该组件可以在 100 多个应用程序中使用,然后创建一个构建并对其进行处理,这可能太麻烦了,而在微观级别(如在组件中)将是最好的方法。他们正在关注 Linkedin/AirBnB。

据我所知,这些公司没有使用 Web Components。

问题是:什么是可取的?在微观级别或应用程序级别进行 A/B 测试(并使用 kubernetes 等负载平衡器)。

【问题讨论】:

  • 嗨 - 我只是意识到我的答案可能不是你想要的。你能澄清你的问题和你使用的标签吗? Polymer 是一个前端框架,但您的问题围绕后端和托管相关技术展开。您可能还想查看 SO 的How to ask 指南。
  • 您好,在这种情况下,Web 组件连接到后端的 api。两者都需要同步。所以 A/B 测试,源于 Web 组件。是不是更清楚一点?
  • 也许——我认为我的回答在某种程度上适用
  • 很高兴知道您是否找到了适合您的解决方案?
  • 仍在努力。一般来说,开发人员倾向于使用单独的组件进行单独的构建,而不是使用标志/dom-ifs 的构建。

标签: javascript polymer kubernetes web-component ab-testing


【解决方案1】:

不确定这是否涵盖了您的全部问题 - 但在微服务架构中,您将在每个服务中单独进行测试。

说到 Kubernetes 作为托管服务的平台,您可以拥有一个 LoadBalancer 服务,它从不同的 Deployments 中选择 Pods。每个Deployment 可以提供不同的容器/应用程序版本,也可以提供相同的容器但具有不同的设置。

这是一个小例子 - 单个服务有一个选择器 (app: testme),它匹配来自两个部署的 pod。部署定义来自相同镜像 (yourcontainerimage:version) 但具有不同环境变量的容器。此外,不同数量的副本将允许您将不同比例的流量路由到一个或另一个选项。

apiVersion: v1
kind: Service
metadata:
  name: app
spec:
  ports:
    - name: http
      port: 8080
  selector:
    app: testme
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: app-deployment-a
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: testme
        ab: on
    spec:
      containers:
      - name: app
        image: yourcontainerimage:version
        env:
        - name: FEATURE_TOGGLE
          value: true
        ports:
        - containerPort: 8080
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: app-deployment-b
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: testme
        ab: off
    spec:
      containers:
      - name: app
        image: yourcontainerimage:version
        env:
        - name: FEATURE_TOGGLE
          value: false
        ports:
        - containerPort: 8080

根据您的应用程序和您测试的功能类型,您可能需要调整服务,例如启用或禁用SessionAffinity 的服务。您可以在official docs 中找到详细信息。

【讨论】:

    【解决方案2】:

    Variant 明确解决了分布式服务器端(例如微服务)的情况。 (免责声明:我在那里工作)。无论哪个组件首先接触实验,都会创建一个 Variant 会话(独立于主机应用程序可能具有的会话的任何概念,例如 HTTP 会话),然后将会话句柄传递给下一个组件,该组件将能够检索它以及所有来自 Variant 服务器的实验相关数据。唯一的问题是我们目前只支持 Java 组件。

    同样,将负载均衡器等部署基础设施用于 A/B 测试等应用程序问题在很多层面上都是一个坏主意,应该放弃。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-01
      • 1970-01-01
      • 2023-03-03
      相关资源
      最近更新 更多