复盘格式和内容标准

文章讲述了在JOYx小猪妖奇遇乐园活动中,由于1700名中奖用户信息存储导致的JIMDB性能问题。团队通过切换分片、优化查询方式(从hGetAll到hGet)以及长期的数据结构修改来解决这个问题。后续还计划进行压测和场景还原以确保高保真度。
摘要由CSDN通过智能技术生成

【问题描述】:JOY x 小猪妖奇遇乐园会场活动中奖用户无法填写地址, 中奖后我的奖品无中奖信息展示
https://prodev.m.jd.com/mall/active/yBtz1ak3u77cLxDxNSiWGpQRqYj/index.html
【问题影响】:
影响时段:22:58-23:18
用户体验影响:热点用户咨询量20+.,
【原因分析】:
根因分析:JIMDB里是以项目维度存储的用户pin,项目ID,获奖明细等信息。当晚共有1700个用户中了实物奖,导致JIMDB存放了一个1700个元素的hash结构,value值过大,任一用户查中奖相关信息(queryInteractiveRewardInfo)看都会全量获取这个hash数据(使用的是hGetAll方法,拿到所有用户的中奖信息)。出问题的时间点查看中奖信息的用户较多,产生大概每秒500次访问请求,导致CPU打满,内存积压最终实例内存打满被杀。
5001700500b(单个用户存储大小) ≈ 400M/s 的瞬时内存写入
【处理过程】:问题发生、发现到解决整体时间线
22:58 JIMDB团队侧收到3248集群一个实例故障切换告警,排查故障原因;
23:02 发现切换上来的实例发生阻塞,定位到大量hgetall访问大key,CPU打满;
23:04 联系业务研发反馈该情况;
23:08 该实例内存持续积压被杀,该分片数据丢失;
23:15 经业务确认,JIMDB团队执行切换空分片预案;
23:18 分片切换完成,可用性恢复。
【后续改进】:
短期方案:使用hGet方法,把全量获取这个key改成只获取该用户的中奖信息(1700个元素中的1个),会大大减小CPU开销。已压测通过,jimdb奖励记录数据开发回源能力,已上线。
长期方案:修改数据结构,不使用一个hash结构存储所有地址。
梳理项目中所有因活动差异可能产生的大key。重点排查hgetall等操作。
测试优化:压测方案对该场景进行压测数据高保真补充,原压测仅使用了预发活动id(压测脚本中查询接口queryInteractiveRewardInfo脚本中入参未传addressFlag,未调用查询用户是否需要填写地址),关注了查询qps量级,但后续需要还原大量级的中奖人数下查询地址场景已确保全方位的高保真场景;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值