灰度测试试验流量“洗牌”

什么是灰度测试

A/B测试系统的一个常用场景是App/小程序/后端服务精细化运营过程中的上线迭代管理,通常被称为灰度测试或者灰度上线。

详细来说,如果软件产品要在不久的将来推出一个全新的功能,或者做一次比较重大的改版的话,要先进行一个小范围的测试工作,给一小部分用户先试用。通过埋点监控得到用户反馈,确认新功能的效果达到预期之后,再慢慢放量,直到这个全新的功能覆盖到所有的系统用户。也就是说在新功能上线的黑(没有用户)白(所有用户)之间有一个灰(部分用户),所以这种方法也通常被称为灰度测试。

在灰度测试的技术实现里,一个关键的部分是试用用户样本的选择策略。也就是说,新版本上线测试的首批(以及后续批次)灰度用户是怎么筛选出来,决定了灰度测试的技术选型和具体实现。从业务角度来说,我们要明确每一个新功能分别由哪些测试用户来试用,谁扮演“小白鼠”的角色。 

被广泛使用的样本选择策略包括一下几种:

l  白名单:我们主动选取一批用户,打上白名单标签。灰度版本首先开放给这批用户。白名单用户通常是业务同事根据业务经验选取的,比如活跃的粉丝、喜爱尝鲜的用户、对产品问题比较包容的朋友等。当然也可以是随机选取的。

白名单最大的好处是主动可控,出现问题的时候可以及时定位具体用户,业务同事可以及时和这些具体客户进行沟通,获得深入的测试反馈。

但是白名单用户组由于不具有普遍代表性,一般不能实现A/B测试的效果预测能力。另外,技术上实现白名单通常会有性能损耗(对每一个用户都需要扫描一遍名单),再考虑到人工筛选的工作量,我们通常不会允许白名单里的用户数量太大。这种局限性对于用户量较大的业务来说,比较麻烦。

l  随机抽样:每个用户都有一定概率可以参与测试。

随机抽样原理简单,样本选取的代表性也比较好。多数时候随机抽样产生的试验组和对照组可以直接用于A/B测试检验。

但是随机抽样不可避免的会让试验管理陷入被动,万一灰度测试给一部分用户造成负面影响,很难挽回。这种不确定性的风险要求我们在测试阶段有强大鲁棒的干预技术手段,比如实时监控、实时回滚、实时捕捉到用户在各渠道的负面反馈等。另外,要实现真正符合统计科学的真随机(不是伪随机),技术上也有不少坑。

l  按照某种规则抽样:我们主动建立抽样规则,满足规则条件的用户就被指定参与测试。规则通常要考虑业务需求和测试用户覆盖。比如规则是“只选取手机尾号为9的用户”,那么测试用户覆盖可能在10%左右。另一种规则是“下过单的用户”,那么测试用户大概会覆盖已付费客户。

规则抽样比白名单更加灵活方便,通常能覆盖显著更多的用户,技术实现的性能也会比较好。

但是规则抽样的策略介于随机抽样和白名单之间,既不是完全可控,也不是均匀采样,并不是满足业务需求的最佳选择。

l  A/B测试科学采样:试验组(和对照组)用户是通过具有代表性的随机抽样选取,可能还经过了前期干预,只有符合统计学检验标准的用户可以参与测试。

科学采样生成的试验组和对照组具有很高的用户代表性,测试得出的数据可以精确的预测新功能全面上线之后带来的整体效果。

和随机抽样一样,A/B测试需要我们具有强大的试验控制能力,能够实时回滚、实时开关试验功能、实时监控用户行为、实时调整分流比例。

 

如果有一个像AppAdhoc A/B Testing一样强大的科学A/B试验系统,每一个灰度测试都可以用A/B测试来实施。更重要的是,当我们有多个新功能一起研发推进的过程中,可以同时启动多组A/B测试,每组试验检验一个功能,实现更精细化的产品管理。

A/B测试抽样的长期问题

在实践之中,我们注意到一个用A/B测试来做灰度上线的技术问题:长期试验的科学性偏差。

举例来说,一个长期运营的App,每个月上线一版新功能,也就是每个月上线一个A/B测试。A版对照组采样5%的用户,B版体验新功能组采样5%的用户,同时开始试验控制。两周之后试验结束,用户喜爱的新功能全面发布,用户不喜爱的新功能全面回滚。再过两周,新的一个月迭代周期开始,新的A/B测试上线,5%对照组5%试验组……每个月一组A/B测试,长此循环。

假如A/B测试的样本筛选算法只考虑一次试验的科学性,那么只需要保证我们选出的5%对照组和5%试验组足够均匀即可。

假设试验组采样使用简单的哈希算法:

Group ID for Client cid <= Hash(A/B Testing Client ID cid)

那么每一个用户都会被分到固定编号的试验组里。

假设试验组资源分配使用简单的贪心算法:

Experiment Groups for X% <= FindFirstXGroups(Groups, X)

如果试验频率是一个月一次,测试流量5%,那么每次试验都会是前5个试验组(Group)被选中参与测试。也就是说,有一批用户,被固定分配到前5个试验组的用户,每个月都会被选中为“小白鼠”参与试验。

