在线抢购系统需求分析报告

1、抢购业务分析前端

1. 抢购业务的特性

(1) 低廉的价格mysql

(2) 大幅推广react

(3) 瞬间售空nginx

(4) 定时上架,定时结束redis

(5) 并发量高sql

2. 技术挑战

(1) 对现有业务的冲击数据库

(2) 高并发的环境下,数据库负担后端

(3) 高并发状况下网络的波动缓存

(4) 前端对数据显示的处理服务器

(5) 产品定时上架的处理

(6) 库存的“超卖”现象

(7) 秒杀器的应对

2、抢购业务架构原则

1. 尽可能将请求拦截在系统上游

减轻后端数据层,数据读取的压力,防止服务器轻易挂掉

2. 读多写少,多使用缓存

减小数据库的读取次数

3、抢购业务架构设计

1. 总体架构

采用先后端分离的模式,后端只提供数据的操做,不负责前端页面的处理。采用RESTful API为前端提供数据,或者修改数据。前端采用react技术开发SPA单页应用,分离先后端,解耦系统,提升系统的稳定性和健壮性。采用nginx做为前端也后端交接的中转站,实现代理和负载均衡,减轻后台的请求静态资源,提升系统总体的稳定性。

2. 前端层架构

(1) 采用nginx和CDN作反向代理,快速响应来自于全国各地的请求,从而解决网络带宽的瓶颈。

(2) 倒计时的问题,因为客服端时间和服务器时间不一致,会致使抢购失败或者提早抢购。因此采用每隔一段时间,进行先后端时钟的同步。

(3) 当时间未到的时候,前端进行请求的拦截,采用节流的方式禁止前端在未开始时发送无效的请求。

3. 后端架构

(1) 在请购的API接口,实现一个抢购队列,放在“插队”行为。

(2) 采用mysql进行数据的存储,采用redis进行数据的缓存,在抢购开始的时,从mysql数据库中读取一次数据,把读取到的商品信息保存在redis缓存中,当每次执行抢购的时,从redis中读取商品信息,并修改相应库存,减轻mysql数据库的频繁读写。

(3) 在抢购成功过之后,若是用户在20分钟以内为付款则,商品从新进入抢购队列中进行抢购。

4、业务逻辑

 

  1. 流程图Step1:先通过Nginx负载均衡和分流
  2. 进入jseckill程序处理。 Google guava RateLimiter限流。 并发量大的时候,直接舍弃掉部分用户的请求
  3. Redis判断是否秒杀过。避免重复秒杀。若是没有秒杀过 
    把用户名(这里是手机号)和seckillId封装成一条消息发送到RabbitMQ,请求变成被顺序串行处理 
    当即返回状态“排队中”到客户端上,客户端上回显示“排队中...”
  4. 后台监听RabbitMQ里消息,每次取一条消息,并解析后,请求Redis作库存减1操做(decr命令) 
    并手动ACK队列 若是减库存成功,则在Redis里记录下库存成功的用户手机号userPhone.
  5. 流程图Step2:客户端排队成功后,定时请求后台查询是否秒杀成功,后面会去查询Redis是否秒杀成功
    若是抢购成功,或者抢购失败则中止定时查询, 若是是排队中,则继续定时查询。

 

5、ER图

 

 

6、用例图

添加抢购商品流程:

 

 

前端抢购流程

 

 

后端处理数据流程

 

 

7、架构图

 

相关文章
相关标签/搜索