被挂上热榜的那晚:单日 87 万 PV 复盘
凌晨两点的告警
7 月 12 号凌晨 1:47,手机连震三下把我吵醒。是 Uptime Kuma 的告警:源站响应时间超过 3 秒。
迷迷糊糊打开 Grafana,看到出站带宽的曲线几乎是垂直往上的——平时深夜也就 2-3 Mbps,那会儿已经冲到 340 Mbps 还在涨。
第一反应是被打了。查了下 access log,来源很干净,全是真实 UA,refer 集中在一个聚合站——去年写的那篇《给爸妈装 NAS 的踩坑记录》被人转上了热榜。
那晚的数据
事后从 CDN 后台拉了报表,大概是这样:
- 当日 PV:87.3 万(平时日均 6000 左右)
- 峰值带宽:412 Mbps
- 当日流量:1.2 TB
- 源站回源请求:不到 2%
最后一条是重点。98% 以上的请求被 CDN 边缘节点扛掉了,我那台 2C4G 的小服务器全程 CPU 没超过 40%。
做对了的事
- 全站静态化。文章就是 HTML 和 Markdown 文件,没有数据库查询,没有动态渲染,缓存命中率天然高。
- 图片全部走独立 CDN 域名,并且提前做了 WebP 化(见我之前那篇图床文章),单图平均只有 80KB。
- Cache-Control 给得很激进。静态资源
max-age=31536000,文章页也给了 10 分钟的边缘缓存。
做错了的事
也有翻车的地方:
- 评论服务是自己搭的,没上缓存,那晚被打挂了两次,最后临时把评论区关了。
- 有一张 4MB 的原图忘了压缩,那一张图当晚就跑了 200 多 GB 流量。心疼。
账单
最担心的账单环节:因为主力流量都在按量付费的 CDN 上,那天多花了 43 块钱。说实话比我想象的便宜多了,一次热榜的成本还不到一顿火锅。
结论:个人博客抗流量的关键不是服务器多强,而是让请求根本到不了你的服务器。
有类似经历的朋友欢迎在评论区聊聊你们的峰值数据。