介绍ab分流的流量保护功能之前,先普及一下ab分流的一些概念和术语

名词解释:

  • 实验:用来验证某个决定请求处理方式的功能或策略的一部分流量,通常用来验证某个功能或策略对系统指标(如PV/UV,CRT,下单转化率等)的影响。
  • 流量 :指所有访问用户的请求
  • Hash因子:可以理解为访问实验用户的uuid,即一个可以识别某个流量用户的唯一标识。
  • Hash算法:是把任意长度的输入通过散列算法变换成固定长度的输出,是一种从任意文件中创造小的数字「指纹」的方法。与指纹一样,散列算法就是一种以较短的信息来保证文件唯一性的标志
  • 桶位:ab测试又称为分桶测试。当用户的请求打到某个实验进行分流时,分流引擎会根据请求的uuid + 强一致性hash算法(保证分每个桶分到的越随机越平均越好)生成一个全局固定不变的值 ,然后 值取模100 得到一个0-100区间的具体桶位编号,一个百分点对应一个桶位编号。
  • 实验版本:实验版本即实验分组,A/B实验通常是为了验证一个新策略的效果。在实验进行中,所抽取的用户被随机地分配到A组和B组中,A组用户体验到新策略,B组用户体验的仍旧是旧策略。在这一实验过程中,A组便为实验组,B组则为对照组。也有多个实验组和一个对照组构成的实验,他们共同承载了100%的流量请求。

用户桶位编号如何生成

如上图说明,现在大家知道一个用户访问某个实验时都会有一个唯一固定的编号。

为了更好阐述其意,假设我们有这样26位流量用户,分别是A-Z的这样26位用户:

{****A , B , C , D , E , F , G , H , I , J , K , L , M , N , O , P , Q , R , S , T , U , V , W , X , Y , Z }

他们访问实验X时,通过 Hash(uid+实验X种子) 生成了如下的实验编号(命名规则为:用户x_桶位编号):

A_11,B_9,C_12,D_10,E_7,F_9,G_24,H_22,I_18,J_8,K_21,L_15,M_1,N_4,O_76,P_33,Q_40,

R_5,S_12,T_80,U_67,V_25,W_33,X_49,Y_87,Z_100

他们访问实验Y时,通过 Hash(uid+实验X种子) 生成了如下的实验编号(命名规则为:用户x_桶位编号):

A_25,B_17,C_19,D_2,E_1,F_18,G_19,H_22,I_12,J_2,K_22,L_14,M_4,N_16,O_28,P_30,

Q_92,R_93,S_8,T_55,U_18,V_100,W_1,X_100,Y_50,Z_36

通过上面的案例说明,随机的流量用户访问实验时,某些用户生成的桶位编号会一样,那他们就会进入实验的同一个分组里。

实验版本与桶位的关系

一个桶位编号代表全部流量(100%)的一个百分点的流量(1%)

实验分流演示

假设我们一个实验有三个版本即三个分组,分别是 实验组1=VA,实验组2=VB,对照组=VC

初始分组比例为:VA=10%,VB=10%,VC=80%

下一步,我们要将实验组流量扩量,流量分别为:VA=20%,VB=20%,VC=60%

这种扩量后的分流,从分流角度看是ok的,But细心的同学可能会发现之前进入实验组2的用户11-20桶位编号的在进行实验组扩量后,居然...居然...被分配到实验组1。这样就发生了用户跳组的情况,如果接下来继续扩量,一直会存在此类问题:就是进入过实验组2的用户扩量后又被分配到实验组1。

每次都有实验组用户污染的问题,但是运营同事每次调整比例时并不知道后端分配逻辑,他们会想当然认为流量分配是ok的,这种分配方式会造成数据分析问题和用户体验问题,可能比例调整后对其他组的用户进行了污染,这样的结果在业务上是不可接受的

那么... 针对这种情况实际怎么分配会最佳呢,继续往下看。

正确的分流效果图

如上效果图:

VA 版本由原来的10%扩量到20%,正确的分流是:

新增的10%流量来自对照组VC的流量用户即桶位区间是21-30。

