结论先行:当访问量增加且数据存在延迟时,稳定观察窗口不应按“日历天数”定义,而应按“延迟上限的整数倍”定义。假设延迟上限是48小时,那么观察窗口至少设为96小时,并允许窗口内最后一段数据仍未完全到齐。这样做的目的不是等到数据完美,而是让每个参与方在同一时间点看到同一批不完整但口径一致的数据。
访问量增加时,数据延迟通常不是单一原因。站内统计、日志处理和第三方估算的到齐节奏不同,如果只用一个“昨天涨了多少”来对齐,分歧会一直存在。可以先做一次延迟来源盘点:
把这三层分开后,观察窗口的起点和终点才有依据。如果处理延迟是24小时,窗口却只设24小时,那么窗口结束时数据仍在补录,结论必然反复。
一个可执行的定义方式是:先记录当前延迟上限,再取该上限的两到三倍作为最小稳定窗口。假设延迟上限为24小时,最小稳定窗口就是48到72小时。这个窗口内,前一半数据可能仍在补录,后一半数据相对完整,比较时只看窗口整体趋势,不比较窗口内逐小时波动。
这样做会带来一个取舍:窗口变长,反馈变慢。如果访问量增加发生在活动期间,业务方可能希望当天就判断效果。此时可以并行保留一个“快速窗口”用于发现异常,但快速窗口的结论不能直接用于对外汇报,只能用于决定是否要立即排查。稳定窗口的结论才用于判断增加是否持续。
另一个动作是固定窗口的起止时间点,并写明数据截止时刻。例如窗口为某日00:00至第三日00:00,数据截止到第三日12:00。这样多个角色核对时,看到的是同一批数据,而不是各自在不同时间点截取的不同版本。
假设团队把观察窗口设为72小时,延迟问题看似解决。但站内统计按会话去重,第三方估算按请求去重,两者都显示访问量增加,增幅却不同。此时窗口再稳定,分歧仍然存在,因为比较的不是同一件事。
这个反例说明:稳定观察窗口只能消除时间维度上的不一致,不能消除口径维度上的不一致。如果窗口定义完成后,各方对“访问量增加”的计数单位仍有不同理解,那么下一步不是继续延长窗口,而是先统一计数单位,再重新跑一遍窗口内的数据。
当多个角色对同一事实有不同理解时,可以把分歧拆成三个可核对项:
这三项写清楚后,观察窗口才有可复现的基础。下一次访问量增加时,任何人按同样的截止时刻、计数单位和过滤条件重跑,都应得到同一批数字。如果重跑结果不同,说明还有未记录的变量,而不是窗口长度不够。
最后给一个可立即执行的动作:在下一次访问量增加出现时,先不要争论增幅大小,而是让每个数据源各自标注延迟上限和计数单位,然后取延迟上限的两倍作为共同观察窗口。窗口结束后,只比较窗口整体趋势和方向,不比较窗口内单点数值。如果方向一致,再进入归因分析;如果方向不一致,先回到口径核对,而不是继续加长窗口。这一步的结果会直接决定下一步是排查数据管道,还是排查流量来源。