秒杀系统设计 | 青训营笔记

57 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天

系统设计方法论

为何系统设计

  • 面试
  • 个人能力提升
  • 扩展技术视野
  • 业务驱动
  • 系统重构
  • 突破和创新
  • 解决问题

评估系统

image.png

系统设计标准流程

image.png

如何发现系统瓶颈

  • 火焰图分析:单个实例cpu和内存的分析,找代码瓶颈
  • 链路跟踪:知道请求在那个服务上耗费时间多
  • 性能测试

保证可用性与稳定性

image.png

电商秒杀业务介绍

image.png

  • 商品:具有交易价值和属性的信息载体
  • spu:标准产品单元(商品太多了,需要统一标准化管理,降低成本)
  • sku:库存保存单元(有库存和价格信息)

特点

  • 瞬时流量高
  • 读多血少
  • 实时性要求高

挑战

  • 反欺诈:防黄牛

image.png

如何设计秒杀系统

场景

  • 功能

    • 秒杀活动发布

    • 秒杀商品详情(用户侧查询商品详情,读多)

    • 秒杀下单(写)

  • 并发

    • 万人参与秒杀

    • QPS(每秒的响应请求数,也即是最大吞吐能力) 1w+

    • TPS(服务器每秒处理的事务数) 1k+

存储

三级存储

image.png

image.png

  • h_category:产品类目表

    • parent_id:父类目
    • name:类目名字
    • level:类目所属级别
    • be_parent:是不是父节点
    • status:状态(?)
  • h_category_attribute:类目对应的属性

    • attribute_key 类目的属性key
    • status:状态
  • h_spec:规格,比如手机颜色,手机大小

    • category_id:类目id
    • spec_key:规格key
    • status:状态
  • h_spec_detail:规格详情表,比如颜色有红色,蓝色,紫色

  • h_product:商品属性表,

    • category_id:类目id
    • shop_id:店铺id
    • title:
    • main_image:图片
    • detail:详情
    • category_data:
    • spec_data:
  • h_sku:商品库存表

    • price:价格
    • stock:库存
    • spec_detail_ids:具体规格的id
  • h_promo:活动表

    • promo_name:活动名字
    • start_data:开始时间
    • end_data:结束时间
    • status:活动状态
  • h_promo_product:活动的商品表

    • promo_id:活动id
    • sku_id:库存表id
    • spu_id:商品表id
    • promo_stock:活动库存
    • promo_price:活动价格

服务

子服务

  • 用户服务
  • 风控服务
  • 活动服务
  • 订单服务

基础组件

  • ID生成器:生成订单id,使用mysql也要分库分表设计分布式id生成
  • 缓存组件
  • MQ组件:削峰
  • 限流组件

扩展

  • 流量隔离
  • CDN:静态资源缓存
  • 缓存优化
  • 流量管控
  • 数据库扩展:读写分离,分库分表
  • 服务水平扩展:负载均衡,反向代理
  • MQ扩展:多主多从架构
  • 服务垂直扩展

系统架构图

image.png

秒杀流程图

image.png