扩量后VA的20%流量是由:1-10,21-30的两个桶位区间。

VB版本由原来的10%扩量到20%,正确的分流是:

新增的10%流量来自对照组VC的流量用户即桶位区间是31-40。

扩量后VB的20%流量是由:11-20,31-40的两个桶位区间。

这样的扩量之后不会出现之前那样的流量用户发生跳组,即保证原来的用户进入的哪个版本扩量之后还是之前的版本。

这种的分流优化我们称之为:流量保护,就是我们本篇文章重点介绍的功能。

为什么做流量保护:

答:实验迭代时,增减版本、调整比例是最高频的操作,此时平台采用了【流量保护】功能,即每次修改先识别减少比例的版本,从减少比例的版本的流量拆分给增加比例的版本。最大限度隔离流量,减少实验组之间相互污染;

引入流量保护功能

ab分流亟需解决这种不科学的流量调整问题,升级【流量保护】功能后,再看一组如下实验的版本流量迭代的推演过程(红色代表A组、蓝色代表B组、绿色代表C组)

这样经过多次调整后,每个实验都尽可能的减少了自己区间的变动,保证自己用户的留存性,减少对实验指标的影响

流量保护动画推演

大家可以直接欣赏:四个版本比例调整的推演(可以关注每个版本色块的变化)

从上面的例子可以看出,经过多次的流量调整后,各个实验的区间分布会变得比较复杂,但是从使用者的角度看,他只需要关心每个实验所占的流量配比,不需要关心底层实验流量的区间分布情况(这块对他是黑匣子),因此不会增加使用者操作的难度。

流量保护分配规则

  • 对版本比例调整进行分组:比对版本修改前、后的数据。按序识别比例新增、减少、不变的三个变化组
  • 将版本减少组的桶位拆分:对减少组版本桶位区间从最右侧拆分、匹配直到满足减少的浮动比例的桶位区间段
  • 对拆分的桶位区间排序、移动:对减少组被拆分的桶位区间按从左到右的排序,依次次分配给新增版本
  • 对版本变化后的桶位排序、合并: 分配后的所有版本进行桶位区间排序,相邻的桶位区间进行合并操作

作者:京东科技 付浩军

来源:京东云开发者社区 转载请注明来源

增长实验室-ab分流的流量保护功能介绍的更多相关文章

  1. 使用tcpcopy导入线上流量进行功能和压力测试

    - 假设我们要上线一个两年内不会宕机的先进架构.在上线前,免不了单元测试,功能测试,还有使用ab,webbench等等进行压力测试. 但这些步骤非生产环境下正式用户的行为.或许你会想到灰度上线,但毕竟 ...

  2. 公众平台关注用户达到5万即可开通流量主功能 可以推广APP应用

    今天微信公众平台发布发布了一些更新,公众帐号的关注用户达到5万,即可开通流量主功能,之前的是要求10万粉丝,这是一个微信开放的信号.广告主可推广苹果商店应用或腾讯开放平台应用.新增卡片和图文广告规格. ...

  3. 为你的CSDN博客添加CNZZ流量统计功能

    一.流量统计介绍 流量统计是指通过各种科学的方式,准确的纪录来访某一页面的访问者的流量信息,目前而言,必须具备可以统计. 1.简介 统计独立的访问者数量(独立用户.独立访客): 可以统计独立的IP地址 ...

  4. .net reactor 学习系列(三)---.net reactor代码自动操作相关保护功能

    原文:.net reactor 学习系列(三)---.net reactor代码自动操作相关保护功能         接上篇,上篇已经学习了界面的各种功能以及各种配置,这篇准备学习下代码控制许可证. ...

  5. OpenSearch最新功能介绍

    摘要:阿里云开放搜索(OpenSearch)是一款结构化数据搜索托管服务,其能够提供简单.高效.稳定.低成本和可扩展的搜索解决方案.OpenSearch以平台服务化的形式,将专业搜索技术简单化.低门槛 ...

  6. Zabbix6.0使用教程 (一)—zabbix新增功能介绍1

    使用zabbix的小伙伴应该都有关注到目前zabbix的大版本已经更新到了6.0,后面乐乐将会对如何使用zabbix6.0做一个使用教程的系列,大家可以持续关注,这篇我们主要聊聊zabbix6.0新增 ...

  7. CentOS以及Oracle数据库发展历史及各版本新功能介绍, 便于构造环境时有个对应关系

    CentOS版本历史 版本 CentOS版本号有两个部分,一个主要版本和一个次要版本,主要和次要版本号分别对应于RHEL的主要版本与更新包,CentOS采取从RHEL的源代码包来构建.例如CentOS ...

  8. SharePoint网站集功能介绍

    SharePoint网站集功能介绍 https://support.office.com/zh-cn/article/%E5%90%AF%E7%94%A8%E6%88%96%E7%A6%81%E7%9 ...

  9. QTP的基本功能介绍

    • QTP的基本功能介绍 HP QuickTest Professional 支持功能測试和回归測试自己主动化,用于每一个主要软件应用程序和环境.此解决方式使用keyword驱动的測试概念,简化了測试 ...

  10. 3.Nginx常用功能介绍

    Nginx常用功能介绍 Nginx反向代理应用实例 反向代理(Reverse Proxy)方式是指通过代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并且从内部网络服 ...

