这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天
今天整理了系统设计的相关学习笔记。
系统设计的定义
系统
- 关联的个体
- 规则运作
- 组成工作的整体
设计
- 设想和计划
- 目的
- 过程安排
定义: 为了达成某种目的,从个体组成整体的过程。
如何做系统设计
- 场景分析
什么是系统,需要哪些功能,多大的并发量
- 存储设计
数据如何组织,Sql存储,NoSql存储
- 服务设计
业务功能实现逻辑整合
- 可扩展性
解决设计缺陷,提高扩展性
如何发现系统的瓶颈
- 火焰图分析
- 链路追踪
- 性能测试
如何保证可用性和稳定性
- 链路梳理 核心链路、流量漏斗、强弱依赖
- 可观测性 链路追踪、核心监控、业务报警
- 全链路测试 压力测试、负载测试、容量测试
- 稳定性控制 系统限流、业务兜底、熔断降级
- 容灭演练 混沌工程、应急手册、容灭预案
秒杀系统的特点
瞬时流量高、读多写少、实时性要求高
秒杀的挑战
高性能、资源成本、扩展性、防止超卖、反欺诈、流量管控、鲁棒性
如何设计秒杀系统
场景
功能:
- 秒杀活动发布
- 秒杀商品详情
- 秒杀下单
并发:
- 万人参加秒杀
- QPS 1w+
- TPS 1k+
存储
MySQL、Redis、Localcache
服务
子服务:
- 用户服务
- 风控服务
- 活动服务
- 订单服务
基础组件:
- ID生成器
- 缓存组件
- MQ组件
- 限流组件
扩展
流量隔离、CDN、数据库扩展、服务水平扩展、MQ扩展、缓存优化、Redis扩展、服务垂直扩展、流量管控、缓存优化