模型
- 活动 -> 场次 -> 奖品 -> 商品
- 用户奖品记录
存储 5%的请求
- MySQL 存储配置信息,更新库存数量,记录用户行为
- 结合 rocket mq,批量下载用户行为,进行本地区分并统计好行为对应的库存消耗(一个行为对应可能是多个用户)
- update的不是-1的方式,而是-n的方式,减少不行update带来的block风险,虽然现有集群能支撑现有的日活量,但是成原则上不允许-1的方式
- insert 也不建议一条条insert,虽然这种在原则上是可以的,但是batchInsert是更好的选择
缓存 90%的请求
- Tair 作为分布式缓存,承载用户的并发请求、用户计数器、库存计数器
- 使用 setCount/incr/desr 进行库存/用户行为计数(只支持 int)
- 使用 动态活动时间动态计算expire time对活动信息进行缓存
- expire time 是second单位,只支持 int
- Guava Cache 作为本地缓存,二级缓存
队列 解耦用户记录
- RocketMQ 批量记录用户操作,本地计算后实时更新运营监控库存数据
- 采用 pull 模式,设置 min/max thread 以及 maxBatchPull,自己实现批量处理逻辑
- 不采用 transaction 模式,影响性能,带来的收益不够大
前后端约定协议
- 解决99%的用户并发请求,使缓存方案不需要严格设计
- 这里涉及到专利的问题(等专利pass后描述)
- 方案的目的是提高转换率,在成本允许的范围内(或者暂时不考虑成本,成本后续结算)。
- 控制最大成本的前提下,提高用户可用性,提高用户转换率
网友评论