SWE / SRE / Frontend · System Design / 基础

TikTok 奖励活动压垮后端:止损、准入与发奖一致性

处理奖励机制引发的高 QPS 故障,拆解短期恢复与长期容量设计。

题目重点:处理奖励机制引发的高 QPS 故障,拆解短期恢复与长期容量设计。

题意与假设

这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。

  • 未给奖励类型/金额/请求量;先问有限库存、公平性、重复领取和不可丢失要求。
  • 奖励查询、资格检查与实际发放是不同路径。

解题路线

  1. 故障中先看错误率、连接/线程池、数据库与重试量,暂停活动放量或启用准入,保护核心服务。不要只扩机器而任由客户端重试放大。
  2. 缓存只适合可接受陈旧的展示/规则,奖励余额与领取状态需原子约束。按(activity,user)唯一键或幂等记录防重复,库存扣减与领取落账在明确事务内。
  3. 入口限流、排队和背压控制下游,领取accepted/pending不是已经到账。worker重试使用同幂等键,过期资格和库存失败有最终状态。
  4. 容量按峰值和热点key设计,避免所有请求打同一库存行;可预分配库存但需要总量与回收协调。发布演练包括重复/超时/队列积压和恢复后的补偿。

手动走一遍

一次领奖超时,用户重试不能再发一份;查询应能读同一request状态。库存仅100却涌入百万次请求,先限制进入实际发放层,而非让数据库逐条拒绝。

规模与取舍

设入口λ、处理μ,λ>μ时积压约(λ−μ)t,队列必须有容量与等待期限;扩容受热点/数据库瓶颈限制。

易错点与追问

容易失分的边界

  • 缓存发奖结果但没有事务幂等。
  • accepted就承诺到账。
  • 无限重试和无限队列。

继续深挖

  • 如何保持公平而不过度同步?
  • 故障恢复后怎样对账未决领取?
✓已复制微信号!