找回密码
 开放注册

QQ登录

只需一步,快速开始

微信登录

微信扫码,快速开始

搜索
查看: 218|回复: 0

基于hash计算的多层实验流量切分的实现

[复制链接]

1686

主题

-1399

回帖

700

牛毛

一级牛人

积分
700
发表于 2014-10-12 21:28:47 | 显示全部楼层 |阅读模式 来自 江西省宜春市
 
          1. 配景先容
          站点新成果大概是站内新战略开辟完毕之后,在全流量上线之前要评估新成果大概新战略的优劣,常用的评估要领是A-B测试,做法是在全量中抽样出两份小流量,分别走新战略分支和旧战略分支,通过相比这两份流量下的各指标的差别,我们可以评估出新战略的优劣,进而决定新战略是否全流量。
          上文中提到的抽样是指凭据某种确定的随机化要领,对线上流量举行分别。抽样可以指这种分别的要领,也可以指分别得到的一个流量子集。抽样是一种特殊的小流量,要求对流量的分别必须包管匀称性和随机性,而且可以凭据需求过滤掉不切合范例的部门,我们把抽样的历程分为流量切分和流量筛选两个步调,流量切分是指把全流量举行匀称的打散,提取出此中牢固的流量比例,流量筛选是对流量切分的资助,筛选历程就是从切分好的流量中过滤掉不切合范例的部门,本文重要涉及的是流量切分的实现。
          2. 单层流量切分架构
          做到流量切分的常用的要领是单层流量切分,流量切分必要以某种方法举行,即流量切分的打散依据,比方,我们可以依据流量中的cookie打散,大概是随机打散等,打散的方法差别,切分的东西全集也就差别了,假如我们依据cookie打散,那么我们的切分东西全集就是全部的cookie,假如是随机打散,那么我们的切分东西全集就是该站点的全部的流量。
          
          图1.1 单层流量切分架构表现图
          有了上面的想法,我们若何实现单层流量切分呢?如图1.1所示,我们凭据指定的流量切分方法,将所必要的输入参数先颠末一次hash盘算,产收结果的匀称性和随机性由hash算法来包管,有了hash产生的结果,流量切分的历程还没有竣事,我们还必要将hash结果对应到切分东西的全集上面,实现要领是将切分东西全集看作是一个区间段,然后将hash结果对应到区间段上面,区间的巨细是切分的最小粒度决定的,比方,假如必要最小切分粒度为0.01%,则我们选取的区间段为[0,9999],有了区间段的界说,我们可以将hash结果对一个数值取模,这个数值便是区间段最大值加1,取模之后的结果可以唯一的对应到切分东西全集区间上面,如许我们就将全部的流量打到了流量切分东西全集上面。
          末了,我们再将区间段凭据实验需求细分,分别成多少子区间,用作于实验相比,比方下图所示,将整个100%的区间分为多个子区间,每个子区间利用唯一的编号——sid,作为区间的唯一的标识,sid=1的子区间对应的流量为1%,那么它的子区间就是[0,99],同理,sid=2的第二个1%的子区间对应的区间值为[100,199],如许我们就将一个100%的完备区间分别成了多少个子区间,两个比例雷同的子区间就可以用作于实验战略相比。
          
          图1.2 流量子区间的分别
          3. 可复用流量的多层流量切分架构
          这种单层流量切分方法是一种独占式的流量切分方法,一个子区间只能供应一个实验利用,一个恳求只能掷中一个实验,优点是实验之间解藕,不相互影响,缺点是资源有限,流量分派完毕之后,后续的需求将处于长期的等待与饥饿状态,这种独占式的流量切分方法,显然在实验需求不绝增长的情况下是完全不能满足的,为了管理独占的标题,我们可以接纳多层流量切分方法。
          多层流量切分的头脑是将单层结构扩展为多层结构,如下图所示,多层之间必须满足正交性,这里多层之间的正交性是指某一层的任何一个子区间可以随机的、匀称的对应到其他层上面,如许我们就把一个子区间对其他层的影响匀称的疏散到整个层上面。
          多层流量切分架构可以将实验流量从100%扩展到100%*n,也就说每层中的流量我们都可以用做于实验相比,一次恳求可以同时掷中多个实验,实验流量是复用的,多层流量是满足差别层的实验之间的影响都是匀称、可预估的,开展多层实验的条件是包管这种实验间的影响是可担当的,有一些实验是不容许任何复用,比方,显现类的实验,假如两个实验各自指定了一套显现样式模板,而从显现模块的角度来讲一次恳求只能显现一种样式模板,因此,这里不兼容的实验只能位于同一层中。
          
          图1.3 多层流量切分架构表现图
          多层流量切分的另一个上风是每一层我们可以利用差别的切分方法举行,如许也极大的富厚了流量切分的多样性,那么,尚有另一个标题,每一个流量层中只能接纳一种流量切分方法,假犹如一层中有多种切分方法的需求又若何管理呢?答案是通过层的嵌套来实现,层的嵌套是指在一个层中可以包罗其他的层,如下图所示,矩形表现层,圆形表现切分出来的实验流量,此中,1号层包罗了2、3、4三个层,4号层又包罗9、10、11三个层,为了到达同一层内多种流量切分方法的目的,我们必要将该层切分成多个区间,比方,下图中的2号层就被分成了5、6两个层,但是这两个层也必须接纳雷同的切分方法,由于这两个层相称于把其父层的流量分成了两部门,因而这两部门的产生方法应该是同等的,末了,在5、6层中,我们又可以创建其他的层,这两个层就可以接纳差别的流量切分方法了。
          
          图1.4 流量切分多层嵌套表现图
          理论上,多层流量切分架构的可切分层数是无穷的,可以支持恣意多的流量层,但是,从实现的角度来讲,层数做到无穷是很难实现的,由于,为了包管层和层之间的正交性,我们必须要为每一层实现一套hash算法,包管每种hash算法的结果是正交的,要实现层数的无穷,则必要实现无穷多个包管正交的hash算法,hash算法的增多势必会导致正交性的降落,我们可以实现有限个正交的hash算法,hash算法的数目是要求可以满足全部的实验需求的。下面我们先容一种多层流量切分架构的实现要领。
          为了实现多层流量切分,我们的思绪是先实现一种hash算法,这种hash算法的输入是cookie、随机值等信息,输出是单次hash的结果,而且包管这种hash算法结果充足的匀称和随机,然后将这种hash举行变动,扩展出多个正交的hash算法。
          为了验证单个hash算法的随机性和匀称性,我们举行了实验验证,如下图所示,每一行表现一个100%的全集,每一列表现从全会合抽取出10%,测试的全集是100w,从下面的测试数据来看,每个层中的流量切分结果是比力匀称和随机的。
          
          图1.5 单hash算法匀称性、随机性验证明行数据
          有了单层hash算法,我们必要将单层hash扩展成为多层,这里可以接纳的要领很多,本文接纳的是移位变动的要领将单层hash扩展成为多层hash,多层实验流量切分的真实情况测试数据如下文所示。
          4. 实际数据测试
          为了验证其算法的可行性,我们举行了实际数据测试,测试结果如下:
          表1.2 匀称性验证数据
          
          
          by yangfangwei&huangjin&yaoshiyu由:http://qingdao0i.cn/ 收集整理jnwm发布
您需要登录后才可以回帖 登录 | 开放注册

本版积分规则

帮助|Archiver|小黑屋|通信管理局专项备案号:[2008]238号|NB5用户社区 ( 皖ICP备08004151号;皖公网安备34010402700514号 )

GMT+8, 2025-1-3 15:00 , Processed in 0.147999 second(s), 27 queries , Yac On.

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表