⚠️ 事故评级
P0-
| 业务功能完全中断,业务数据完好或轻微损失
📖 事故复盘:
1️⃣ 2024/09/10 10:30 AM
发现网站无法访问,CPU 持续占用 100%;推测是 CC 攻击,排查 WAF 及 Nginx Access Log 发现并无异常;断开主机公网发现占用依然存在;
2️⃣ 2024/09/10 11:00 AM
开始排查数据库问题,发现 10 - 30 个事务在针对用户流量更新与使用统计的表进行修改时触发悲观锁,导致后续事务无法进行;尝试强制结束事务失败,新事务会不断产生然后锁定;
3️⃣ 2024/09/10 13:30 PM
开始排查 PHP Laravel 框架代码问题,怀疑锁操作出现故障;同时联系专业技术人员介入支持;
4️⃣ 2024/09/10 14:30 PM
针对相关 Job 引入重试机制,但没有收到预期的 Log 输出,推测是 DB 组件无法进行写操作导致代码执行不到生成 Log 的环节;
5️⃣ 2024/09/10 16:00 PM
场外技术支持指出,有可能是使用统计的 日志表 积累过多,达到索引缓存的阈值后导致索引效率断崖下跌,进而任务出队速度远小于入队速度,造成计算资源阻塞;尝试清除 7 天前的统计资料如流量消耗等,任务处理速度明显回升,约 5 分钟后一半的悲观锁解除,网站基本恢复正常。
🛠 技术改进:
短期内适当上调 InnoDB Buffer Size,同时维护更激进的日志清除策略;
长期规划重构相关业务代码,从根本上消除事务堆积的隐患。
🎁 善后措施:
如果有用户发现流量异常消耗,可以在 本日 23:59 前发送工单免费重置流量。
已经自动为所有流量异常(流量使用 >> 套餐内流量)的客户重置流量到 25%。