CN104281611B - 网站测试***中的用户流量分配方法及装置 - Google Patents
网站测试***中的用户流量分配方法及装置 Download PDFInfo
- Publication number
- CN104281611B CN104281611B CN201310284877.3A CN201310284877A CN104281611B CN 104281611 B CN104281611 B CN 104281611B CN 201310284877 A CN201310284877 A CN 201310284877A CN 104281611 B CN104281611 B CN 104281611B
- Authority
- CN
- China
- Prior art keywords
- experimental group
- bucket
- customer flow
- experiment
- mark
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3664—Environments for testing or debugging software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/958—Organisation or management of web site content, e.g. publishing, maintaining pages or automatic linking
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Data Mining & Analysis (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本申请公开了网站测试***中的用户流量分配方法及装置,所述方法包括:接收到用户流量后,根据所述用户流量对应的访问请求中携带的信息,确定所述用户流量对应的用户标识,以及与所述用户流量匹配的实验组;结合所述匹配的实验组的标识以及所述用户标识进行取模运算,确定所述用户流量在各个匹配的实验组中需进入的分桶的标识;并且,上一实验组中进入同一分桶的用户流量平均分配到下一实验组的各个分桶中;将所述用户流量分配到所述匹配的实验组对应的分桶中。通过本申请,能够在实现会话粘连的同时,降低各实验组中的实验对下层实验组中各实验的干扰度。
Description
技术领域
本申请涉及网站测试技术领域,特别是涉及网站测试***中的用户流量分配方法及装置。
背景技术
网站在推出一项功能时,一般在全量上线前都需要进行算法调优、用户体验比较、页面版本效果比较等实验。在最初的版本中,通常会设计多种方案,并对各种方案进行测试,对比方案调整前后的用户行为数据,判断哪个方案更合理、用户体验更好等等,以此来不断优化设计方案。例如,某网站具有搜索功能,在搜索结果页面中提供了筛选项,目的是帮助用户更快、更准确找到所需信息。然而,各筛选项应该使用怎样的筛选条件,很大程度上取决于用户在查找搜索结果的时候,更关注哪些维度的信息。因此,对于已经上线的功能,在最初的版本中,可以多列举一些筛选项,然后通过用户行为数据进行分析,例如,发现用户在使用筛选项功能时,使用地区、排序、单价、经营模式等的比例较多,说明用户对这几方面筛选需求较大,比较关注这几个维度的信息,因此,通过优化之后,在新的版本中,就可以基于这几个维度来设置筛选项。
其中,在测试的过程中,需要用到大量的用户行为数据进行统计,换言之,需要一定量的用户流量实验样本才能做有效的实验效果评估,因此,网站的用户流量对于网站的测试方来说是宝贵的。然而一个页面内需要进行的测试一般是多方面的,针对不同的测试目的,需要设计不同的实验(所谓实验,就是通过修改程序执行时的一个或多个条件,来测试不同情形、版本、功能之间的效果对比),并且针对同一测试目的,一般还需要设置多个实验,以便对比不同的实验分别获得的效果。因此,对于同一个网页来说,需要进行的实验数量往往是非常多的,并且每个实验都需要大量的用户流量。然而,网站单位时间内的用户流量是有限的,如果要在同样长的时间段内做更多的实验,就需要提高用户流量的利用率。
现有技术中,在对Web页面做效果对比实验时,采用的是完全隔离的方法,即根据用户id或随机的方式,将流量分成n份,每份流量可以针对Web页面的任意部分独立做一个实验。也就是说,假设一个Web页面设计了n个实验,则可以使得每个实验对应一个分桶(对应“流量”的概念),这样,可以将页面流量分配到各个分桶中,给分桶中的实验做流量样本。例如,假设将页面流量分成10份,即分到10个分桶,1个基准桶用于效果对比不放置实验,9个测试分桶中,每个分桶可放置一个实验,并假设每个实验需1000万用户流量样本,这样如果该网站每天的用户流量是1000万,则每个实验每天得到的用户流量是100万,需要10天时间来完成这9个实验。
这种实验方法的流量利用率很低,因为每个用户流量只会进入一个分桶,只给该分桶内的实验做流量样本。在总的用户流量相对固定的前提下,要想在同样的时间段内做更多的实验,方法就是让一个用户流量进入多个分桶,能够给多个实验做流量样本。
然而,如果让一个用户流量多个实验做流量样本,有很多问题是需要解决的。其中一个问题就是干扰问题,也就是说先进入的分桶中实验可能会给后进入的分桶中的实验带来干扰。例如,假设某用户流量先后进入分桶2和分桶4,其中,分桶2是用于测试在使用不同图片的情况下的效果,而分桶4是用于测试在使用同一图片、不同图片大小的情况下的效果,这样,在完成分桶4中的实验之后,就会无法确定最终的效果是由于图片不同引起的,还是由于图片大小不同引起的,也就是说,分桶2中的实验结果对分桶4中的实验结果造成的干扰。可见,需要尽可能的降低某个实验受其他实验干扰的干扰度。
另一个问题就是会话粘连问题。所谓的会话粘连,就是用户短时间内重新刷新页面时,刷新后会产生新的用户流量,而新的用户流量进入的分桶应该还是刷新前那次产生的用户流量进入的分桶,这样才能使得给用户展现的页面版本、风格等保持和上一次看到的一样。
现有技术中的一些解决方案,一般都是仅解决上述某一方面的问题,而不考虑另一方面的问题。但是,显然,以上两个问题都很重要,如果只解决其中一个方面的问题,则仍然会使得各个实验的效果受到影响。因此,如何同时解决干扰问题以及会话粘连问题,是迫切需要本领域技术人员解决的技术问题。发明内容
本申请提供了网站测试***中的用户流量分配方法及装置,能够在实现会话粘连的同时,降低各实验组中的实验对下层实验组中各实验的干扰度。
本申请提供了如下方案:
一种网站测试***中的用户流量分配方法,所述网站测试***中包括至少两个实验组,每个实验组具有唯一的标识,每个实验组内包括位于多个分桶内的多个实验,每个分桶具有实验组内唯一的标识,不同实验组的实验之间相对独立,所述方法包括:
接收到用户流量后,根据所述用户流量对应的访问请求中携带的信息,确定所述用户流量对应的用户标识,以及与所述用户流量匹配的实验组;
结合所述匹配的实验组的标识以及所述用户标识进行取模运算,确定所述用户流量在各个匹配的实验组中需进入的分桶的标识;其中,在同一实验组中,用户流量需进入的分桶的标识仅由所述用户标识决定,以便同一用户的用户流量对于同一实验组而言,需进入的分桶的标识是固定的,且上一实验组中进入同一分桶的用户流量平均分配到下一实验组的各个分桶中;
根据所述用户流量在各匹配的实验组中需进入的分桶的标识,将所述用户流量分配到所述匹配的实验组对应的分桶中。
一种网站测试***中的用户流量分配装置,所述网站测试***中包括至少两个实验组,每个实验组具有唯一的标识,每个实验组内包括位于多个分桶内的多个实验,每个分桶具有实验组内唯一的标识,不同实验组的实验之间相对独立,所述装置包括:
接收单元,用于接收到用户流量后,根据所述用户流量对应的访问请求中携带的信息,确定所述用户流量对应的用户标识,以及与所述用户流量匹配的实验组;
分桶标识确定单元,用于结合所述匹配的实验组的标识以及所述用户标识进行取模运算,确定所述用户流量在各个匹配的实验组中需进入的分桶的标识;其中,在同一实验组中,用户流量需进入的分桶的标识仅由所述用户标识决定,以便同一用户的用户流量对于同一实验组而言,需进入的分桶的标识是固定的,且上一实验组中进入同一分桶的用户流量平均分配到下一实验组的各个分桶中;
分配单元,用于根据所述用户流量在各匹配的实验组中需进入的分桶的标识,将所述用户流量分配到所述匹配的实验组对应的分桶中。
根据本申请提供的具体实施例,本申请公开了以下技术效果:
通过本申请实施例,可以结合实验组的标识以及用户流量对应的用户标识进行取模运算,来确定用户流量在各个实验组中需进入的分桶的标识;其中,在同一实验组中,用户流量需进入的分桶的标识仅由用户标识决定,以便同一用户的用户流量对于同一实验组而言,需进入的分桶的标识是固定的,这样可以就可以达到会话粘连的目的;同时,根据取模运算,可以是上一实验组中进入同一分桶的用户流量平均分配到下一实验组的各个分桶中,达到离散分配的目的,降低各实验组中的实验对下层实验组中各实验的干扰度,并且同一实验组中的各实验受到的干扰度基本相同,因此,可以保证同一实验组内各实验效果的可比性。
其中,为了获得更好的平衡离散效果,还可以将用户标识、实验组标识结合黄金比例质数进行哈希运算之后,再将以实验组内的分桶数为模数进行取模运算。进一步的,还可以首先将实验组标识加上一个长整型数之后再参与到具体的运算中,使得针对不同的实验组得到的相加结果之间的比值趋近于1,这样也可以获得更好的离散效果。
关于跨越多个实验组的关联实验,可以将关联实验的标识、跨越的实验组的标识、在各实验组中关联实验所在的分桶号等信息写入到用户流量的Cookie中,由于用户流量在不同的应用间流转时,Cookie信息可以随用户流量携带,因此能够支持关联实验跨越的实验组位于不同的应用上的情形。
当然,实施本申请的任一产品并不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的按照模块划分实验组的示意图;
图2是本申请实施例提供的按照模块及其内部的逻辑层次划分实验组的示意图;
图3是本申请实施例中带条件的实验的示意图;
图4是本申请实施例提供的带条件的实验比对方式示意图;
图5是本申请实施例中跨越多个实验组的关联实验的示意图;
图6是实验之间的干扰度示意图;
图7是另一实验之间的干扰度示意图;
图8是本申请实施例中提供的方法的流程图;
图9是本申请实施例中提供的装置的示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本申请保护的范围。
首先需要说明的是,本申请实施例的目的是,在一个用户流量能够进入多个分桶,给多个实验做流量样本的情况下,能够尽量降低实验之间的干扰度,并且能够实现会话粘连。为了更好地理解本申请实施例,首先对一些概念进行简单的介绍。
(1)实验
实验是划分出部分流量,通过修改程序执行时的一个或多个条件,来测试不同情形、版本、功能之间的效果对比。例如,需要对某Web页面中某页面元素在被设置为不同的图片样式时产生的效果进行实验,则可以分别在不同的实验中设置不同的图片样式;例如,实验1对应图片样式1,位于分桶1中,而实验2对应图片样式2,位于分桶2中,则某用户甲在浏览该Web网页时,如果其用户流量进入分桶1,则会按照实验1的条件对页面的参数进行配置,也即,将该页面元素显示为图片样式1,相应的,用户甲在页面中看到的该页面元素会按照图片样式1进行显示;另外,如果还有一个用户乙也在浏览该Web页面,并且该用户乙的用户流量被分配到分桶2,则用户乙在页面中看到的该页面元素会按照图片样式2进行显示。也就是说,进入不同分桶的用户看到的页面显示效果会是不一样的,相应的,就可以对用户在页面中的操作行为进行记录,例如,包括用户点击了哪些链接、执行了何种特定的行为(例如,预订了某商品等等),并且还可以在监测到某种特定行为时,追溯该行为是由何引导的,例如,是否点击了某页面元素,如果是,则认为该行为是由该页面元素引导的,等等。总之,可以根据进入各个分桶的用户流量,对各种实验条件下的用户行为数据进行分析,进而进行比对,以便为***优化提供数据基础。
另外,还可能存在多变量测试,在多变量测试中,每个可以改变的地方称为“因素”,而每种因素的可能具有的状态称为“水平”。比如,想同时改变某个搜索产品的按钮颜色、排序算法、索引数据这3个地方,那需要一个3因素的多变量测试。如果,按钮的颜色为3种,那“按钮颜色”这个因素是3水平的。多变量测试允许在同一时间测试多个因素处于不同水平时对于产品的影响。通过多变量测试,可以清楚的看到不同的变化组合对最终效果的影响。
例如,如果对某个搜索产品进行测试的范围为:3种按钮颜色、2种排序算法和2种索引数据,那么可以进行排列组合,产生不同的版本,使得每个版本对应一种水平的组合,也就是说,需要构造3*2*2=12个实验来参加测试。接下来只要确定好每个实验的流量分配即可。
(2)实验组
从原理上来看,用户流量在任意的实验间都可以复用,但是,在实际应用中,有些实验是针对相同的实验目标点设计的,例如,两个实验都是为了测试搜索模块中筛选项的设置,对于这两个实验而言,一个用户流量只能进入其中一个实验,因为同时给实验目标点相同的多个实验做样本会毫无意义,并且根本无法知晓最终体现的是哪个实验的效果。而对于实验目标点不同的实验来说,比如针对搜索模块的实验和针对推荐模块的实验,它们之间虽然存在一定干扰度(该概念后续会有介绍),但不是完全的干扰关系,可以进行交叉流量的并行实验,也就是可以让一个用户流量先后给这两个实验做流量样本。
为此,具体在进行交叉流量的实验之前,首先可以对各个实验进行分组,分组的原则是,不同实验组的实验之间具有相对独立性。例如,在实际应用中,往往是针对一个Web页面进行一系列的测试,而该Web页面可能存在多个功能模块,因此,可以将同一功能模块下的各个实验作为一个实验组,换言之,不同功能模块下的实验就位于不同的实验组中。例如,如图1所示,某Web页面中包括搜索模块、推荐模块以及广告模块这样三个功能模块,则可以根据各个实验分别是针对哪个模块做的,来划分为三个实验组。每个实验组内可以包含多个实验,每个实验可以对应一个分桶(当然也可能存在一个分桶中包括多个实验的情况,后续会有介绍),用户访问该Web页面时,用户流量将穿过每个模块的其中一个分桶,分别为这几个分桶中的实验作为流量样本进行测试。
当然,一个页面中的功能模块数量一般可能就是少数的几个,甚至只有一个,因此,在实际应用中,为了进一步提高用户流量的复用度,还可以在模块划分为多个逻辑上的层次,这样,每个层次都可以对应一个实验组。例如,如图2所示,可以将模块划分为UI、BizLogic、Data等多层。
需要说明的是,也可以是对部分模块进行层次的划分,而部分模块不进行划分,或者,还可以对某模块进行更细的划分,等等,只要保证不同实验组中的实验之间相对独立即可。另外,在按照层次划分实验组的情况下,可以将程序执行的条件提炼成参数,并定义在层上,此时,具体的实验就是通过对层的参数值的修改并将修改值注入到程序执行上下文中,来实现测试的目标。并且,每个层可以定义一个或多个参数,每个参数有默认值。层上的一个实验可以对层的一个或多个参数设置成和默认值不一样的值。
另外需要说明的是,每个层对应一个应用,同一模块的不同的层可能对应到不同的应用。比如图2中推荐模块的UI层对应的应用是TmallSearch,但是Data层对应的应用是Aladdin。其中,应用指的是一个Web服务器集群,对用户流量的解析、分流、参数值处理是在具体应用的机器上执行的。
(3)流量分桶测试
所谓的分桶测试,是让不同的用户在访问特定的互联网产品的时候,由***来决定用户的分组号,然后根据分组号,令用户看到的是不同的产品版本,用户在不同版本产品下的行为将被记录下来,这些行为数据通过数据分析形成一系列指标,而通过这些指标的比较,最后就形成了各版本之间孰优孰劣的结论。这里所说的用户的分组号,就被形象地称为分桶号,每个分桶中设置一个实验,被分到同一个桶中的用户流量共同作为该实验的流量样本。
在本申请实施例中,每个实验组内都可以有自己的分桶方式。其中,在图2所示的方式中,同一模块内的各层的分桶数需要是相同的,而不同模块之间的层的分桶数可以相同也可以不同(当然最好同一页面所有的层的分桶数都相同,这样更有利于获得更好的离散效果,后文会有详细的介绍)。
其中,每个实验组的分桶中,有一个基准桶,里面不放置实验,其他都是测试桶,测试桶里可以放置实验。基准桶是不放置实验的,反映的是现有版本的效果,是用来和测试桶进行效果对比的,可以对比出测试桶里的实验的效果。
一个用户流量进入页面后,会进入各个实验组,到达某实验组时,进入该实验组的一个分桶,获取该分桶里的实验信息。对应到图2中,就相当于用户流量会进入到各个模块和模块内的各层,到达某一层时进入该层的一个分桶,获取分桶里的实验信息。其中,流量进入各实验组是有先后顺序的,比如某搜索页面的流量先进入搜索模块,然后再分别同时进入推荐模块和广告模块。进入推荐模块时,先进入UI层,再进入Data层,等等。先前的层的运行逻辑可能导致流量不再进入后续的层,或跳过某几层。比如进入推荐模块的UI层后,可能UI层代码逻辑认为该流量无需进行Data层的处理,从而流量不再进入Data层。当然,这种用户流量进入模块和层的次序、是否进入模块和层的处理是由页面本身的代码来控制的,不由实验***控制。
(4)带条件的实验
如前文所述,一般情况下,一个分桶会对应一个实验,但在实际应用中,可能会存在一些特殊的实验。例如,如果实验是针对一些特定用户的,那么需要加上实验条件,比如用户的性别、年龄、地域、使用设备、浏览器类型、操作***类型等等。对于带条件的实验来说,分桶里的流量并不是全部都会穿过实验,例如,某分桶中设置了一个带条件的实验,该实验的条件是用户所处的地域为浙江,则当一个用户流量进入该分桶之后,会首先判断该用户流量是否符合该条件,如果不符合,不会真正按照该实验的值对相关的参数进行配置。此时,为了充分利用用户流量,可以在一个分桶里放置多个实验条件互斥的实验。如图3所示,一个分桶中可以放置三个带条件的实验,三个条件分别为“浙江地区用户”、“江苏地区用户”、“其他地区用户”,一个用户流量进入一个分桶时,实验***可以先判断是否和其中的一个实验的实验条件相匹配,如果有条件匹配的实验则穿过该实验,如果没有条件匹配的实验则不穿过实验,即会穿过其中一个实验或者不穿过实验。其中,如果某用户流量进入了某分桶,但是没有穿过任何实验,可以采用默认值对相关的参数进行配置。
可见,对于一个分桶来说,如果存在带条件的实验,那么穿过每个带条件实验的流量都只是所在分桶的一部分流量。对于带条件的实验而言,不能直接和基准桶进行效果对比,因为基准桶是不带条件的,两者的流量样本不平等。如果需要做带条件的实验同时又想和现有版本做效果对比,可以在同一层的另一个分桶内创建一个带同样条件的对比实验,对比实验采用的是现有版本。如图4,实验4是实验1的对比实验,实验5是实验2的对比实验,实验6是实验3的对比实验。
(5)跨实验组的关联实验
虽然之前提到不同实验组之间的实验具有相对独立性,但是,也可能存在一些实验需要跨越不同的实验组。例如,虽然模块与模块之间是独立的,模块内部的层与层之间是相对独立的,但也可能会存在较大的关联度,这时可能需要做跨层的关联实验。例如,参见图5,假设一个模块包括了层A、层B、层C,一个新增加的功能跨越了层A和层B,实验5用于评估该新功能的效果,该实验占用了层A的分桶6和层B的分桶5。
(6)不同实验组的实验间的干扰度
如前文所述,用户流量的复用是在不同的实验组之间进行的,因为不同实验组之间的实验相对独立,但是,这种独立只是相对同一实验组内的实验而言的,其实仍然可能存在一定的关联,因此,当用户流量穿过多个实验时,先穿过的实验仍然有可能会对后穿过的实验造成干扰。当然,这只是一种可能,也有可能先穿过的实验不会对后穿过的实验造成干扰。
例如,当流量穿过多个层时,如果穿过了多个实验,那么这几个实验之间就存在干扰。如图6,一个用户流量穿过了层A的分桶6、层B的分桶4,层A的分桶6里有实验5,层B的分桶4里有实验12,那么对于这个用户流量样本而言,实验5和实验12相互之间可能存在干扰。同理,实验5和实验16相互之间存在干扰。
为了评判一个***在对抗干扰方面的能力,一般会引入干扰度的概念。例如,实验5对实验12的干扰度为:同时穿过实验5和实验12的流量样本数/穿过实验12的流量样本数。如果这个比值很小,可以认为穿过层B分桶4的流量主要体现的是实验12的效果而不是实验5的效果,也即,层A分桶6中的实验5对层B分桶4中的实验12的干扰度比较低。对于其他实验对层B分桶4的干扰度计算和实验效果的评估也是同样的原理。
例如,假设穿过层A分桶6中的实验5的用户流量数为100个,假设这100个用户流量中有10个被分配到了层B分桶4中(其他的90个被分配到层B的其他各分桶中),则层A分桶6中的实验5对层B分桶4中的实验12的干扰度就是10/100=10%,如果该比值小于一定的阈值,则证明这种干扰度是可容忍的。相反,如果穿过层A分桶6中的实验5的100个用户流量全部都进入层B分桶4中,则该层A分桶6中的实验5对层B分桶4中的实验12的干扰度就是100%,这些用户流量穿过层B分桶4中的实验12之后,可能完全无法分辨其效果是由实验5带来的,还是由实验12带来的。当然,这种干扰度应该被看作“最大干扰度”,因为如果实验5和实验12之间完全不相关,则即使穿过层A分桶6中的实验5的100个用户流量全部都进入层B分桶4中,实际上最终用户流量穿过层B分桶4中的实验12之后,也可以分辨出实验5及实验12分别带来的效果。当然,为了适应所有可能的情况,需要尽量将可能的最大干扰度降到最低。
从以上介绍可见,对于层B分桶4中的实验12,其用户流量来自于层A中的各个分桶,如果层A中的各个分桶对层B分桶4中的实验12的干扰度都不高,则穿过该实验12的所有用户流量就都能主要体现实验12的效果。因此,如果能够找到一种方式能够达到以下效果,则整个***的抗干扰性能就会得到提高:上一层中进入同一分桶的用户流量平均分配到下一层的各个分桶中。例如,在图6中,层A中有10个分桶,层B中也有10个分桶,假设层A的分桶1中进入了100个用户流量,则在这些用户流量进入到层B时,会平均分配到层B的各个分桶中,例如,层B的每个分桶中分配10个用户流量;类似的层A中的其他分桶中的用户流量也按照这种方式进行平均分配。这样,层B的某分桶中的流量就是分别来自于层A中的各个分桶,并且数目也比较平均,这样,就使得层A各个分桶中的实验对层B的各个分桶中的实验的干扰度都不会太大。
也就是说,上一实验组中进入到同一分桶的用户流量在进入下一实验组层时,进行了离散处理。通过这种离散处理,降低了上一实验组的实验对下一实验组的实验的干扰度,并且,通过这种离散,还使得同一实验组内各个实验受到的干扰程度基本相当,这样,可以保证同一实验组内各个实验之间的可比性。也就是说,如前文所述,最终的测试效果是通过同一实验组内各个实验间的测试结果进行比对得出的,如果同一组内的各个实验受到的干扰程度相差比较大,则测试结果的可比性会受到影响。而如果按照上述方式在实验组之间对用户流量进行平衡的离散处理(即任意一实验组的任意一个分桶内的用户流量,在进入到其他实验组时,会分别分配到各个分桶,且进入每个分桶的数量是相等的),使得同一实验组内的各个实验受其他实验组的任一实验的干扰度相同,则可以保证同一实验组内各个实验之间的可比性。
图7是平衡离散的示意图,干扰层是N个分桶,被干扰层是M个分桶,干扰层的每个分桶的流量是1/N,干扰层的每个分桶的流量对应到被干扰层的所有分桶的流量是平衡的,即都为1/(NM)。干扰层的任意一个分桶内的一个实验对被干扰层的任意一个分桶内的一个实验的干扰度不超过干扰层的分桶数的倒数1/N(对于带条件的实验而言,分桶内的流量只有部分穿过实验)。实践证明,将每一层的分桶数都设置为100时,可以有效降低干扰度。
当然,关于具体如何实现上述平衡离散,最简单的,可以采用随机分配的方式,例如,对于层A分桶5中的100个用户流量,在进入层B时,随机从中选择10个用户流量进入层B的分桶1,再随机选择10个进入层B的分桶2,以此类推。但是,此时,有一个重要的问题需要考虑,就是会话粘连。
(7)会话粘连
如本申请背景技术部分所述,所谓的会话粘连是指:当用户进入一Web页面时,***会为该用户创建一会话,并产生一次用户流量,将该用户流量分配到某分桶n之后,该用户会看到该分桶n内的实验所定义的页面显示效果;之后如果该用户执行了刷新页面的操作,则会产生一次新的用户流量,重新为该流量分配分桶,此时,需要将该新的用户流量分配到分桶n中,这样,才能使得用户在刷新之后看到的页面显示效果与刷新之前相同。
但是,结合到本申请实施例中的同一用户流量穿过多个实验的情况,如果同时还需要考虑实验间的干扰度问题,则像前文所述的那样通过随机分配的方式在不同的实验组之间进行平衡离散就不行了,因为无法满足会话粘连的要求。例如,假设某用户流量进入了层A分桶5,在进入层B时,进行随机分配,将其分配到了层B分桶4;而如果该用户执行刷新产生了一个新的用户流量,则随机分配的方案则不一定再将该用户流量分配到层A的分桶5,即使在层A可以被分到分桶5,在向层B进行平衡离散分配时,也很可能不会被分到分桶4,这就会使得用户刷新页面前后看到的不是同一套实验方案对应的页面效果,影响用户体验。
因此,如何在达到平衡离散效果的同时,还能做到会话粘连,就是本申请实施例重点需要解决的技术问题。下面就对本申请实施例提供的实现方案进行详细地介绍。
本申请实施例首先提供了一种网站测试***中的用户流量分配方法,如前文所述,其中的网站测试***中包括至少两个实验组,每个实验组具有唯一的标识,每个实验组内包括位于多个分桶内的多个实验,每个分桶具有实验组内唯一的标识,以上这些信息都是可以在设计实验的同时进行设置的,其中,不同实验组的实验之间相对独立,参见图8,该用户流量分配方法可以包括以下步骤:
S801:接收到用户流量后,根据所述用户流量对应的访问请求中携带的信息,确定所述用户流量对应的用户标识,以及与所述用户流量匹配的实验组;
这里需要说明的是,在实际应用中,可以由实验人员在管理平台上创建、管理页面、实验组(包括模块和/或层等)、实验等,并将各实验组的标识、各实验组中包括的分桶数及各分桶的标识、各分桶与实验的对应关系等数据保存在数据库中。管理平台上有权限管理***,可以实现对页面、模块、层各级的实验权限进行控制。另外,通过实验管理平台,还可以进入实验效果数据报表***查看实验的效果数据报表(其中,实验效果数据报表***通过对流量携带的实验信息和流量带来的效果进行关联分析计算,得出实验的效果,将效果数据整理成数据报表)。
具体实现时,对用户流量的解析、分流、参数值处理是在应用的机器上执行的,实验***提供了分流器组件,应用接入实验***时,需要集成分流器组件。实验管理平台发布实验时,可以把实验配置文件通过文件同步***(例如Zookeeper等)发送到应用所在的机器上(一个应用往往有多台机器),分流器组件可以读取实验配置文件,把实验相关的实验组信息(包括模块信息、层信息等)、分桶信息、分桶的实验分配信息、参数信息存放在缓存中。当用户流量访问应用机器上的Web服务器时,用户流量可以被Web服务器上的***拦截下来,先交给分流器组件进行处理。该图8中所述的各个步骤的执行主体就可以看作是该分流器组件。
在本申请实施例中,分流器组件在接收到一个用户流量之后,可以首先从中提取出对应的用户标识信息。其中,用户标识信息可以是指用户ID等能够唯一标识用户身份的信息。对于在***中注册过的用户,***一般都会为用户生成确定的ID,因此,可以优先采用用户在Web页面所在业务***里的身份ID,如果获取不到这种身份ID,也可以采用用户访问Web页面时的机器IP的字符串哈希值作为用户标识信息。当然,为了便于后续的计算,用户标识信息一般是数字类型的信息。其中,用户标识的大小对离散效果没有影响,但用户数量多少对离散效果会有一定影响。
另外,一个应用中可能包含多个实验组,但是对于一个用户流量而言,可能并不需要每个实验组都进入,因此,可以预先为各个实验组定义地址,这种地址与用户访问Web页面时各个网页的地址是对应的,这样,当接收到一个用户流量之后,可以首先取出该用户流量对应的请求访问的地址(例如网页的URL),然后将该URL与各个实验组的URL进行匹配,匹配成功的就是与当前用户流量相匹配的实验组。
在获知了相匹配的实验组之后,还可以根据业务***中的定义,获知用户流量在进入各个实验组的先后顺序。例如,相匹配的实验组分别为实验组A、实验组B和实验组C,则可以根据页面本身的代码等信息,确定出各个实验组的先后顺序,例如需要先进入实验组A,再进入实验组B,最后再进入实验组C,等等。
S802:结合所述匹配的实验组的标识以及所述用户标识进行取模运算,确定所述用户流量在各个匹配的实验组中需进入的分桶的标识;其中,在同一实验组中,用户流量需进入的分桶的标识仅由所述用户标识决定,以便同一用户的用户流量对于同一实验组而言,需进入的分桶的标识是固定的,且上一实验组中进入同一分桶的用户流量平均分配到下一实验组的各个分桶中;
在获知了用户标识以及需要按照怎样的顺序进入哪些实验组之后,就可以分别确定在各个实验组中分别需要进入哪个分桶。其中,在本申请实施例中,具体在确定需要进入哪个分桶时,可以考虑实验组的标识以及用户标识这两方面的信息。具体实现时,可以预先建立一个公式,在该公式中,每一实验组的流量分桶分配处理只有两个变量:用户ID(uid)和实验组ID(lid),即处理函数为f(uid,lid),带入具体的用户标识以及实验组标识之后,得到的就是在该实验组中,该用户流量需要进入的分桶的分桶号。
也就是说,通过这种方式,在同一实验组中,用户流量需进入的分桶的标识仅由所述用户标识决定,这样,同一用户的用户流量对于同一实验组而言,需进入的分桶的标识就是固定的。也就是说,无论用户是新打开页面发起的一起访问,还是对页面进行刷新或者翻页等重新发起的访问,只要用户标识不变,对应产生的用户流量在每一实验组中都会进入确定的一个分桶中,显然,就能达到会话粘连的效果。
另外,在做到会话粘连的同时,本申请实施例还可以通过取模运算,使得上一实验组中进入同一分桶的用户流量能够平均分配到下一实验组的各个分桶中。其中,所谓的取模运算也就是求余运算,也就是说,在根据用户标识以及实验组标识来确定需要进入的分桶号时,可以通过对这两方面信息的某种运算结果(例如,先将两者相乘,等等)进行取模的方式来确定。其中,取模运算时的模数可以是实验组内包含的分桶数,也就是说,如果某实验组中包含是个分桶,则就可以对用户标识与该实验组标识相乘所得结果进行模10运算,得到的结果则可以作为对应的用户流量需要进行的分桶号。通过取模运算,不仅可以使得上一实验组中同一桶内的用户流量在进入下一实验组时,被分配到各个不同的分桶内,而且,还可以使得分配到各个分桶的用户流量数目比较平均,也就是达到平衡离散的目的。
需要说明的是,在计算分桶号的函数中,虽然需要进行取模运算,但是使用的模数一般是实验组内包含的分桶数量,至少在同一实验组内是个常数,因此,在同一实验组内,仍然只有用户标识这一个变量。
其中,为了获得更好的平衡离散效果,将用户标识、实验组标识结合黄金比例质数进行哈希运算后,再对分桶数取模运算。
例如,流量分桶分配处理公式可以为以下公式(1):
f(uid,lid)=|(int)[(uid×lid)×GOLDEN_RATIO_PRIME)>>(CPU_BIT-8)]|MOD N+1 (1)
其中:
uid是用户ID;
lid是层ID(每个层有唯一的ID),类型为int(整型),范围为[1,100000];
GOLDEN_RATIO_PRIME为黄金比例质数,在32位机器上是0x9e370001UL(十进制数值为:2^31+2^29-2^25+2^22-2^19-2^16+1),在64位机器上是0x9e37fffffffc0001UL(十进制数值为:2^63+2^61-2^57+2^54-2^51-2^18+1);
CPU_BIT是CPU位数,32位机器为32,64位机器为64;
>>是位移运算,右移;
MOD是取模运算;
(int)是类型强制转换,将长整型long值转为整型int值;
||是取绝对值,从long强转为int时,可能会变成负数,需要取绝对值;
N是实验组内的分桶数,分桶的数量对离散效果有影响,具体的,分桶数范围在[100,1000]区间比较合适,并且页面中所有实验组的分桶数都相同时离散效果最好。
需要说明的是,引入黄金比例质数是为了使得平衡离散的效果更好,对会话粘连没有影响,也就是说,由于黄金比例质数在相同位数的机器中是一个固定的常数,因此,只要是在相同位数的机器中,对于同一实验组,公式中的变量仍然只有用户标识。另外,由于Web应用服务器往往是集群,因此,还需要考虑同一用户对页面的不同次请求被分配到不同的Web服务器进行处理的情况。不过由于页面的分桶配置在同一集群的所有机器上都是相同的,也就是说,实际中Web应用服务器的集群里的机器的CPU位数一般都是相同的,所以一般来说机器位数的因素并不会影响该公式。
另外,为了进一步使得平衡离散的效果更好,在前述公式(1)的基础上,还可以进一步优化。具体的,可以在将实验组的标识、所述用户标识结合黄金比例质数进行哈希运算之前,将实验组的标识加上一预置的第一长整型数据,得到相加结果,然后再将所述相加结果、所述用户标识结合黄金比例质数进行哈希运算。其中,该预置的第一长整型数据远大于实验组的标识,以使得针对不同的实验组得到的相加结果之间的比值趋近于1,因为该比值却接近于1,平衡离散的效果就越好。类似的,将用户的标识加上一预置的第二长整型数据,得到用户标识相加结果;其中,针对不同的用户,第二长整型数据相等,且第二长整型数据远大于用户的标识,以使得针对不同的用户得到的相加结果之间的比值趋近于1。
也就是说,优化后的公式可以是如下公式(2):
f(uid,lid)=|(int)[((BIG_BASE_NUMBER_UID+uid)×(BIG_BASE_NUMBER_LID+lid)×GOLDEN_RATIO_PRIME)>>(CPU_BIT-8)]|MOD N+1 (2)
其中,BIG_BASE_NUMBER_UID和BIG_BASE_NUMBER_LID就是前述第一、第二长整型数据,其他参数与公式(1)中的各个参数相同。BIG_BASE_NUMBER_LID用来使得(BIG_BASE_NUMBER_LID+lid1)/(BIG_BASE_NUMBER_LID+lid2)比值接近1,并且,比值越接近1,平衡离散效果越好,当(BIG_BASE_NUMBER_LID+lid1)与(BIG_BASE_NUMBER_LID+lid2)成倍数关系时,平衡离散效果最差。同理,BIG_BASE_NUMBER_UID用来使得(BIG_BASE_NUMBER_UID+uid1)/(BIG_BASE_NUMBER_UID+uid2)比值接近1。另外,BIG_BASE_NUMBER_UID和BIG_BASE_NUMBER_LID的大小对离散效果有影响,当BIG_BASE_NUMBER_UID和BIG_BASE_NUMBER_LID为10000000000L左右时,平衡离散效果较好,不同实验组之间的离散度可以达到90%以上,有些情况下可以达到98%以上。
总之,对于一台机器,分桶号的计算公式中只有uid、lid、N是变量,具体到某个实验组来说,只有uid是变量,因为实验组的ID和分桶数是固定的。这就可以使得任意一个用户对于任意一个实验组来说,所进入的分桶号是固定的,从而达到会话粘连的目的。同时,通过取模运算,达到离散的目的。
S803:根据所述用户流量在各匹配的实验组中需进入的分桶的标识,将所述用户流量分配到所述匹配的实验组对应的分桶中。
通过步骤S803中给出的确定需要进入分桶的分桶号的实现方式,能够同时满足会话粘连以及离散的目的,因此,在进入某实验组时,只要通过上述方式得到该实验组中对应的分桶号之后,就可以直接将用户流量分配到该实验组的对应分桶中。当然,不同的实验组之间具有先后顺序关系,因此,还可以根据这种先后顺序确定先进入哪个实验组,后进入哪个分组。***中全部的用户流量都可以按照上述方式进行分配,这样,就可以在实现会话粘连的同时,一实验组内各实验受到其他实验组内各实验的干扰都会比较低且基本相等,因此,还可以保证同一实验组内各实验之间的可比性。
其中,对每一实验组,在用户流量分配到的分桶里,如果该分桶中包括多个带条件的实验,则取实验条件与该用户流量相匹配的实验。对于此用户流量来说,如果有匹配的实验,则实验组上定义的参数将采用该实验里设置的值;如果没有匹配的实验,则实验组上定义的参数将采用参数的默认值。
由于在本申请实施例中,一个用户流量会穿过多个实验组中的多个实验,每个实验都会针对一些参数设置一些具体的值,因此,最后在向用户显示Web页面时,可以将各个实验中的值都带入到对应的参数中。当然,用户流量在穿过各个实验组时是有先后顺序的,因此,一般可能不会同时获得各个实验中的值。这样,在用户流量依次穿过各个实验组的同时,可以将用户流量分别穿过的实验的标识、分桶的标识、各实验组(例如各层)参数的值保存到该用户流量所在线程的会话存储(内存)中,这样程序在执行过程中,可以到该会话存储中读取各参数的取值,并根据这些取值进行页面的显示。
另外,如前文所述,在实际应用中,还可能存在跨实验组的关联实验,对于这种特殊的实验,在本申请实施例中可以进行特殊的处理。具体的,对于这类关联实验,可以将不同实验组之间的关联实验所在分桶(为便于描述,可以将这种分桶称为具有关联关系的分桶)的用户流量对应起来,即在图5中,层A分桶6与层B分桶5就属于具有关联关系的分桶,其中包含相同的实验,因此,可以将层A分桶6的流量要完全对应到层B分桶5的流量。正是因为要能实现层与层之间相关分桶的流量可完全对应,同一模块内的各层的分桶数才要求一致,而不同模块之间的层的分桶数是可以不同的。
为了能够实现上述将具有关联关系的分桶中的用户流量完全对应,一种简单的方式可以是,强制关联实验在不同的实验组中只能定义在相同编号的分桶中,比如,实验5如果是跨越层A和层B的关联实验,则在层A和层B上都位于分桶6。这样,如果用户流量在进入层A时被分配到分桶6,之后只需要判断出实验5是关联实验并且跨越了层A和层B,就可以在用户流量进入层B时将之分配到和层A相同编号的分桶中,从而实现关联的分桶的用户流量相对应。
这种实现方式在有些情况下可能会存在缺陷,首先,由于不同的实验组一般是分开做实验的,当需要做跨实验组的关联实验时,不一定刚好有对应桶号的分桶是空闲(因为一般一个分桶只能放置一个实验);其次,不同的实验组可能是位于不同的应用上的,当用户流量从上游应用流转到下游应用时,实验***将无从知晓用户流量在上游应用的实验组中位于哪个分桶、是否刚刚穿过了关联实验,因此也就无法处理流量对应。
为了弥补上述缺陷,在另一种实现方式中,可以通过将关联实验的信息携带在用户流量的Cookie(指某些网站为了辨别用户身份、进行会话跟踪等而储存在用户本地终端上的数据)中,以达到可判断用户流量来向的目的。
具体的,可以在定义各实验组、分桶、实验等时,在配置文件中记录下关于关联实验的信息,包括关联实验需要跨越的实验组的标识、关联实验在各个实验组中所在的分桶的标识(可以相同也可以不同)。这样,当用户流量进入某实验组时的某分桶时,分流器组件就可以读取配置文件,根据配置文件中记录的信息,判断该分桶中的实验是否为关联实验,如果是,则将配置文件中记录的信息写入到用户流量的Cookie中,包括关联实验标识,以及在各个实验组中所在的分桶号。这样,当该用户流量到达下一实验组时,就可以通过读取Cookie中的信息,确定出该用户流量在下一实验组需进入的分桶号。
例如,关于图5中所示的例子,可以在配置文件中记录以下信息:
实验5是关联实验;
实验跨越了层A和层B;
实验在层A中位于分桶6;
实验在层B中位于分桶5。
这样,当用户流量进入层A分桶6的实验5时,实验***分流器组件就可以根据实验配置文件的信息获取到以上信息,并在该用户流量的Cookie中加上关联实验的标识,表明该流量正处于关联实验中,并记录该关联实验在所有实验组中的分桶号。
当流量进入到层B时,分流器组件读取用户流量的Cookie,判断出用户流量处于关联实验中,并根据Cookie里记录的关联实验所有实验组的分桶号,判断出在本实验组应该将该用户流量分配到分桶5。
由于用户流量穿过层B之后,已经穿过了关联实验跨越的所有实验组,因此,分流器组件就可以从流量的Cookie中删除关联实验的标识以及相关的分桶信息。
这样,当该用户流量进入到后续的层C时,分流器组件读取用户流量的Cookie,判断出用户流量没有处于关联实验中,于是将按照图8中所述的方式对用户流量进行会话粘连以及离散处理后,再分配到层C一个没有关联实验的分桶中。
通过上述这种方式能够支持关联实验跨越的实验组位于不同的应用上的情形,因为用户流量在不同的应用间流转时,Cookie信息是可以随用户流量携带的。同时,此技术降低了创建关联实验时分桶资源的分配难度,只要跨越的实验组中有足够的分桶可用,即可创建跨实验组的关联实验,对分桶的编号无要求。
与本申请实施例提供的网站测试***中的用户流量分配方法相对应,本申请实施例还提供了一种网站测试***中的用户流量分配装置,该网站测试***中包括至少两个实验组,每个实验组具有唯一的标识,每个实验组内包括位于多个分桶内的多个实验,每个分桶具有实验组内唯一的标识,不同实验组的实验之间相对独立,参见图9,该装置可以包括:
接收单元901,用于接收到用户流量后,根据所述用户流量对应的访问请求中携带的信息,确定所述用户流量对应的用户标识,以及与所述用户流量匹配的实验组;
分桶标识确定单元902,用于结合所述匹配的实验组的标识以及所述用户标识进行取模运算,确定所述用户流量在各个匹配的实验组中需进入的分桶的标识;其中,在同一实验组中,用户流量需进入的分桶的标识仅由所述用户标识决定,以便同一用户的用户流量对于同一实验组而言,需进入的分桶的标识是固定的,且上一实验组中进入同一分桶的用户流量平均分配到下一实验组的各个分桶中;
分配单元903,用于根据所述用户流量在各匹配的实验组中需进入的分桶的标识,将所述用户流量分配到所述匹配的实验组对应的分桶中。
其中,为了获得更好的平衡离散效果,所述分桶标识确定单元903具体可以包括:
运算子单元,用于将实验组的标识、所述用户标识结合黄金比例质数进行哈希运算,并将哈希运算的结果对实验组内的分桶数进行取模运算;
确定子单元,用于根据取模运算的结果确定所述用户流量在各个匹配的实验组中需进入的分桶的标识。
其中,所述实验组的标识以及用户标识均为整型数据,为了进一步提供平衡离散的效果,该装置还可以包括:
第一相加运算单元,用于将所述实验组的标识加上一预置的第一长整型数据,得到实验组标识相加结果;其中,针对不同的实验组,所述第一长整型数据相等,且所述第一长整型数据远大于实验组的标识,以使得针对不同的实验组得到的相加结果之间的比值趋近于1;
第二相加运算单元,用于将所述用户的标识加上一预置的第二长整型数据,得到用户标识相加结果;其中,针对不同的用户,所述第二长整型数据相等,且所述第二长整型数据远大于用户的标识,以使得针对不同的用户得到的相加结果之间的比值趋近于1;
所述运算子单元具体可以用于:
将所述实验组标识相加结果、所述用户标识相加结果结合黄金比例质数进行哈希运算。
其中,如果某实验为跨越至少两个实验组的关联实验,则所述装置还可以包括:
分桶流量对应单元,用于将关联实验在各个实验组中所在的分桶的用户流量对应起来。
其中,为了能够支持关联实验跨越的实验组位于不同的应用上的情形,可以预先在配置文件中保存关联实验所跨越的实验组的标识、关联实验在各个实验组中所在的分桶的标识,所述分桶流量对应单元具体可以包括:
读取子单元,用于当用户流量进入当前实验组时的某分桶时,读取所述配置文件;
判断子单元,用于根据所述配置文件中记录的信息,判断该分桶中的实验是否为关联实验;
Cookie写入子单元,用于如果是,则将所述配置文件中记录的信息写入到所述用户流量的Cookie中;
Cookie读取子单元,用于当所述用户流量到达下一实验组时,通过读取所述Cookie中的信息,确定所述用户流量在所述下一实验组需进入的分桶的标识。
其中,该装置还可以包括:
Cookie信息删除单元,用于当所述用户流量穿过关联实验所跨越的所有实验组后,将所述写入到所述用户流量的Cookie中的信息删除,以便根据所述下一实验组的标识以及所述用户标识,确定所述用户流量在下一实验组中需进入的分桶的标识。
在实际应用中,所述实验可能包括带条件的实验,此时,同一分桶中可以包括至少两个带条件的实验,且同一分桶中的各实验的条件互斥。
该装置还可以包括:
条件判断单元,用于当某用户流量进入到一包括有至少两个带条件的实验的分桶中时,判断所述用户流量是否与某实验的条件相匹配;
第一参数配置单元,用于如果条件判断单元判断结果为是,则采用该实验里设置的值对页面中相应的参数进行配置;
第二参数配置单元,用于如果条件判断单元判断结果为否,如果所述用户流量与各个实验的条件均不匹配,则采用默认的值对页面中相应的参数进行配置。
在实际应用中,所述至少两个实验组可以是按照页面中的功能模块划分的至少两个实验组,每个功能模块对应一个实验组。
或者,所述至少两个实验组包括按照页面中的功能模块以及功能模块内部的逻辑层次划分的至少两个实验组,每个逻辑层次对应一个实验组,其中,同一功能模块内的各个逻辑层次对应的实验组中包含的分桶数量相同。
为了获得更好的离散效果,可以使得所有实验组中包含的分桶数量均相同。
另外,该装置还可以包括:
顺序确定单元,用于根据预定的信息,确定所述用户流量进入所述匹配的实验组的先后顺序,这样在确定出用户流量在各匹配的实验组中需进入的分桶的标识之后,可以根据所述匹配的实验组的先后顺序,以及用户流量在各匹配的实验组中需进入的分桶的标识,将所述用户流量分配到所述匹配的实验组对应的分桶中。
由于一个用户流量需要穿过多个实验组中的多个实验,因此,最后在向用户显示Web页面时,可以将各个实验中的值都带入到对应的参数中,当然,用户流量在穿过各个实验组时是有先后顺序的,因此,一般可能不会同时获得各个实验中的值,因此,该装置还可以包括:
保存单元,用于将用户流量分别穿过的实验的标识、分桶的标识、各实验组参数的值保存到该用户流量所在线程的会话存储中,以便程序在执行过程中,到该会话存储中读取各参数的取值,并进行页面的显示。
总之,在本申请实施例提供的上述装置中,可以结合实验组的标识以及用户流量对应的用户标识进行取模运算,来确定用户流量在各个实验组中需进入的分桶的标识;其中,在同一实验组中,用户流量需进入的分桶的标识仅由用户标识决定,以便同一用户的用户流量对于同一实验组而言,需进入的分桶的标识是固定的,这样可以就可以达到会话粘连的目的;同时,根据取模运算,可以是上一实验组中进入同一分桶的用户流量平均分配到下一实验组的各个分桶中,达到离散分配的目的,降低各实验组中的实验对下层实验组中各实验的干扰度,并且同一实验组中的各实验受到的干扰度基本相同,因此,可以保证同一实验组内各实验效果的可比性。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于***或***实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的***及***实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上对本申请所提供的网站测试***中的用户流量分配方法及装置,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本申请的限制。
Claims (14)
1.一种网站测试***中的用户流量分配方法,其特征在于,所述网站测试***中包括至少两个实验组,每个实验组具有唯一的标识,每个实验组内包括位于多个分桶内的多个实验,每个分桶具有实验组内唯一的标识,不同实验组的实验之间相对独立,所述方法包括:
接收到用户流量后,根据所述用户流量对应的访问请求中携带的信息,确定所述用户流量对应的用户标识,以及与所述用户流量匹配的实验组;
结合所述匹配的实验组的标识以及所述用户标识进行取模运算,确定所述用户流量在各个匹配的实验组中需进入的分桶的标识;其中,在同一实验组中,用户流量需进入的分桶的标识仅由所述用户标识决定,且上一实验组中进入同一分桶的用户流量平均分配到下一实验组的各个分桶中;
根据所述用户流量在各匹配的实验组中需进入的分桶的标识,将所述用户流量分配到所述匹配的实验组对应的分桶中。
2.根据权利要求1所述的方法,其特征在于,所述结合所述匹配的实验组的标识以及所述用户标识进行取模运算,确定所述用户流量在各个匹配的实验组中需进入的分桶的标识,包括:
将实验组的标识、所述用户标识结合黄金比例质数进行哈希运算,并将哈希运算的结果对实验组内的分桶数进行取模运算;
根据取模运算的结果确定所述用户流量在各个匹配的实验组中需进入的分桶的标识。
3.根据权利要求2所述的方法,其特征在于,所述实验组的标识以及用户标识均为整型数据,所述将实验组的标识、所述用户标识结合黄金比例质数进行哈希运算之前还包括:
将所述实验组的标识加上一预置的第一长整型数据,得到实验组标识相加结果;其中,针对不同的实验组,所述第一长整型数据相等,且所述第一长整型数据远大于实验组的标识,以使得针对不同的实验组得到的相加结果之间的比值趋近于1;
将所述用户标识加上一预置的第二长整型数据,得到用户标识相加结果;其中,针对不同的用户,所述第二长整型数据相等,且所述第二长整型数据远大于用户标识,以使得针对不同的用户得到的相加结果之间的比值趋近于1;
所述将实验组的标识、所述用户标识结合黄金比例质数进行哈希运算包括:
将所述实验组标识相加结果、所述用户标识相加结果结合黄金比例质数进行哈希运算。
4.根据权利要求1所述的方法,其特征在于,如果某实验为跨越至少两个实验组的关联实验,所述方法还包括:
将关联实验在各个实验组中所在的分桶的用户流量对应起来。
5.根据权利要求4所述的方法,其特征在于,预先在配置文件中保存关联实验所跨越的实验组的标识、关联实验在各个实验组中所在的分桶的标识,所述将关联实验在各个实验组中所在的分桶的用户流量对应起来包括:
当用户流量进入当前实验组时的某分桶时,读取所述配置文件;
根据所述配置文件中记录的信息,判断该分桶中的实验是否为关联实验;
如果是,则将所述配置文件中记录的信息写入到所述用户流量的Cookie中;
当所述用户流量到达下一实验组时,通过读取所述Cookie中的信息,确定所述用户流量在所述下一实验组需进入的分桶的标识。
6.根据权利要求5所述的方法,其特征在于,还包括:
当所述用户流量穿过关联实验所跨越的所有实验组后,将所述写入到所述用户流量的Cookie中的信息删除,以便根据所述下一实验组的标识以及所述用户标识,确定所述用户流量在下一实验组中需进入的分桶的标识。
7.根据权利要求1所述的方法,其特征在于,所述实验包括带条件的实验,同一分桶中包括至少两个带条件的实验,且同一分桶中的各实验的条件互斥。
8.根据权利要求7所述的方法,其特征在于,还包括:
当某用户流量进入到一包括有至少两个带条件的实验的分桶中时,判断所述用户流量是否与某实验的条件相匹配;
如果是,则采用该实验里设置的值对页面中相应的参数进行配置;
否则,如果所述用户流量与各个实验的条件均不匹配,则采用默认的值对页面中相应的参数进行配置。
9.根据权利要求1所述的方法,其特征在于,所述至少两个实验组包括按照页面中的功能模块划分的至少两个实验组,每个功能模块对应一个实验组。
10.根据权利要求9所述的方法,其特征在于,所述至少两个实验组包括按照页面中的功能模块以及功能模块内部的逻辑层次划分的至少两个实验组,每个逻辑层次对应一个实验组,其中,同一功能模块内的各个逻辑层次对应的实验组中包含的分桶数量相同。
11.根据权利要求1至10任一项所述的方法,其特征在于,所有实验组中包含的分桶数量均相同。
12.根据权利要求1至10任一项所述的方法,其特征在于,所述根据所述用户流量在各匹配的实验组中需进入的分桶的标识,将所述用户流量分配到所述匹配的实验组对应的分桶中之前,还包括:
根据预定的信息,确定所述用户流量进入所述匹配的实验组的先后顺序。
13.根据权利要求1至10任一项所述的方法,其特征在于,还包括:
将用户流量分别穿过的实验的标识、分桶的标识、各实验组参数的值保存到该用户流量所在线程的会话存储中,以便程序在执行过程中,到该会话存储中读取各参数的取值,并进行页面的显示。
14.一种网站测试***中的用户流量分配装置,其特征在于,所述网站测试***中包括至少两个实验组,每个实验组具有唯一的标识,每个实验组内包括位于多个分桶内的多个实验,每个分桶具有实验组内唯一的标识,不同实验组的实验之间相对独立,所述装置包括:
接收单元,用于接收到用户流量后,根据所述用户流量对应的访问请求中携带的信息,确定所述用户流量对应的用户标识,以及与所述用户流量匹配的实验组;
分桶标识确定单元,用于结合所述匹配的实验组的标识以及所述用户标识进行取模运算,确定所述用户流量在各个匹配的实验组中需进入的分桶的标识;其中,在同一实验组中,用户流量需进入的分桶的标识仅由所述用户标识决定,并且上一实验组中进入同一分桶的用户流量平均分配到下一实验组的各个分桶中;
分配单元,用于根据所述用户流量在各匹配的实验组中需进入的分桶的标识,将所述用户流量分配到所述匹配的实验组对应的分桶中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310284877.3A CN104281611B (zh) | 2013-07-08 | 2013-07-08 | 网站测试***中的用户流量分配方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310284877.3A CN104281611B (zh) | 2013-07-08 | 2013-07-08 | 网站测试***中的用户流量分配方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104281611A CN104281611A (zh) | 2015-01-14 |
CN104281611B true CN104281611B (zh) | 2018-04-03 |
Family
ID=52256487
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310284877.3A Active CN104281611B (zh) | 2013-07-08 | 2013-07-08 | 网站测试***中的用户流量分配方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104281611B (zh) |
Families Citing this family (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105243006B (zh) * | 2015-09-30 | 2019-02-12 | 百度在线网络技术(北京)有限公司 | 基于流量实验的流量层设置及流量实验的实现方法和装置 |
CN105373480B (zh) * | 2015-12-15 | 2018-03-20 | 广州品唯软件有限公司 | 优化ABTest***分流的方法及*** |
CN106909497B (zh) * | 2015-12-22 | 2021-01-19 | 阿里巴巴集团控股有限公司 | 测试方法和装置 |
US10438111B2 (en) * | 2016-01-05 | 2019-10-08 | Evolv Technology Solutions, Inc. | Machine learning based webinterface generation and testing system |
CN105610654B (zh) * | 2016-03-02 | 2019-12-31 | 优酷网络技术(北京)有限公司 | 一种服务器、策略在线测试的方法及*** |
CN106598741B (zh) * | 2016-12-16 | 2024-03-01 | 飞狐信息技术(天津)有限公司 | 个性化推荐***的分布式a/b测试方法、***及视频推荐*** |
CN106682940A (zh) * | 2016-12-27 | 2017-05-17 | 天津数集科技有限公司 | 广告流量转发qps实时计算分配的方法 |
CN106911515A (zh) * | 2017-03-20 | 2017-06-30 | 微鲸科技有限公司 | 基于用户分组的测试方法及装置 |
CN109039800A (zh) * | 2018-06-28 | 2018-12-18 | 腾讯科技(深圳)有限公司 | 在流量实验中进行流量分配的方法、装置和计算机设备 |
CN110750436B (zh) * | 2018-07-23 | 2022-05-13 | 腾讯科技(深圳)有限公司 | 分层测试方法、装置、计算机可读介质及电子设备 |
CN109710511B (zh) * | 2018-12-04 | 2022-04-01 | 北京达佳互联信息技术有限公司 | Ab测试方法、装置、服务器及存储介质 |
CN111950821B (zh) * | 2019-05-15 | 2023-07-25 | 腾讯科技(深圳)有限公司 | 测试方法、装置以及服务器 |
CN110418379A (zh) * | 2019-07-23 | 2019-11-05 | 上海易点时空网络有限公司 | 用于移动设备的分流处理方法以及装置 |
CN110782276B (zh) * | 2019-10-10 | 2022-04-26 | 微梦创科网络科技(中国)有限公司 | 一种访问分流策略干扰判断方法、装置及电子设备 |
CN110808872A (zh) * | 2019-10-21 | 2020-02-18 | 微梦创科网络科技(中国)有限公司 | 一种流量实验的实现方法、装置及电子设备 |
CN110851666A (zh) * | 2019-11-14 | 2020-02-28 | 腾讯音乐娱乐科技(深圳)有限公司 | 用户流量切分方法、装置、服务器及存储介质 |
CN111581087B (zh) * | 2020-04-29 | 2022-11-29 | 郑州阿帕斯数云信息科技有限公司 | 应用程序测试方法和装置 |
CN111639032B (zh) * | 2020-06-02 | 2023-08-01 | 百度在线网络技术(北京)有限公司 | 用于测试应用的方法和装置 |
CN111782497B (zh) * | 2020-06-30 | 2023-08-11 | 百度在线网络技术(北京)有限公司 | 测试方法、测试装置、电子设备和可读存储介质 |
CN111884949B (zh) * | 2020-08-05 | 2022-05-17 | 支付宝(杭州)信息技术有限公司 | Ab实验的分流方案确定、分流实现方法、装置及*** |
CN111967798B (zh) * | 2020-09-07 | 2023-10-03 | 度小满科技(北京)有限公司 | 实验样本分配的方法及装置、设备及计算机可读存储介质 |
CN112269743B (zh) * | 2020-10-30 | 2022-04-12 | 湖南快乐阳光互动娱乐传媒有限公司 | 一种a/b测试方法及装置 |
CN112328485A (zh) * | 2020-11-06 | 2021-02-05 | 杭州推啊网络科技有限公司 | 用户行为的分流测试方法与*** |
CN112732765B (zh) * | 2021-04-01 | 2021-07-13 | 北京世纪好未来教育科技有限公司 | 一种实验路径的确定方法及装置、电子设备 |
CN113553256B (zh) * | 2021-06-18 | 2023-07-14 | 北京百度网讯科技有限公司 | 一种ab测试方法、装置及电子设备 |
CN113852571B (zh) * | 2021-08-20 | 2023-11-28 | 阿里巴巴(中国)有限公司 | 分配流量的方法以及装置 |
CN113704624B (zh) * | 2021-08-31 | 2023-08-22 | 中国平安人寿保险股份有限公司 | 基于用户分流的策略推荐方法、装置、设备及介质 |
CN113836024B (zh) * | 2021-09-27 | 2024-02-06 | 中南大学 | 基于配置驱动的流量复用ab测试方法及*** |
CN114579418B (zh) * | 2022-05-05 | 2022-08-02 | 杭州网易云音乐科技有限公司 | 实验评估方法、评估装置、存储介质及设备 |
US11909655B1 (en) * | 2022-08-09 | 2024-02-20 | Coupang Corp. | Systems and methods for selective deployment of experimental configurations to mutually exclusive groups |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102004781A (zh) * | 2010-11-23 | 2011-04-06 | 北京酷我科技有限公司 | 一种获取网站测试数据的方法及*** |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1110706A (zh) * | 1995-01-27 | 1995-10-25 | 舒文桥 | 防水液 |
US7975000B2 (en) * | 2005-01-27 | 2011-07-05 | Fmr Llc | A/B testing of a webpage |
-
2013
- 2013-07-08 CN CN201310284877.3A patent/CN104281611B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102004781A (zh) * | 2010-11-23 | 2011-04-06 | 北京酷我科技有限公司 | 一种获取网站测试数据的方法及*** |
Non-Patent Citations (2)
Title |
---|
controlled experiments on the web:survey and practical guide;Ron Kohavi et al.;《Data Mining and Knowledge Discovery》;20090201;全文 * |
Overlapping Experiment Infrastructure:More,Better,Faster Experimentation;Diane Tang Et al.;《Proceeding 16th Conference on Knowledge Discovery and DataMing》;20100728;第1-9页,图2-3 * |
Also Published As
Publication number | Publication date |
---|---|
CN104281611A (zh) | 2015-01-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104281611B (zh) | 网站测试***中的用户流量分配方法及装置 | |
Martin et al. | A survey of app store analysis for software engineering | |
CN107451199A (zh) | 问题推荐方法及装置、设备 | |
CN109471795A (zh) | 分组测试方法、装置、计算机设备及存储介质 | |
US20140310691A1 (en) | Method and device for testing multiple versions | |
CN108415832A (zh) | 接口自动化测试方法、装置、设备及存储介质 | |
US10749698B2 (en) | Feature-aware software usage metering | |
CN106022505A (zh) | 一种预测用户离网的方法及装置 | |
CN110362409A (zh) | 基于多种类型的资源分配方法、装置、设备及存储介质 | |
CN105610654A (zh) | 一种服务器、策略在线测试的方法及*** | |
CN108255886B (zh) | 推荐***的评估方法及装置 | |
CN106372977B (zh) | 一种虚拟账户的处理方法和设备 | |
CN106570013A (zh) | 页面访问数据的处理方法和装置 | |
CN110147495A (zh) | 基于在线配置的页面响应方法、装置、设备及介质 | |
CN112767108A (zh) | 决策树创建方法和装置、规则执行方法和装置及存储介质 | |
Grechanik et al. | Enhancing rules for cloud resource provisioning via learned software performance models | |
CN107194009A (zh) | 确定网络位置的唯一访问者 | |
Kumar et al. | Designing an efficient methodology based on Entropy-TOPSIS for evaluating efficiency of cloud services | |
Eijk et al. | The impact of user location on cookie notices (inside and outside of the European union) | |
Kim et al. | Comparison of first‐line treatments of peripheral T‐cell lymphoma according to regimen: a systematic review and meta‐analysis | |
Zhang et al. | Inferring test models from kate’s bug reports using multi-objective search | |
Silva Ouriques et al. | Revealing influence of model structure and test case profile on the prioritization of test cases in the context of model-based testing | |
CN107707432A (zh) | 一种测试方法和*** | |
CN106776348A (zh) | 测试用例管理方法和装置 | |
Oztoprak | Subscriber profiling for connection service providers by considering individuals and different timeframes |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |