- 秒杀系统简介
- 系统环境搭建
- 系统设计
- 前端后台功能开发
- 单机优化、分布式方案、防外挂机器
秒杀系统简介
秒杀系统特点
- 人多商品少
- 时间短流量高
- 外挂机器
秒杀系统技术分析
- 瞬时高并发的处理能力
- 多层次的分布式处理能力
- 人机交互与对抗
系统环境搭建
技术选型分析:
- Linux + Nginx + PHP + MySQL + Redis
- CDN,智能 DNS
- 分布式缓存,全国多节点
- 多线路接入
- 负载均衡 LVS
- 大型 Web 集群
系统设计
基本功能和流程
- 后台:活动管理、商品管理、订单管理、日志管理
- 前台:商品展示、秒杀、购物车、我的订单
秒杀 -> 问答验证 -> 库存验证 -> 生成订单 -> 成功
- 问答验证
- 用户登录验证
- 用户黑名单验证
- 用户参数验证
- 库存验证
- 单件商品库存验证
- 多个商品库存验证
- 商品赠品库存验证
- 订单验证
- 商品明细验证
- 订单信息验证
数据库设计
- 活动信息表 activities
- id - 活动 ID
- title - 活动名称
- start_time - 活动开始时间
- end_time - 活动结束时间
- status - 活动状态 - 0 待上线,1 已上线,2 已下线
- creator_ip - 创建人 IP
- created_at - 创建时间
- updated_at - 更新时间
- 商品信息表 goods
- id - 商品 ID
- activity_id - 活动 ID
- title - 商品名称
- description - 商品描述
- icon - 商品小图
- normal_price - 原价
- discount_price - 秒杀价
- total_num - 总数量
- user_num - 单个用户限购数量
- left_num - 剩余可购买数量
- status - 商品状态 - 0 待上架,1 已上架,2 已下架
- creator_ip - 创建人 IP
- created_at - 创建时间
- updated_at - 更新时间
- 问答信息表 questions
- id
- activity_id
- title
- question 1
- answer 1
- question 10
- answer 10
- status - 问答状态 - 0 正常,1 删除
- creator_ip - 创建人 IP
- created_at - 创建时间
- updated_at - 更新时间
- 订单信息表
- id - 订单 ID
- activity_id - 活动 ID - 添加普通索引
- goods_id - 商品 ID - 添加普通索引
- userid - 用户 ID - 添加普通索引 user_name - 用户名称
- total_num - 购买商品数量
- goods_num - 购买商品种类数量
- total_price - 订单总金额
- discount_price - 订单优惠后金额
- confirmed_at - 确认订单时间
- paid_at - 订单支付时间
- overed_at - 订单过期时间
- canceled_at - 订单取消时间
- goods_info - 订单商品详情
- status - 订单状态 - 1 待支付,2 已支付,3 已过期,4 管理员已确认,5 已取消,6 已删除,7 已发货,8 已收货,9 已完成
- creator_ip - 创建人 IP
- created_at - 创建时间
- updated_at - 更新时间
秒杀功能开发
- 商品展示页面静态化
- 商品状态控制
- 商品秒杀业务逻辑
- 验证用户是否登陆
- 验证提交参数是否正确合法
- 验证用户是否已经购买
- 验证问答信息是否正确
- 验证活动信息,商品信息是否正常
- 验证用户购买的商品数量是否在限制的范围内
- 验证商品是否还有剩余数量
- 扣除商品剩余数量
- 创建订单
- 返回提示信息
单商品秒杀
单商品特点
- 简单,没有更多选择
- 独立,没有关联关系
- 容易,验证逻辑更少
万次秒杀
- 请求少,并发,实现了基本功能就可以满足
- 不需要太多考虑优化方面
- 单机,MySQL 数据库就可以支持
百万次秒杀
- 请求量和并发量较大
- Web 服务器集群
- 引入 Redis 缓存
组合商品秒杀
组合商品特点
- 支持多商品的选择
- 多个商品的库存、限购数量
- 验证和处理的逻辑更多
优化单机性能
- 减少页面大小,启用 gzip 压缩
- 减少资源请求数量,合并和压缩 CSS,JavaScript
- 设置浏览器缓存,利用 CDN 加速,Nginx 配置文件缓存
- 数据库索引
- 减少数据规模,数据清理
用户行为分析
- 用户访问页面的路径
- 页面停留时间、点击位置和时间
- 用户基本信息、用户 IP、浏览器信息等