- 2024年2月5日和6日,Keygen 遭遇了两次持续超过五小时的停机,原因是客户突发流量激增以及有缺陷的重试逻辑导致了无意的DDoS攻击。
- 根本原因是 sidekiq-unique-jobs 插件的性能问题,它使用 Lua 同步迭代大型 Redis 有序集合,导致 Redis 阻塞,从而引发超时和响应速度变慢。
- Cloudflare 的 CDN 修改了 API 响应中的 Date 标头,当启用 Orange Cloud 时会破坏响应签名验证,迫使用户在保护与兼容性之间做出权衡。
- 作者实现了应用层速率限制器以替代 Cloudflare 的版本,并将心跳任务的调度方式从未来日期调度改为基于 cron 的清理,以避免产生大量队列。
- 在清除了膨胀的调度队列并消除了 unique-jobs 的性能瓶颈后,整体 API 响应时间得到了显著改善。
- 补救措施包括采用 Fastly 的下一代 WAF、用 Sidekiq Pro/Enterprise 替代 sidekiq-unique-jobs(自托管用户可选),以及改进告警和值班通知以避免免打扰模式。