他攥着半瓶冰可乐,脸皱得像被揉过的A4纸。
原来半小时前他给新版本的商品详情页做灰度,本来想切10%的流量过去测测效果,结果配置写错了维度,直接把所有安卓端用户全导到了新版本。那套新写的库存计算逻辑有个边界值bug,刚上线20分钟,三个准备周五大促的爆款商品库存就被刷成了负数。
差点搞砸全部门三个月的准备。
别上来就按比例切流量
很多人对灰度切分的第一反应,就是拿个固定百分比的流量往新版本导,1%、5%、20%,一步步往上加,看起来稳得不行。
真的。
但这里藏着最大的坑——你根本不知道这10%的随机流量背后,是刚充了一万块的核心付费用户,还是连APP推送都懒得开的僵尸号。
小周就是吃了这个亏。他按系统维度切流量的时候,根本没算过安卓端用户占我们总盘的72%,所谓的“10%灰度”,实际放出去的是七成用户的访问,根本不是可控的小范围测试。
我上次见过更离谱的。团队为了图快,直接按办公网IP段切流量,把整个园区的办公网访问全导到新版本,测试同学自己点了半小时觉得没问题,一放公网直接炸——办公网的用户行为和真实C端用户完全是两个世界,连测试场景都覆盖不全。

当然也不是说按比例切完全没用。如果你改的是个不涉及核心链路的UI样式,比如换个按钮颜色,调整下首页轮播图的位置,用固定比例切完全没问题,就算出了错,用户最多觉得界面有点奇怪,根本不会影响交易。但只要你碰了库存计算、支付链路、用户权限这种核心模块,按随机比例切流量就是在赌运气。
先把流量“洗干净”再切
说实话,靠谱的切分策略从来不是“切多少比例”,而是“切哪部分流量”。
我们现在做切分之前,第一件事不是拉配置写规则,是先把所有用户和会话打标签分层。哪些流量是绝对不能碰的?正在走支付流程的用户、近三个月累计消费过万的高价值用户、绑定了企业账号的内部测试客户。这些流量一旦切到有bug的新版本,出了问题就是直接的资损,根本没有挽回的余地。
千万不要把正在交易链路中的用户流量纳入灰度池。
剩下的流量再按风险等级排序:最安全的是注册了半年以上、每月打开APP不超过3次的低活跃用户——就算把他看到的页面切错了,他可能自己都发现不了。然后是平时只看内容、很少下单的普通浏览用户。最后才敢把日常下单的活跃用户放进灰度池。

这里还有个很多人忽略的细节。同一个用户的访问,不能一会跳老版本一会跳新版本。上次我们做购物车改版,就是因为没做会话绑定,用户在购物车页面点一下结算,突然跳成新版本的结算页,退回去又变回老版本的购物车,找了半天结算按钮在哪,直接把人搞烦了卸载了APP。后来我们补了规则,同一个用户的会话全程绑定同一个版本,只要会话没过期,不管他跳多少个页面,都不会碰到版本切换的问题,这类投诉直接降了80%。
流量切分不是一劳永逸的开关
很多团队觉得,灰度切完了,就可以等着发全量了,盯着错误率看板就行。
根本不是。
上次我们做搜索功能的改版,一开始切了5%的低活跃用户,看了一天,页面错误率0.1%,和老版本完全持平,大家都觉得稳了,直接把流量比例加到20%。结果刚过两小时,监控告警就弹了——这20%的流量里,有大量晚高峰8点到10点活跃的学生用户,他们搜的关键词都是“演唱会门票”“开学季书包”,新版本的搜索排序逻辑对这些长尾关键词的召回率特别差,之前5%的样本里根本没覆盖到这些场景。虽然错误率没涨,但搜索的点击率直接从老版本的12%掉到了11.2%,相当于一天少了十几万的潜在订单。
我们赶紧把流量切回去,查了半天才发现,之前选的低活跃用户大多是上班族,平时搜的都是办公用品,根本和学生用户的搜索行为不搭边。
后来我们给所有灰度流程加了个强制规则:每次调整流量比例之前,必须先核对当前灰度池的用户群体画像,和整体用户画像的重合度不能低于60%,不然就算错误率再低,也不能往上加流量比例。另外给新版本的流量加个自动熔断阈值,只要错误率超过0.5%,或者核心交易链路的转化率比老版本低超过2%,系统就自动把切到新版本的流量全部切回老版本,根本不用人半夜爬起来改配置。
上周小周把那套熔断规则写完之后,这周又在茶水间碰到他,还是攥着半瓶冰可乐,不过这次脸不皱了。
他说现在切流量之前,先把标签打对,把画像核对好,把熔断设上,就算半夜出问题,系统自己就处理了,不用他蹲在监控前面熬大夜。
其实哪有什么完美的切分策略啊。
都是之前踩过的坑堆出来的。
对吧?