|-------------------|-------------------|
| expt2:50% | |
|---------|---------| |
|expt3:25%|expt4:25%| |
|---------|---------| expt1:50% |
|expt6:25%| | |
|---------|expt5:25%| |
|expt7:25%| | |
|---------|---------|-------------------|
- 实现流量的分层和独占逻辑,支持实验正交和互斥(使用fnv做hash后取模,每个layer分为100个mod)
- 每个实验内部可组件化添加selector,filter,trafficer,用于支持白名单,灰度,人群规则筛选,多种分流策略等
- 食用方式见example
- 更多功能待扩展
根据个人经验,业务接入ab系统,场景大概分为3类。
- 可变的配置化参数
在同一个接口内,返回数据不同,例如facebook的planout的接入方式:value=get(key), 此种后端接口结构不会变化,对返回数据做override即可实现。
- 接口版本的变化
不同版本对应不同接口,最常见的是接入多种推荐算法进行比对,不保证接口数据结构的一致,此种一般是将ab系统接入到网关层进行路由分发。
- 完全无法抽象的
例如业务流程改版,样式/数据/接口等都完全不一样了,这种只能提供接口,ab系统作为分流工具,将版本id提供给业务,业务代码内写if else逻辑。
为了减轻业务接入ab系统时的开发迭代,可以使用envoy-http-filter-lua对业务接口进行流量拦截,可以无开发量地接入 可变的配置化参数/接口版本的变化 两种场景。对接口响应效率的影响还需评估