Closed zoumiaojiang closed 5 years ago
要解决什么问题 由于 mip 无法在 cdn 层面做小流量实验,并且 mip 一旦升级就会对全部的 mip 站点产生影响,但是在 mip 核心的升级过程中,经常会发现有些 feature 对性能的收益不好评估,需要做实验进行数据对比后才确认需不需要应用到整体的 mip 站点,为了将影响面降低,需要有一种机制在前端进行一些可控的小流量 abTest 实验
描述一下你理想中的解决方案
维护一份实验配置表,这个配置表能够映射到 mip 核心的任何地方,当 mip 核心需要进行实验的时候,让即将实验的代码块运行在实验命中判断的 if 语句中(这类的方式适合较小代码改动的实验),提供两种实验方式:
基于站点粒度的实验:assertSite() 基于流量控制的实验:assertAbtest()
assertSite()
assertAbtest()
如下代码所示:
import {assertAbTest, assertSite} from 'src/experiment/index' // .... 正常的代码逻辑 if (assertSite('test1')) { // 需要进行 test1 站点粒度实验的代码块 } if (assertAbTest('test1')) { // 需要进行 test1 abTest 流量实验的代码块 } // ... 正常的代码逻辑
实验的配置只需要在 /src/experiment/config.js 文件中进行配置:
/src/experiment/config.js
export default { site: { /** * 如果有实验需求就按照如下的格式配置 */ test1: { description: 'Test1 实验的描述', startTime: '2019-02-13 00:00:00', endTime: '2019-04-10 23:59:59', sites: [ 'baobao.baidu.com', 'muzhi.baidu.com', 'm.120ask.com' ] } }, abTest: { test1: { description: 'abTest1 实验描述', startTime: '2019-02-14 00:00:00', endTime: '2019-03-25 17:08:00', // 所开的流量的百分比 ratio: 100 }, test2: { description: 'abTest1 实验描述', startTime: '2019-03-21 00:00:00', endTime: '2019-03-27 23:59:59', // 所开的流量的百分比 ratio: 50 } } }
当然,这个实验机制的方案对代码维护的要求较高,mip 核心团队应该仔细权衡每次的改动是否需要走实验机制,最好每次只进行一个实验。
要解决什么问题 由于 mip 无法在 cdn 层面做小流量实验,并且 mip 一旦升级就会对全部的 mip 站点产生影响,但是在 mip 核心的升级过程中,经常会发现有些 feature 对性能的收益不好评估,需要做实验进行数据对比后才确认需不需要应用到整体的 mip 站点,为了将影响面降低,需要有一种机制在前端进行一些可控的小流量 abTest 实验
描述一下你理想中的解决方案
维护一份实验配置表,这个配置表能够映射到 mip 核心的任何地方,当 mip 核心需要进行实验的时候,让即将实验的代码块运行在实验命中判断的 if 语句中(这类的方式适合较小代码改动的实验),提供两种实验方式:
基于站点粒度的实验:
assertSite()
基于流量控制的实验:assertAbtest()
如下代码所示:
实验的配置只需要在
/src/experiment/config.js
文件中进行配置:当然,这个实验机制的方案对代码维护的要求较高,mip 核心团队应该仔细权衡每次的改动是否需要走实验机制,最好每次只进行一个实验。