这是我参与「第五届青训营」伴学笔记创作活动的第 8 天。
-
系统设计方法论
-
为什么做系统设计
- 个人:面试可能遇到系统设计的题;个人能力的提升,做系统设计会遇到很多问题;拓展技术视野,用到新技术
- 工作:业务驱动,业务需要设计系统去做支撑;系统重构,系统不满足现在需求,或存在问题;突破和创新
-
如何评估一个系统:可用性,扩展性,安全性,易用性,性能,可维护性,伸缩性,耦合性
-
系统设计定义:
- 系统:关联的个体按照特定的规则运行,完成单个个体不能完成工作的整体
- 设计:设想和计划,设想是目的,计划是过程安排
- 定义:为了达成某种目的,通过个体组成整体的过程
-
系统设计有标准流程吗?如何做系统设计
- 场景分析:什么系统,需要哪些功能,多大的并发量
- 存储设计:数据如何组织,使用sql存储还是nosql存储
- 服务设计:业务功能实现和逻辑整合
- 可扩展性:解决设计缺陷,提高鲁棒性、扩展性
-
如何发现系统瓶颈?
- 火焰图分析,针对单个实例分析,CPU内存等
- 链路追踪,知道一个请求经过了那些服务,在那个服务的耗时
- 性能测试,挖掘出整个系统的性能不足
-
如何保证系统可用性和稳定性?
-
链路梳理:
- 核心链路,重点保障,对于非核心依赖,当出错时可以进行降级;
- 流量漏斗;
- 强弱依赖,弱依赖可以降级,强依赖不可以;
-
可观测性:观测到系统的各项指标。
- 链路追踪;
- 核心监控;
- 业务报警
-
全链路测试:
- 压力测试,压到链路的临界点,观测服务的表现能否满足可用性
- 负载测试,准备测出链路的负载;
- 容量测试,测试出系统整体容量
-
稳定性控制:用一些手段和测试保证系统的稳定性
- 系统限流,有效手段
- 业务兜底,下游依赖返回的错误,从当前服务返回一些兜底数据
- 熔断降级,
-
容灾演练:
-
混沌工程,故障演练
-
应急手册
-
容灾预案
-
-
-
-
如何设计秒杀系统
4S分析法
-
场景Scenario
-
功能:
- 秒杀活动发布,
- 秒杀商品详情,C端接口,用户侧会不断查询,流量高的读接口
- 秒杀下单,写的接口
-
并发量:要知道系统有多大的并发量
-
万人参与秒杀
-
QPS 1w+
-
TPS 1k+
-
-
-
存储Stroge
-
做系统设计的重要环节,底层数据如何组织的
-
三级存储:最底层Mysql,之上为了提高性能用Redis,再上用系统的localcache
-
-
服务Service
-
子服务:
- 用户服务
- 风控服务
- 活动服务
- 订单服务
-
基础组件:
- ID生成器,生成订单ID,使用mysql,分库分表,分布式ID生成
- 缓存组件
- MQ组件,保护系统做一个限流削峰,异步,解耦
- 限流组件,
-
-
扩展Scale
- 流量隔离,秒杀系统流量和常规电商流量做隔离,防止秒杀商品流量过高影响常规商品下单
- CDN,内容分发网络,提高静态资源访问,离用户近的节点
- 缓存优化
- 流量管控,流量拦截,过滤
- 数据库扩展,读写分离,分库分表
- 服务水平扩展,负载均衡,反向代理
- MQ扩展,主从架构
- rdis扩展,读写分离
- 服务垂直扩展,可以理解为微服务的差分
-
-
总结
学习了系统设计定义,设计系统的流程和保证系统可用性和稳定性的方法措施。