Cloudflare 8 月 13 日发了一篇 Radar 观测文章,作者是 Sabina Zejnilovic 和 Lai Yi Ohlsen,原文标称 5 分钟阅读。讲的是前一天 8 月 12 日那次日全食:全食带从北大西洋过来,扫过冰岛,再落到西班牙北部和葡萄牙北部,西欧其余地方看到的是深偏食,发生时间都接近当地日落。原文说这是二十年来第一次穿过欧洲大陆的日全食。
结论不复杂:人抬头看天的时候,就没在看手机。全食带附近国家的 HTTP 请求量在最大食分那一刻附近掉了大约 15% 到 30%。这个结论我读之前就能猜到,2024 年那次北美日全食 Cloudflare 也写过一篇。真正让我读完的是中间那段方法。
分桶粒度决定了这篇文章能不能写
他们把日食当天的 HTTP 请求量按五分钟一个桶切开,每个受影响国家一行,每列一个五分钟切片,然后跟正常日基线比,画成热力图。黑色菱形标出每个国家的最大食时刻。
五分钟这个粒度是关键。日食的偏食阶段能持续两三个小时,但食甚前后的深度遮蔽只有十几分钟。如果按小时聚合,15% 的下探会被两侧的正常流量摊平成个位数,一篇文章就没了。原文里那张图的说服力全来自菱形和最深的红色在视觉上几乎重合,这种重合只有在分桶足够细的时候才看得见。
反过来,桶切得太细,单个国家的请求量抖动就会盖过信号。五分钟是个折中,原文没解释为什么选它,我猜是先试过几个值。
基线是三个星期三的中位数
日食发生在星期三傍晚。他们的基线不是前一天,也不是前一周同一天,而是前三个星期三在同一时段的中位数,按时刻逐槽对齐。所有数字都报成相对基线的百分比变化:0% 表示完全正常,负数表示比平时冷清。
用中位数而不是平均值,原文给的理由是防止某一个反常的星期给比较结果带偏。这是个很小的选择,但它决定了这篇文章的可信度。如果基线取的是三周平均,任何一周出过一次故障或者一次大型体育赛事,日食的信号就会被污染,而读者根本看不出来。
遮蔽度是算的,不是查表来的
我原以为遮蔽度是从某个天文数据源直接抓的。原文写的是他们自己算:对每个地点求出太阳和月亮的视角直径,以及两者在天空中的角距离,然后每五分钟按两圆重叠面积算出日面被遮住的比例。这样每个地方同时得到峰值遮蔽度(0 到 100%)和自己的食甚时刻。
国家级的数字是这么合出来的:流量按国内各区域求和,遮蔽度按各区域取平均,用平均值定这个国家的食甚时间。这一步有损失,西班牙南北的遮蔽差别不小,取平均会把北部的深度食稀释掉。原文没回避这点,它把散点图单独列出来说明局部因素造成的离散,包括人口密度、当地时间和云量。
散点图那一张是我认为最该看的:横轴是各国峰值遮蔽度,纵轴是食甚前后 15 分钟窗口内相对基线的平均变化。点的下行趋势加上时间点的精确吻合,才让「日食是主因」这个说法成立。只看热力图不足以排除巧合。
几个不听话的国家
分国家的趋势线里,各国各区域的变化范围是 9.3% 到 -46.7%。也就是说有地方流量反而涨了。
原文点名的是:冰岛、西班牙、葡萄牙跌得最狠;波兰和丹麦很快回到食前水平;挪威和瑞典出现了轻微高于基线的增长;丹麦是整体变化最小的。太阳几乎没被遮住的国家(瑞典、丹麦、波兰、瑞士)基本看不到下探。
变化最早出现在阿拉斯加,UTC 15:35 左右,那是这次日食路径的起点。
挪威和瑞典为什么会涨,原文没解释。我也想不出可靠的解释。可能是偏食太浅不值得出门,而社交媒体上别处的日食内容反倒把人拉到了屏幕前,但这只是我的猜测,Radar 的公开数据不足以验证。
一处对不上的日期
正文说日食发生在 8 月 12 日,星期三,基线取前三个星期三。但热力图那段的图注写的是「每列是 2026 年 8 月 12 日的一个五分钟切片」的地方,我抓到的页面上写成了 2025 年 8 月 12 日。
我倾向于认为这是图注笔误,因为文章开头、面包屑上的发布日期 2026 年 8 月 13 日和其余段落都一致。但我没有别的证据,所以只当现象记下来,不改写成结论。这也是我自己写这类摘要时最容易翻车的地方:原文的一个错字会被顺手抄成看起来很确定的事实。
这类数据能做什么
流量下探本身没有运维价值,日食一年也就那么几次。方法有价值。同一套东西换个事件就能用:区域断网、直播比赛、政府宣布的封网、海缆中断。要点是三个,细分桶、同星期同时段的中位数基线、以及一个能排除巧合的自变量。第三个最难,日食恰好提供了遮蔽度这样一个可以纯几何算出来、跟网络本身完全无关的自变量,所以这次的相关性特别干净。
大多数事件没有这种运气。真到了要判断一次流量异常是人为还是网络故障的时候,手里往往只有流量本身。