这是 Beta 探索课程,内容结构、实验步骤和示例可能会继续调整。
整体思路:秒杀系统的整体设计思路
场景:如何设计一个秒杀系统?
前两节我们了解了秒杀业务的独特特点和技术挑战。现在让我们站在更高的角度,从宏观层面设计秒杀系统的整体架构。
设计目标:
输入:
- 秒杀QPS:50万
- 库存:100件
- 持续时间:3秒
- 用户:50万人参与
输出:
- 系统架构图
- 核心技术选型
- 关键设计决策整体架构设计
三层架构概览
秒杀系统采用分层架构,每一层解决特定问题:
┌─────────────────────────────────────────┐
│ 用户层 (Client Layer) │
│ • 浏览器/APP │
│ • 静态资源 CDN │
│ • 本地缓存 │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ 网关层 (Gateway Layer) │
│ • 负载均衡 │
│ • 限流熔断 │
│ • 防刷风控 │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ 服务层 (Service Layer) │
│ • 秒杀服务 │
│ • 库存服务 │
│ • 订单服务 │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ 数据层 (Data Layer) │
│ • Redis (库存缓存) │
│ • MQ (消息队列) │
│ • MySQL (持久化) │
└─────────────────────────────────────────┘各层职责详解
核心设计思路
思路一:流量削峰 🏔️
核心理念:不要让流量洪峰直接打到数据库
思路二:缓存优先 ⚡
核心理念:能走缓存就走缓存,别打数据库
思路三:异步处理 📨
核心理念:快速响应,异步处理,别让用户等
思路四:可降级 ⬇️
核心理念:系统压力过大时,优雅降级,保核心功能
核心技术选型
数据层选型
系统架构图
关键设计原则
想一想
在继续学习之前,请思考以下问题:
问题 1:为什么要把库存放在Redis?
为什么不能用数据库直接扣库存?
提示:
- Redis是内存操作,速度快
- Redis单线程,无锁竞争
- Redis支持原子操作
问题 2:为什么要用消息队列?
为什么不能直接下单?
提示:
- 削峰填谷
- 异步处理
- 解耦
问题 3:如何保证Redis和MySQL数据一致?
Redis扣减了库存,MySQL还没同步,怎么办?
提示:
- 最终一致性
- 对账机制
- 补偿机制