1. 背景介绍
站点新功能或者是站内新策略开发完毕之后,在全流量上线之前要评估新功能或者新策略的优劣,常用的评估方法是A-B测试,做法是在全量中抽样出两份小流量,分别走新策略分支和旧策略分支,通过对比这两份流量下的各指标的差异,我们可以评估出新策略的优劣,进而决定新策略是否全流量。
上文中提到的抽样是指按照某种确定的随机化方法,对线上流量进行划分。抽样可以指这种划分的方法,也可以指划分得到的一个流量子集。抽样是一种特殊的小流量,要求对流量的划分必须保证均匀性和随机性,并且可以根据需求过滤掉不符合规范的部分,我们把抽样的过程分为流量切分和流量筛选两个步骤,流量切分是指把全流量进行均匀的打散,提取出其中固定的流量比例,流量筛选是对流量切分的辅助,筛选过程就是从切分好的流量中过滤掉不符合规范的部分,本文主要涉及的是流量切分的实现。
2. 单层流量切分架构
做到流量切分的常用的方法是单层流量切分,流量切分需要以某种方式进行,即流量切分的打散依据,例如,我们可以依据流量中的cookie打散,或者是随机打散等,打散的方式不同,切分的对象全集也就不同了,如果我们依据cookie打散,那么我们的切分对象全集就是所有的cookie,如果是随机打散,那么我们的切分对象全集就是该站点的所有的流量。
图1.1 单层流量切分架构示意图
有了上面的想法,我们如何实现单层流量切分呢?如图1.1所示,我们按照指定的流量切分方式,将所需要的输入参数先经过一次hash计算,产生结果的均匀性和随机性由hash算法来保证,有了hash产生的结果,流量切分的过程还没有结束,我们还需要将hash结果对应到切分对象的全集上面,实现方法是将切分对象全集看作是一个区间段,然后将hash结果对应到区间段上面,区间的大小是切分的最小粒度决定的,例如,如果需要最小切分粒度为0.01%,则我们选取的区间段为[0,9999],有了区间段的定义,我们可以将hash结果对一个数值取模,这个数值等于区间段最大值加1,取模之后的结果可以唯一的对应到切分对象全集区间上面,这样我们就将所有的流量打到了流量切分对象全集上面。
评论