这是我参与「第五届青训营 」伴学笔记创作活动的第9天
本节课程主要分为四个方面:
- 系统设计方法论
- 电商秒杀业务介绍
- 课程实践
- 课程总结
系统设计
作为一个架构师,功能需求的完成:
1.确认需求。跟业务产品人员进行沟通确认,最好是有聊天记录等保存下来,形成文档,再由双方确认。
2.分析需求。分表面需求和内在需求,而内在需求的挖掘需要一定的经验。
3.分析资源。主要包括人、资源、时间节点、依赖资源,依赖资源一般都是第三方需要沟通,也是比较消耗时间的。
4.需求范围。功能性需求和非功能性需求,而非功能性需求往往是指性能方面的需求。
5.技术选型。选择开源技术还是自研,这个需要对各个技术进行一个评估。
秒杀项目
秒杀流程
登录进入商品列表页面,静态资源缓存
点击进入商品详情页面,静态资源缓存,Ajax获取验证码等动态信息
点击秒杀, 将验证码结果和商品ID传给后端,如果结果正确。动态生成随机串UUID,结合用户ID和商品ID存入redis,并将path传给前端。前端获取path后,再根据path地址调用秒杀服务
服务端获取请求的path参数,去查缓存是否在
如果存在,并且Redis还有库存,预减redis库存,看是否已经生成订单,没有的话就将请求入消息队列 从消息队列中取消息:获取商品ID和用户ID,判断数据库库存,然后下单
下单:减库存,生成订单
前端轮询订单生成结果。50ms继续轮询或者秒杀是否成功和失败
项目难点及问题解决
使用了大量缓存,那么就存在缓存击穿和缓存雪崩以及缓存一致性等问题
大量的使用缓存,对于缓存服务器也有很大的压力,如何减少redis的访问
在高并发请求的业务场景,大量请求来不及处理,甚至出现请求堆积的情况
怎么保证一个用户不能重复下单
怎么解决超卖现象
页面静态化的过程
课程总结
本节课主要针对系统设计中的秒杀项目进行了详细介绍,包括分析、设计流程、实践,收益颇多,希望可以继续有所收获。