这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
接着写系统设计的部分.
今天来细节分析一下秒杀系统怎么整。
之前提到了秒杀系统需要:瞬时流量高,读多写少,实时性要求高。 由于业务的特点,尤其是秒杀,会在短期产生大量的需求。 同时秒杀任务有一定的要求: 高并发性,需要高性能,需要反欺诈,需要防止超卖。那就一步步来。
首先分析场景
一个秒杀场景的功能是1. 秒杀活动的发布。2. 秒杀商品页面详情的呈现。3. 秒杀下单
一个秒杀场景的服务是1. 用户服务。2. 风控服务。3. 活动服务。4. 订单服务。
一个秒杀场景的并发能达到:1. 万人秒杀下单。2. QPS1w+。 3. TPS1k+;
对应场景进行系统选型
存储系统:对应高并发环境下的存储系统应当对应三层结构:
- LocalCache
- Redis
- MySql
三层结构吞吐速度递减,但是逐渐着重于持久化。
基础组件:对应系统环境下需要用到的component
- ID生成组件
- 缓存组件
- MQ组件
- 限流组件
扩展部分:针对不同项目的需求,需要匹配的扩展
- 流量隔离
- CDN
- 缓存优化
- 流量管控
- 数据库相关扩展
- MQ扩展
- Redis扩展
- 服务水平扩展
- 服务垂直扩展
综上,整个系统选型是如下部分:
- 用户层:针对Web端,IOS端,Android端的前端方案,提供请求和可视化
- 接入层:采用Ngnix进行反向代理和转发
- 应用侧:这部分是主要内容,能够完成各种服务:发布活动,秒杀详情,秒杀下单,ID生成器,限流组件,MQ组件,Cache组件
- 基础层:作为基础设备,有Redis,RocketMQ,MySQL等相关基础层面
整理来看,一个秒杀的流程图是:
用户抢购进行下单→请求发送到秒杀系统→秒杀系统进行登录校验,风控校验,redis活动校验,redis预扣库存→经过MQ削峰→提出生产者消费服务→MQ消费者扣减库存→订单超时检查→完成支付