PHP 秒杀系统

  • 秒杀系统简介
  • 系统环境搭建
  • 系统设计
  • 前端后台功能开发
  • 单机优化、分布式方案、防外挂机器

秒杀系统简介

秒杀系统特点

  • 人多商品少
  • 时间短流量高
  • 外挂机器

秒杀系统技术分析

  • 瞬时高并发的处理能力
  • 多层次的分布式处理能力
  • 人机交互与对抗

系统环境搭建

技术选型分析:

  • 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、浏览器信息等