这是我参与「第五届青训营 」笔记创作活动的第6天。
一、本堂课重点内容:
- 系统设计方法论
- 电商秒杀业务介绍
二、详细知识点介绍:
- 系统设计方法论
- 定义
- 系统:系统是一些关联的个体,按照某种特定规则去运作,可以完成单个个体不能完成工作的整体。
- 设计:设计是设想和计划,即目的和过程安排。
- 系统设计思路(4s分析法)
- ①场景分析:什么系统,需要哪些功能,多大的并发量;
- ②存储设计:数据如何组织Sql储存,NoSql储存;
- ③服务设计:业务功能实现和逻辑整合;
- ④可扩展性:解决设计缺陷,提高鲁棒性,扩展性。
- 发现系统瓶颈方法
- 火焰图分析:单个实例分析,CPU使用,内存使用;
- 链路追踪:对同一个请求做链路追踪,清楚此请求经过了哪些服务,在每个服务的耗时;
- 性能测试:挖掘整个系统性能的不足。
- 保证系统可用性和稳定性的方法
- 链路梳理:保障核心链路,非核心依赖出错可采取降级处理;
- 可观测性:链路追踪,核心指标监控,核心业务异常报警;
- 全链路测试:压力测试:压到甚至超过链路临界点,观测服务是否满足可用性;负载测试:准确测试出链路的负载;容量测试:测试系统整体容量水位;
- 稳定性控制:系统限流,业务兜底,下游依赖返回错误,从当前服务可返回兜底的数据,熔断降级;
- 容灾演练:混沌工程,通过注入故障的方式做演练,从而沉淀出应急的操作手册,容灾预案。
- 定义
- 电商秒杀业务介绍
- SPU(Standard Product Unit):标准化产品单元
- SKU(Stock Keeping Unit):库存保持单元
- 秒杀业务特点:瞬时流量高;读多写少;实时性要求高。
- 场景:
- 功能:秒杀活动发布,秒杀商品详情,秒杀下单;
- 并发:万人参与秒杀,QPS 1W+,TPS 1w+.
- 储存:MySQL → Redis → Localcache.
- 服务:
- 子服务:用户服务,风控服务,活动服务,订单服务;
- 基础组件:ID生成器,缓存组件,MQ组件,限流组件。
- 扩展:
- 流量隔离
- CDN(内容分发网络,提高静态资源缓存访问)
- 缓存优化
- 流量管控
- 数据库扩展(读写分离,分库分表)
- 服务水平扩展(负载均衡,反向代理)
- MQ扩展
- Redis扩展(读写分离,用一主多从集群模式保障可用性和稳定性)
- 服务垂直扩展(微服务拆分)