这会造成一个长期问题,就是这些留存很久的样本用户,比如使用App长达半年、一年、多年的老用户,作为试验样本,可能会出现“样本偏差”。

如果一批老用户总是在不停“尝鲜”,一批老用户总是体验稳定版本,他们的行为习惯可能被培养成不同的类型,他们对产品的期待和需求也可能逐渐异化。比如说,长期参与试验的“小白素”用户更喜欢新功能更不在乎bug,而长期在对照组的用户不适应新功能也对bug很敏感。一旦这种差异开始固化,这两组用户就异质了,不能拿来继续做新的A/B测试。如果继续用这些样本做试验,试验结果是不符合A/B测试要求,结论是不可信的,无法用于业务指导。

其实A/B测试结果的科学和准确只是一个小问题,这个问题的最大影响是在于这些被反复拿来做试验的“小白鼠”用户/客户,有可能产生不必要的流失,甚至个别用户被反向培养成“黑粉”,对我们的产品形成强化的坏印象。这种资深黑粉用户会严重影响产品的口碑,也几乎没有办法可以召回。 

这个长期偏差问题对于白名单和规则抽样等类型的采样策略也都或多或少的存在。当然,白名单策略本身就是要筛选出特定的用户群长期做“小白鼠”,我们在选择白名单策略之初就得处理好这个问题。

理论上说,随机抽样不会出现长期偏差问题,因为每次参与试验的用户都是随机筛选的一批,通常同一个用户不会被不同的试验反复选中。但是在实践之中,也要注意实现的算法是否能支持真正的随机性。很多时候,伪随机数加上固定分支条件的代码实现会让某些用户有更大的可能被选中,这些用户还是会成为长期的“小白鼠”。

试验流量“洗牌”算法

意识到灰度测试的长期“小白鼠”问题,我们需要在A/B测试系统里引入“洗牌”机制,可以不断把预先分配好的试验组里的用户们重新打散,再重新分配到不同的试验组里。

“洗牌”机制有很多实现算法,针对A/B测试系统,我们可以采用的一个简单算法:对每一个用户,每过一段时间(比如30天),就给用户一个机会,可以换到其他试验组里去。

假设我们用简单的哈希算法来对用户做试验分组,那么可以用类似这样的实现:

// Runs every 30 days

Group ID for Client cid <=

Hash(A/B Testing Client ID cid + DateTime) % #Groups

注意不同的用户加入系统的时间是不同的,所以他们的“洗牌”机会也会出现在不同的时间。但是整体来说,试验组是每过一个月完成一次比较完整的“洗牌”。

引入“洗牌”机制之后,每个试验组在长时间尺度上是不断变化的,即便是同一个编号的试验组反复参与测试,也不会总是同一批用户。我们再也不会总是逮着同一群小白鼠打针喂药了。

总之,尊重用户/客户,不仅要用灰度A/B测试来避免有问题的产品迭代影响大面积的用户,还要避免同一批用户总是被拿来做试验,确保所有用户都能享受最佳的产品体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/518440.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html-页面结构分析

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>页面结构分析</title> </head> <body><header><h2>网页头部</h2></header><sectiokn><h2>网页…

阿里资深技术专家的10年感悟

阿里妹导读&#xff1a;阿里有许多土话&#xff0c;比如“方法总比困难多”、“不淘汰自己就会被别人淘汰”、“你感觉不舒服的时候&#xff0c;就是成长的时候”。每一句都在激励我们向前。生活总不缺困难和磨练&#xff0c;痛苦的时候&#xff0c;只有转变思维&#xff0c;才…

AnalyticDB for MySQL 3.0基础版重磅发布

随着大数据技术的迅速发展以及对数据价值的认识逐渐加深&#xff0c;大数据已经融合到各行各业。据可靠权威数据显示&#xff0c;超过39.6%的企业正在应用数据并从中获益&#xff0c;超过89.6%的企业已经成立或计划成立相关的大数据分析部&#xff0c;超过六成的企业在扩大数据…

主键索引 or 辅助索引?一文告诉你 Mysql limit 优化时的索引选择!

作者 | 吴海存责编 | 徐威龙封图| CSDN下载于视觉中国导读&#xff1a;本文主要针对limit分页时&#xff0c;是优先基于主键索引还是辅助索引等层面展开分析&#xff0c;对limit及offset的用法以及是否该用索引不会过多赘述。我们知道&#xff0c;在Mysql中可以通过limit实现快…

html-iframe内联框架

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>内联框架学习</title> </head> <body><!-- iframe内联框架 src : 地址 w-h : 宽度高度 --><iframe src"https://www.…

一个阿里产品经理眼中的“垃圾分类”

我叫切斯&#xff0c;是阿里巴巴的一名产品经理。今天和大家说说一个上线刚刚6天&#xff0c;已被500多万网友疯玩的AI——垃圾图像识别&#xff0c;可见垃圾分类苦天下网友久矣。 以下是一个产品经理的碎碎念~ 有人说它是“国内首款真正的垃圾图像识别产品”&#xff0c;对着…

