这是我参与「第五届青训营 」笔记创作活动的第10天
1.引言
系统设计的目的
- 个人:个人能力/技术视野
- 工作:业务驱动、系统重构、突破和创新
系统瓶颈优化
- 火焰图分析
- 链路分析
- 全链路压测
验证系统的可用性和稳定性
- 链路梳理
- 可观测性(链路追踪、业务报警等)
- 全链路测试
- 稳定性控制(限流、兜底、熔断)
- 容灾演练
2.电商和秒杀
基本概念
商品:具有交易价值和属性的信息载体
- SPU(Standard Product Unit):标准化产品单元。 SPU是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的集合,该集合描述了一个产品的特性。
信息聚合:意味着有识别度的信息被用来作为不同SPU的区分点;不是所有属性,使用的属性值是能够有区分度的关键属性值;
易检索:信息聚合与易检索这两个说明,是通过关键属性+属性值的聚合来实现易检索这个目的;目的与使用场景相关联,并非万古不变;哪些属性和属性值会被选为区分SPU的关键属性是会随着场景变化的; 但对于一些场景,已经是共识;比如电商销售,对于标品基本都会选择品牌+型号+关键属性;这也是很多年前我所得到的解释。
标准化的信息集合:说明SPU的本质是信息集合,是一个抽象概念,并非是看得见的东西。比如格力空调 KFR-25GW/E;
- SKU=stock keeping unit(库存量单位) SKU即库存进出计量的单位,SKU是物理上不可分割的最小存货单元。
秒杀业务的特点
- 瞬时流量高
- 读多写少
- 实时要求高
秒杀的挑战
- 资源有限性
- 反欺诈
- 高性能
- 防止超卖
- 流量管控
- 扩展性
- 鲁棒性
3.设计秒杀系统
4S分析
-
Scenario场景:确定要设计哪些功能,承受多大的访问量。
QPS(Query Per Second)一秒内可处理的请求数量 单机QPS=单线程QPS*线程数 集群QPS=单机QPS*机器数
通常QPS 1w+、TPS 1k+
-
Service服务:确定服务方式和框架设计
子服务:用户服务、风控服务、活动服务、订单服务 基础组件:ID生成器、缓存组件、MQ组件、限流组件
- Storage存储:秒杀数据库、商品数据库、库存数据库,读写分离的情况
graph LR
MySQL --> Redis --> Localcache
使用类目来结构化存储信息
- Scale可拓展性:解决设计缺陷,提高鲁棒性、拓展性,需要将秒杀系统和正常电商系统分开
4.实战秒杀系统
秒杀流程
总结
本节课程讲解了制作一个电商秒杀系统的技术难点、技术特点、实现思路和具体实现,通过详细讲解Java代码的方式深入浅出地实战部署了一套可以应对高并发场景的电商系统。