随机推荐

  1. Codeforces Round 882 (Div. 2)

    Codeforces Round 882 (Div. 2) A.The Man who became a God 题目大意 给定一个数组 \({x_1,x_2,⋯,x_n}\) 和一个整数 \(k\) ...

  2. 【工具】-Reverse-DIE(Detect-It-Easy)

    关于 Detect It Easy,或缩写为"DIE"是一个用于确定文件类型的程序.Detect It Easy 是一个多功能的 PE 检测工具,基于 QT 平台编写,主要用于 P ...

  3. 青少年CTF平台-Web-Robots

    题目信息 题目名称:Robots 题目描述:昨天十三年社团讲课,讲了Robots.txt的作用,小刚上课没有认真听课正在着急,你能不能帮帮忙? 题目难度:一颗星 解题过程 访问题目链接 在这里插入图片 ...

  4. 一篇博客带你上手Git

    概述 安装Git 下载官方网站,下载后安装包样式:双击安装,安装成功后右键文件会有如下选项证明安装成功. 基本配置 设置用户信息,桌面右键,选择Git bash here hecheng@LAPTOP ...

  5. Docker使用教程及常用命令

    Docker是一个开源的应用容器引擎,允许开发者将应用以及依赖打包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows上.它非常适用于持续集成与持续交付(CI/CD). 1. 安装 ...

  6. devops之Python编程-类的基础架构

    Python中,可以通过关键字class来定义一个类.类是一种自定义数据类型,它可以包含属性(变量)和方法(函数).下面是一个示例: class MyClass: def __init__(self, ...

  7. 小白整理了VUEX

    在小白开发的项目中前端使用的是Vue,虽然在日常工作中可以使用Vue进行开发工作.但是没有系统的学习过Vue,对Vue的一些特性和方法使用时常常需要查询资料解决问题,查询资料常常会占用大量时间,尤其对 ...

  8. 基于 JMeter API 开发性能测试平台

    背景: JMeter 是一个功能强大的性能测试工具,若开发一个性能测试平台,用它作为底层执行引擎在合适不过.如要使用其API,就不得不对JMeter 整个执行流程,常见的类有清楚的了解. 常用的 JM ...

  9. 运用手机运营商二要素Api接口,守护您的账户和隐私,让您安心使用!

    随着移动互联网的普及,我们的生活离不开手机,手机成为了我们生活中不可或缺的一部分.但是随着移动支付的普及,手机支付在我们的生活中也变得越来越重要.手机支付是一种方便快捷的支付方式,但是也存在一些安全隐 ...

  10. 万字+20张图剖析Spring启动时核心的12个步骤

    大家好,我是三友~~ 今天来扒一扒Spring在启动过程中核心的12个步骤 之所以来写这篇文章,主要是来填坑的 之前在三万字盘点Spring 9大核心基础功能这篇文章的末尾中给自己挖了一个坑,提了一嘴 ...