系统设计(2)| 青训营笔记

81 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
接着写系统设计的部分. 今天来细节分析一下秒杀系统怎么整。
之前提到了秒杀系统需要:瞬时流量高,读多写少,实时性要求高。 由于业务的特点,尤其是秒杀,会在短期产生大量的需求。 同时秒杀任务有一定的要求: 高并发性,需要高性能,需要反欺诈,需要防止超卖。那就一步步来。
首先分析场景
一个秒杀场景的功能是1. 秒杀活动的发布。2. 秒杀商品页面详情的呈现。3. 秒杀下单
一个秒杀场景的服务是1. 用户服务。2. 风控服务。3. 活动服务。4. 订单服务。 一个秒杀场景的并发能达到:1. 万人秒杀下单。2. QPS1w+。 3. TPS1k+;
对应场景进行系统选型

存储系统:对应高并发环境下的存储系统应当对应三层结构:

  • LocalCache
  • Redis
  • MySql
    三层结构吞吐速度递减,但是逐渐着重于持久化。

基础组件:对应系统环境下需要用到的component

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

扩展部分:针对不同项目的需求,需要匹配的扩展

  • 流量隔离
  • CDN
  • 缓存优化
  • 流量管控
  • 数据库相关扩展
  • MQ扩展
  • Redis扩展
  • 服务水平扩展
  • 服务垂直扩展

综上,整个系统选型是如下部分:

  1. 用户层:针对Web端,IOS端,Android端的前端方案,提供请求和可视化
  2. 接入层:采用Ngnix进行反向代理和转发
  3. 应用侧:这部分是主要内容,能够完成各种服务:发布活动,秒杀详情,秒杀下单,ID生成器,限流组件,MQ组件,Cache组件
  4. 基础层:作为基础设备,有Redis,RocketMQ,MySQL等相关基础层面

整理来看,一个秒杀的流程图是:
用户抢购进行下单→请求发送到秒杀系统→秒杀系统进行登录校验,风控校验,redis活动校验,redis预扣库存→经过MQ削峰→提出生产者消费服务→MQ消费者扣减库存→订单超时检查→完成支付