html-初识表单post和get提交

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>登录注册</title> </head> <body> <h1>注册</h1> <!-- 表单formaction: 表单提交的位置&#xff0c;可以是网站&…

数据仓库架构以及多维数据模型的设计

作者 | 云祁封图| CSDN下载于视觉中国一、前言作者最近看了《Hadoop构建数据仓库实践》这本书&#xff0c;收获很多&#xff0c;把一些关于数仓实践的心得整理出来&#xff0c;方便大家共同学习。注&#xff1a;本文内容由作者摘自《Hadoop构建数据仓库实践》与其他相关参考资料…

html-文本框和单选框

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>登录注册</title> </head> <body> <h1>注册</h1> <!-- 表单form action: 表单提交的位置&#xff0c;可以是网站&am…

如何使用 Mybatis 实现数据库 CURD 操作?

作者 | 阿文&#xff0c;责编 | 郭芮头图 | CSDN 下载自东方IC出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;MyBatis 是一款优秀的持久层框架&#xff0c;它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的…

如何使用confd+ACM管理Nginx配置

Nginx 作为优秀的开源软件&#xff0c;凭借其高性能高并发等特点&#xff0c;常常作为web和反向代理服务部署在生产环境中。但是当 Nginx 的规模较大时&#xff0c; Nginx 的运维成本也是不断上升。本文介绍如何通过confdACM来管理 Nginx 配置&#xff0c;通过集中式的配置管理…

Soloπ:支付宝开源的Android专项测试工具

1.前言 近年来&#xff0c;随着移动互联网的蓬勃发展&#xff0c;移动测试技术也取得了长足的进步&#xff0c;从早期基于测试脚本的单机自动化&#xff0c;到录制回放、图像识别、云测平台等测试技术贴合实际业务需求深度应用和创新&#xff0c;测试效率从而一次又一次被提升…

详析 Kubernetes 在边缘计算领域的发展

作者 | 张杰来源 | 分布式实验室现在开源边缘计算正在经历其业界最具活力的发展阶段。如此多的开源平台&#xff0c;如此多的整合以及如此多的标准化举措&#xff01;这显示了构建更好平台的强大动力&#xff0c;以便将云计算带到边缘以满足不断增长的需求。同时Kubernetes现在…

Aliyun Serverless VSCode Extension 上架并开源

Aliyun Serverless VSCode Extension Aliyun Serverless VSCode Extension 是阿里云 Serverless 产品 函数计算 Function Compute 的 VSCode 插件&#xff0c;该插件是结合了函数计算 Fun 工具以及函数计算 SDK &#xff0c;为用户提供 VSCode 图形化开发调试函数计算以及操作…

QPS 提升60%,揭秘阿里巴巴轻量级开源 Web 服务器 Tengine 负载均衡算法

前言 在阿里七层流量入口接入层&#xff08;Application Gateway&#xff09;场景下&#xff0c; Nginx 官方的Smooth Weighted Round-Robin&#xff08; SWRR &#xff09;负载均衡算法已经无法再完美施展它的技能。 Tengine 通过实现新的负载均衡算法Virtual Node Smooth We…

支付宝的架构到底有多牛逼?还没看完我就跪了!

来源 | Java 之道自 2008 年双 11 以来&#xff0c;在每年双 11 超大规模流量的冲击上&#xff0c;蚂蚁金服都会不断突破现有技术的极限。2010 年双 11 的支付峰值为 2 万笔/分钟&#xff0c;到 2017 年双 11 时这个数字变为了 25.6 万笔/秒。2018 年双 11 的支付峰值为 48 万笔…

Android Native 内存泄漏系统化解决方案

导读&#xff1a;C内存泄漏问题的分析、定位一直是Android平台上困扰开发人员的难题。因为地图渲染、导航等核心功能对性能要求很高&#xff0c;高德地图APP中存在大量的C代码。解决这个问题对于产品质量尤为重要和关键&#xff0c;高德技术团队在实践中形成了一套自己的解决方…

【从入门到放弃-Java】并发编程-线程安全

概述 并发编程&#xff0c;即多条线程在同一时间段内“同时”运行。 在多处理器系统已经普及的今天&#xff0c;多线程能发挥出其优势&#xff0c;如&#xff1a;一个8核cpu的服务器&#xff0c;如果只使用单线程的话&#xff0c;将有7个处理器被闲置&#xff0c;只能发挥出服…

Kubernetes事件离线工具kube-eventer正式开源

前言 监控是保障系统稳定性的重要组成部分&#xff0c;在Kubernetes开源生态中&#xff0c;资源类的监控工具与组件百花齐放。除了社区自己孵化的metrics-server&#xff0c;还有从CNCF毕业的Prometheus等等&#xff0c;开发者可选的方案有很多。但是&#xff0c;只有资源类的…

国内首家,腾讯云云开发“全家桶”来了

作者 | 胡巍巍出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;虽然程序员这行加班多&#xff0c;但不要认为加班就该是常态。有些班&#xff0c;原本可以不加&#xff1b;有些夜&#xff0c;其实可以不熬。俗话说&#xff0c;工具不对&#xff0c;努力白费。如果有…