这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天
一、本节课重点内容
- 系统设计方法论
- 电商秒杀业务介绍
- 课程实践
一、本节课详细内容
1. 系统设计方法论
系统设计的问题:
- 为什么要做系统设计
- 系统设计的定义是什么
- 怎么做系统设计,如何落地一个系统
- 系统功能实现后如何分析瓶颈并优化
- 如何验证系统的可用性和稳定性
系统设计的定义:为了达成某种目的,通过个体组成整体的过程
如何做系统设计(4s分析法):
- 场景分析( Scenario ):什么系统,需要哪些功能,多大的并发量
- 存储设计( Storage )数据如何组织,Sql存储,NoSql存储
- 服务设计( Service ):业务功能实现和逻辑整合
- 可扩展性( Scale ):解决设计缺陷,提高鲁棒性、扩展性
如何发现系统的瓶颈:
- 火焰图分析
- 链路追踪
- 性能测试
如何保证可用性和稳定性:
-
链路梳理:
- 核心链路
- 流量漏斗(eg.购物车10个商品只下单两个)
- 强弱依赖(弱依赖可降级,强依赖不可)
-
可观测性(观测指标):
- 链路追踪(全链路微服务追踪)
- 核心监控
- 业务报警
-
全链路测试:
- 压力测试
- 负载测试
- 容量测试(eg.双十一)
-
稳定性控制:
- 系统限流
- 业务兜底
- 熔断降级
-
容灾演练:
- 混沌工程(故障注入,演练)
- 应急手册
- 容灾预案(机房故障等)
2. 电商和秒杀
电商要素:
- 人-消费者侧:消费者,用户,流量来源
- 货-供给侧:商品,商家,供应链
- 场-交易环境:线下商场,线上电商
商品:具有交易价值和属性的信息载体
- SPU: Standard Product Unit (标准化管理)
- SKU: Stock Keeping Unit (库存保存单元,具有交易属性) 秒杀业务的特点:
- 瞬时流量高
- 读多写少
- 实时性要求高
秒杀的挑战:
资源成本(资源有限);反欺诈;高性能;防止超卖;流量管控(对无用流量拦截、过滤);扩展性;鲁棒性(系统稳定性、可用性)
三、课后
- 发起订单请求100个,数据库中库存剩1,redis中为0,为什么?
- 我们在业务中用MQ做了缓存,MQ中用户消费成功,但订单服务还没有这个消息,若此时用户立马去查看或取消该订单(在业务逻辑中还没有处理),我们如何解决该问题?