分流规则上线后,常能看到同一规则链下请求耗时呈现明显双峰:大多数请求在几十毫秒内完成条件评估,但每隔一段时间会出现数百毫秒的尾部毛刺。排查时发现毛刺并非来自网络抖动,而是规则引擎在评估到某条条件时同步等待外部服务返回。这个症状值得处理,因为它把访客分层的判断成本直接叠加到页面首字节时间,可能削弱落地页转化表现。本文围绕规则条件短路顺序调优,讨论过滤型条件与决策型条件的取舍边界。
从尾部毛刺看条件评估成本
规则引擎通常按顺序评估并用 AND/OR 短路,某一条件已经决定结果时,后续条件不再执行。不同条件的成本差异很大:路径前缀、UA 子串、国家码等本地判断通常在微秒级完成;而设备评分、实时 IP 信誉、历史行为匹配等条件如果缓存未命中,往往需要同步等待外部 HTTP 接口,耗时可能达到几十到几百毫秒。当高成本条件被放进热路径且缓存命中不稳定时,就会出现少量请求首字节时间被明显拉长。这与分流链路的时延优化属于同一类问题:不是功能错误,而是时序资源分配失衡。相关取舍可参见链路时延优化取舍。
判断标准:先把条件拆成过滤型与决策型
排序不能按“哪个条件更像风控”来排,而应按单位短路收益判断。一个条件是否值得前置,关键看三项:
- 条件自身平均成本:本地判断还是外部调用;
- 拒绝率或穿透率:条件判断为假后能截断多少后续评估;
- 后续条件链的平均成本:如果继续评估,还要花多少时间。
可将条件分为两类。过滤型条件:成本低、拒绝率高,主要用于快速排除无关注流量,例如路径前缀、HTTP 方法、UA 主品牌、国家码。决策型条件:成本高,但能把少量高价值或高风险访客从剩余流量中挑出来,例如设备风险分、历史行为特征。分类不是业务标签,而是基于当前流量分布得出的运行特征。过滤型与决策型放错位置,还会与规则间的冲突叠加,排查方法可参考规则冲突调优方法。
两种短路顺序的运行假设
过滤型前置的假设是:绝大多数请求可被低成本条件排除,高成本条件只处理剩余小比例。优点是尾部毛刺发生概率低,P95/P99 更稳定,外部服务压力也小。代价是如果低成本条件区分度不够,大量请求仍穿透到高成本条件,前置条件只是增加了少量固定成本,不能降低整体时延。
决策型前置的假设是:某个高成本条件拒绝率很高,能直接终断大部分请求的后续评估。比如某类 IP 段风险浓度极高,先查 IP 信誉再判断 UA,可能比先让所有请求都经过几道本地判断更省总体算力。但决策型前置的最大风险是外部服务抖动会直接反映为首字节时间上升,必须配置超时和短 TTL 缓存。两者没有绝对优劣,关键取决于穿透到各条件的请求占比。
选择边界:命中分布决定短路收益
可操作的选择边界通常围绕拒绝率和后续成本判断:
- 当过滤型条件能稳定排除约七成以上无关请求,且高成本条件链只在剩余流量中运行,过滤型前置更合适。
- 当决策型条件拒绝率超过九成,且其平均成本低于让九成请求继续走完后续链路的累计成本时,可以把它前置,但需要把外部调用超时控制在 100~200ms,并给结果短缓存。
- 当两类条件拒绝率接近,选择平均成本更低的前置,避免把外部接口放在热路径。
动态修正同样重要。上线后应持续观察每个条件的实际穿透率、外部接口超时率和 P99 首字节时间。流量分布变化后,昨天的“过滤型条件”可能已经不再具备高拒绝率,需要结合分层采样验证重新标定。关于采样验证的节奏,可参考分层采样验证时序。
小结
规则条件短路顺序不是一次性配置,而是一个基于期望节省做选择的工程问题。先按成本与拒绝率区分过滤型和决策型,再根据当前流量的命中分布决定前置顺序。目标不是追求最高的识别精度,而是让大多数请求走完低成本判断即可返回对应页面版本,把高成本判断留给真正需要进一步区分的流量。
常见问题
规则条件短路顺序会影响落地页加载速度吗?
会影响。条件评估发生在页面版本返回之前,如果高成本条件经常同步等待外部服务,首字节时间会被拉长,移动网络下用户可感知。通过调整短路顺序可以把多数请求止步于低成本判断,降低整体延迟。
过滤型条件和决策型条件如何界定?
按评估成本和拒绝率来分,而不是按业务名称。低成本且能快速排除大量请求的是过滤型;高成本但能显著提高分发精度的是决策型。同一个条件在流量分布变化后,可能从过滤型转为决策型。
什么情况下应该把高成本条件放在前面?
当它拒绝率很高且后续链路成本更大时,前置可以终断大部分请求,减少总体计算量。但必须配置外部调用超时和短缓存,否则服务抖动会把延迟直接传导到首字节时间。
延伸阅读
理解规则短路顺序后,可以进一步对比斗篷投放与 PPC 广告在预算分配层面的差异,补充投放决策视角:斗篷投放与PPC预算对比思路