手把手教你系统设计——秒杀系统 | 青训营笔记

64 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 11 天,参与青训营的第 21 天。今天主要学习了秒杀系统的设计。

系统设计方法论

系统:关联的个体按照某种特定规则运作则称工作的整体

设计:设想和计划

为了达成某种目的,通过个体组成整体的过程

如何做系统设计?

场景分析(Scenario)

存储设计(Storage)

服务设计(Service)

可拓展性(Scale)

发现系统的瓶颈?

火焰图分析 ; 链路追踪 ; 性能测试

保证可用性和稳定性?

链路梳理 ; 可观测性 ; 全链路测试 ; 稳定性控制 ; 容灾演练

电商介绍

商品:具有交易价值和属性的信息载体

SPU(Standard Product Unit)

SKU(Stock Keeping Unit )

秒杀业务特点:

瞬时流量高

读多写少

实时性要求高

秒杀的挑战

高性能 ;资源成本 ;扩展性 ;防止超卖 ;反欺诈 ; 流量管理 ; 鲁棒性

如何设计秒杀系统

场景(scenario)

功能:

  • 秒杀活动发布
  • 秒杀商品详情
  • 秒杀下单

并发:

  • 万人参与秒杀
  • QPS(Queries Per Second) 1w+
  • TPS(Transactions Per Second) 1k+

存储(Storage)

image-20230205135215299.png

服务(Service)

子服务:

  • 用户服务
  • 风控服务
  • 活动服务
  • 订单服务

基础组件

  • ID生成器
  • 缓存组件
  • MQ组件
  • 限流组件

扩展(Scale)

系统架构图

image-20230205135741668.png

课程实践

秒杀项目流程图

image-20230205210748046.png

代码整体为common定义一些常量,迭代,结构体,config中为redis的一些配置,controller为SpringBoot中常规则的controller,convertet做数据转化,dao目录为数据操作,entity数据库实体,enums枚举,handler异常处理,limit先六组组件,lock分布式组件,model数据模型层,mq生产者和消费者,service业务逻辑层。

业务逻辑:

1、下单请求上传(用户id,活动id,活动spu id,活动sku id, 数量,价格,总价,收货地址id, 收货地址。)形成一个model,用model完成下面操作。

2、id生成器生成一个活动id,写入数据库,取商品spuid放入set中,查询商品是否存在,校验合法性。

3、扣库存,数据库操作检验于库存大小关系,防止超卖,成功后缓存放入redis

活动详情接口:同样缓存到redis内,先获取id,正常返回数据。

下单接口:首先登录验证(mock),进行校验活动和商品状态,从后端获取秒杀价格,

项目主要优化途径:商品详情缓存到redis内.

今日总结

今天学习了商品秒杀项目的编写,从场景、存储、扩展三个方面来考虑设计电商系统,学习了整体项目的开发和面对秒杀场景下高效率需求的优化,增强了思考业务逻辑的能力。