系统设计 | 青训营笔记

82 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第9天

本节课程主要分为四个方面:

  1. 系统设计方法论
  2. 电商秒杀业务介绍
  3. 课程实践
  4. 课程总结

系统设计

作为一个架构师,功能需求的完成:

1.确认需求。跟业务产品人员进行沟通确认,最好是有聊天记录等保存下来,形成文档,再由双方确认。

2.分析需求。分表面需求和内在需求,而内在需求的挖掘需要一定的经验。

3.分析资源。主要包括人、资源、时间节点、依赖资源,依赖资源一般都是第三方需要沟通,也是比较消耗时间的。

4.需求范围。功能性需求和非功能性需求,而非功能性需求往往是指性能方面的需求。

5.技术选型。选择开源技术还是自研,这个需要对各个技术进行一个评估。

秒杀项目

秒杀流程

登录进入商品列表页面,静态资源缓存

点击进入商品详情页面,静态资源缓存,Ajax获取验证码等动态信息

点击秒杀, 将验证码结果和商品ID传给后端,如果结果正确。动态生成随机串UUID,结合用户ID和商品ID存入redis,并将path传给前端。前端获取path后,再根据path地址调用秒杀服务

服务端获取请求的path参数,去查缓存是否在

如果存在,并且Redis还有库存,预减redis库存,看是否已经生成订单,没有的话就将请求入消息队列 从消息队列中取消息:获取商品ID和用户ID,判断数据库库存,然后下单

下单:减库存,生成订单

前端轮询订单生成结果。50ms继续轮询或者秒杀是否成功和失败

项目难点及问题解决

使用了大量缓存,那么就存在缓存击穿和缓存雪崩以及缓存一致性等问题

大量的使用缓存,对于缓存服务器也有很大的压力,如何减少redis的访问

在高并发请求的业务场景,大量请求来不及处理,甚至出现请求堆积的情况

怎么保证一个用户不能重复下单

怎么解决超卖现象

页面静态化的过程

课程总结

本节课主要针对系统设计中的秒杀项目进行了详细介绍,包括分析、设计流程、实践,收益颇多,希望可以继续有所收获。