这是我参与「第五届青训营 」伴学笔记创作活动的第 11 天
系统设计之秒杀系统
系统设计方法论
关于系统设计的一些问题
-
为什么要做系统设计?
业务驱动、对现有系统重构以满足业务需求、业务上的突破和创新(例如直播电商与传统电商的区别)
-
系统设计的定义是什么?
-
怎么做系统设计并落地?
-
在系统功能实现后,如何分析瓶颈并优化?
-
如何验证系统的可用性和稳定性?
如和做系统设计?
可以按照如下的流程进行:
-
场景分析(Scenario)
是一个什么样的系统?需要哪些功能?并发量如何?
-
存储设计(Storage)
数据如何组织、采用传统SQL还是NoSQL?
-
服务设计(Service)
业务功能的实现以及逻辑整合
-
可扩展性设计(Scale)
解决设计缺陷、提高健壮性与扩展性
以上的方法也称为系统设计的4S分析法。
如何发现系统的瓶颈?
-
火焰图分析
针对单个实例的分析,找到代码上的一些瓶颈
-
链路追踪
在微服务中,追踪一个请求经过了哪些服务,分析出哪个服务的耗时占比比较大
-
性能测试
如何保证系统的可用性和稳定性?
- 链路梳理:梳理出核心链路并加强保障
- 可观测性:追踪、监控、业务报警
- 全链路测试:压力测试、负载测试和容量测试(容量水位)
- 稳定性控制:包括限流、业务兜底(下游错误时返回一些兜底数据)和熔断降级等。
- 容灾演练:混沌工程、应急手册、容灾预案
电商秒杀业务介绍
电商业务的介绍
交易业务的三个要素:
- 供给侧:商品、商家、供应链
- 消费者侧:消费者、用户、流量源
- 交易环境:线下商场&线上电商
秒杀业务的特点有哪些?
- 瞬时流量高
- 读多写少:秒杀业务中用户会不停刷新查看商品
- 实时性要求高
秒杀业务的挑战有哪些?
- 资源成本(用有限的资源完成目标)
- 反欺诈(防黑产、黄牛党)
- 高性能(实时性要求高)
- 防止超卖
- 流量管控
- 扩展性
- 健壮性
如何设计一个秒杀系统?
系统设计分析
从4S分析法出发:
-
Scenario 场景
- 需要实现的功能:秒杀活动发布、秒杀商品详情、秒杀下单
- 满足并发要求:万人参与秒杀、QPS 1W+、TPS 1K+
-
Storage 存储
三级存储:
- Localcache
- Redis
- MySQL(数据库表的设计)
-
Service 服务
-
子服务:
- 用户服务
- 风控服务
- 活动服务
- 订单服务
-
基础组件:
- ID生成器
- 缓存组件
- MQ组件
- 限流组件
-
-
Scale 扩展
- 流量隔离(秒杀商品与常规商品隔离)、CDN、缓存优化、流量管控
- 数据库扩展(读写分离、分库分表)、MQ扩展、Redis扩展
- 服务水平扩展(负载均衡、反向代理)、服务垂直扩展(对服务进行微服务拆分)
架构层次划分
一个秒杀系统可以设计成如下的层次:
| 用户层 | WEB IOS Android |
|---|---|
| 接入层 | Nginx |
| 应用层 | 发布活动 秒杀详情 秒杀下单 ID生成器 限流组件 MQ组件 CACHE组件 |
| 基础层 | Redis MySQL RocketMQ |