这是我参与「第五届青训营」伴学笔记创作活动的第 7 天。
系统设计方法论
如何评估一个系统
- 可用性
- 安全性
- 扩展性
- 易用性
- 耦合性
- 伸缩性
- 可维护性
- 性能
系统:
- 关联的个体
- 规则运作
- 组成工作的整体
设计:
- 设想和计划
- 目的
- 过程安排
系统设计的流程
- 场景分析(Scenario):什么系统,需要哪些功能,多大的并发量
- 存储设计(Storage):数据如何组织,SQL存储,NoSQL存储
- 服务设计(Service):业务功能实现和逻辑整合
- 可扩展性(Scale):解决设计缺陷,提高鲁棒性,扩展性
如何发现系统的瓶颈
- 火焰图分析
- 链路追踪
- 性能测试
如何保证可用性和稳定性
- 链路梳理:核心链路 流量漏斗 强弱以来
- 可观测性:链路追踪 核心监控 业务报警
- 全链路测试:压力测试 复杂测试 容量测试
- 稳定性控制:系统限流 业务兜底 熔断降级
- 容灾演练:混沌工程 应急手册 容灾预案
电商秒杀业务介绍
特点
- 瞬时流量高
- 读多写少
- 实时性要求高
场景
功能:
- 秒杀活动发布
- 秒杀商品详情
- 秒杀下单
并发:
- 万人参与秒杀
- QPS 1W+
- TPS 1k+
存储
MySQL->Redis->Localcache
服务
子服务:
- 用户服务
- 风控服务
- 活动服务
- 订单服务
基础组件:
- ID生成器
- 缓存组件
- MQ组件
- 限流组件
扩展
- 流量隔离、CDN、缓存优化、流量管控
- 数据库扩展、MQ扩展、Redis扩展、服务水平扩展、服务垂直扩展
系统架构图
- 用户层:WEB IOS Android
- 接入层:Nginx
- 应用层:发布活动 秒杀详情 秒杀下单 ID生成器 限流组件 MQ组件 Cache组件
- 基础层:Redis RocketMQ MySQL
课程实践
课程总结
- 服务无状态
- 批量写入
- 最终一致性