这是我参与「第五届青训营」伴学笔记活动的第九天,今天了解了秒杀系统的相关结构及流程。了解了mq,限流等组件的定义,也了解到了部分redis的作用。
可用性和稳定性的保证
(1)链路梳理进行追踪:核心链路,流量漏斗和强弱依赖
(2)指标监控和报警:核心监控,业务报警
(3)全链路压力负载容量测试
(4)稳定性控制:限流,业务兜底及熔断降级
(5)为故障进行预案
秒杀业务
特点:瞬时流量高,读多写少对实时性要求较高
场景:并发进行
服务: 用户壶,风控,活动,以及订单服务。
基础组件:ID生成器,缓存组件,MQ组件异步解耦的功能,限流组件 扩展:流量隔离,cdn提高静态资源访问效率,缓存优化,流量管控,数据库扩展,MQ扩展,redis异步扩展。
系统结构
接入层:Nginx
应用层:id生成器,限流,MQ,cache组件
基础层:redis ,rocketmq,mysql
秒杀系统需要登录检验,风控校验,经过redis的活动校验,同时需要mq对系统削峰,以及redis的预扣库存和mysql的实际扣减库存
实战
合法性校验:校验成功后转换,用id组件生成活动ID把他写到数据库里,,取出该次活动的商品并在数据库里查询,过滤掉下架商品,若合法保证不超卖进行库存扣减。
活动详情:获取活动ID,转换成活动model
下单:要进行登录验证,风控校验,把请求转换成下单model
订单:数据转换,校验活动和商品状态,并扣减秒杀商品表里扣减库存,这里要先缓存到redis里,否则会产生大量行锁。然后从后端获取价格。从注解得到key,如果没有得到进行拼接。
分布式锁在抽象父类里定义clock进行自动解锁,