这是我参与「第五届青训营 」伴学笔记创作活动的第 11 天
系统设计方法论
为什么要做系统设计
- 个人 :面试,个人能力提升,拓展技术视野
- 工作 : 业务驱动,系统重构,突破和创新
如何评估一个系统
性能,耦合性,可用性,易用性,可维护性,伸缩性,安全性,扩展性,
系统设计的定义
为了达成某种目的,通过个体组成整体的过程
如何做系统设计
系统设计的流程
场景分析 (Scenario)
- 什么系统,需要哪些功能,多大的并发量
存储设计 (Storage)
- 数据如何组织,Sgl存储,NoSgl存储
服务设计 (Service)
- 业务功能实现和逻辑整合
可扩展性 (Scale)
-
解决设计缺陷,提高鲁棒性、扩展性
如何发现系统的瓶颈
火焰图分析,链路追踪,性能测试
如何保证可用性和稳定性
- 链路梳理 :核心链路,流量漏斗,强弱依赖
- 可观测性 : 链路追踪,核心监控,业务报警
- 全链路测试 :压力测试,负载测试,容量测试
- 稳定性控制 :系统限流,业务兜底,熔断降级
- 容灾演练 :混沌工程,应急手册,容灾预案
电商秒杀业务介绍,秒杀业务的特点
-
Spu(Standard Product Unit)
-
Sku(Stock Keeping Unit)
-
秒杀业务的特点
- 瞬时流量高
- 读多写少
- 实时性要求高
秒杀业务的挑战
防止超卖,流量管控,扩展性,鲁棒性, 资源成本,反欺诈,高性能,
秒杀业务的设计
场景,存储,服务,扩展四方面
-
存储:mysql -> redis -> localcache
-
服务:
- 子服务
- 基础组件: id生成器,缓存组件,MQ组件。限流组件
-
拓展
系统架构
-
用户层: web,ios,android
-
接入层:nginx
-
应用层:发布活动,秒杀详情,秒杀下单,id生成器,限流组建,MQ组建,cache组建
-
基础层:mysql ,redis, rocketmq