这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天
系统设计
为什么要做系统设计
- for 个人: 面试,个人能力提升,拓展技术视野
- for 工作:业务驱动,系统重构,突破和创新
如何评估一个系统
- 可用性
- 易用性
- 可维护性
- 安全性
- 扩展性
- 耦合性
- 伸缩性
- 性能
系统设计的流程
- 场景分析:什么系统,需要哪些功能,多大的并发量
- 存储设计:数据如何组织,sql存储,nosql存储
- 服务设计:服务设计
- 可扩展性:解决设计缺陷,提高鲁棒性,扩展性
如何发现系统的瓶颈
- 火焰图分析
- 链路追踪
- 性能测试
如何保证可用性和稳定性
- 链路梳理:核心链路,流量漏斗,强弱依赖
- 可观测性:链路追踪,核心监控,业务报警
- 全链路测试:压力测试,负载测试,容量测试
- 稳定性控制:系统限流,业务兜底,熔断降级
- 容灾演练:混沌工程,应急手册,容灾预案
秒杀系统的设计
秒杀的场景
- 功能:秒杀活动发布;秒杀商品详情;秒杀下单
- 并发:万人参与秒杀;QPS 1w+;TPS 1w+
秒杀业务的特点
- 瞬时流量高
- 读多写少
- 实时性高
秒杀的挑战
- 高性能
- 资源成本
- 扩展性
- 防止超卖
- 反欺诈
- 鲁棒性
- 流量控制
系统架构图
nigix用于流量分发,业务服务分为三个:发布活动,秒杀详情和秒杀下单;其他方面的组件包括了分布式id生成器,限流组件,mq组件,cache组件;数据库方面集成了mysql,redis,使用了rocketmq中间件。