Javascript 如何在聚合物网络组件中执行A/B测试?

Javascript 如何在聚合物网络组件中执行A/B测试?,javascript,polymer,kubernetes,web-component,ab-testing,Javascript,Polymer,Kubernetes,Web Component,Ab Testing,我在一位客户那里遇到了一种情况:他们想做a/B测试 据我所知,这大部分时间发生在LoadBalancer级别(Kubernetes),将用户重定向到应用程序的某个版本(例如新版本的Gmail和正在推出的版本) 现在,对于web组件,该客户希望有一种“DomIf”的情况,即如果组件中满足了特定的需求,就可以打开特性。这当然会增加开销 我不知道这是不是一条路。他们对该客户的推理是,该组件可以在100多个应用程序中使用,然后创建一个构建并对其进行操作,这可能太麻烦了,在微观层面(如组件中)将是最好的方

我在一位客户那里遇到了一种情况:他们想做a/B测试

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

现在,对于web组件,该客户希望有一种“DomIf”的情况,即如果组件中满足了特定的需求,就可以打开特性。这当然会增加开销

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

据我所知,这些公司没有使用Web组件


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

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

说到Kubernetes作为承载服务的平台,您可以使用一个
负载平衡器
服务,从不同的
部署中选择
吊舱
。每个
部署
可以提供不同的容器/应用程序版本,也可以提供相同的容器但具有不同的设置

这里有一个小例子-单一服务有一个选择器(
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
。您可以在中找到详细信息。

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


同样,使用部署基础设施(如负载平衡器)来解决A/B测试等应用程序问题在很多层面上都是一个坏主意,应该放弃。

Hi-我刚刚意识到我的答案可能不是你想要的。你能澄清你的问题和你使用的标签吗?Polymer是一个前端框架,但您的问题围绕后端和托管相关技术。您可能还想查看SO.Hi的指南,在这种情况下,web组件连接到后端的api。两者都需要同步。所以A/B测试,从Web组件的角度进行推理。是不是更清楚一点?也许-我想我的答案适用于某些程度。如果你找到了一个对你有效的解决方案,我会很高兴知道的。还在努力。一般来说,开发人员倾向于使用单独的组件进行单独的构建,而不是使用带有标志/dom ifs的一个构建。