早上9点有一个秒杀活动,没多久就开始有舆情反馈“用户页面显示中奖但是无法购买”。后来10点秒杀活动结束,整个故障就被动关闭了。
整体开奖流程如下:
开奖时,大量用户进入开奖页(开奖页会展示实时剩余奖品百分比),当时查询奖品剩余百分比接口的QPM约30W。由于用户中签后会清空奖品剩余的缓存,导致请求打到DB上,出现慢SQL,造成数据库被打满(图),数据库被打满后,中奖凭证保存成功,但是部分中签用户更新奖品状态时失败,前台表达是否中奖是依赖凭证内的是否字段,所以出现了中奖,但是无法下单的情况。
故障原因很简单,但是带来的后续思考很多:
- 查询抽签商品库存数接口限流设置较高,导致没有限制住“查询奖品库存缓存失效导致直接打满db”。这里要重新对接口进行压测,确定限流量规则。
- 该场景还有其他乱七八糟的业务玩法,要求对其他线上玩法进行全面review避免同样问题。
- 缺少直接监控:缺少直接反映预占奖品和确认兑换奖品数据不一致监控导致问题排查和定位长
- 日常运维工具缺失:排查问题只能靠开发人为db操作进行,缺少产品化的能力,容易让排查周期长和排查失误的问题