这是我参与「第五届青训营」伴学笔记创作活动的第9天。
1. 系统设计方法论
1.1 为什么要做系统设计
个人: For面试、个人能力提升、拓展技术视野。
工作:业务驱动、系统重构、突破和创新。
1.2 系统设计的定义
系统:关联的个体、规则运作、组成工作的整体。
设计:设想和计划、目的、过程安排。
1.3 如何做系统设计
场景 -> 存储 -> 服务 -> 扩展
1.4 系统的瓶颈
1.火焰图分析 2.链路追踪 3.性能测试
1.5 保证可用性和稳定性
链路梳理:核心链路、流量漏斗、强弱依赖。
可观测性:链路追踪、核心监控、业务报警。
全链路测试:压力测试、负载测试、容量测试。
稳定性控制:系统限流、业务兜底、熔断降级。
容灾演练:混沌工程、应急手册、容灾预案。
2. 电商秒杀业务介绍
2.1 电商介绍:
人(消费者侧):消费者,用户,流量来源。
场(交易环境):线下商场,线上电商。
货(供给侧):商品,商家,供应链。
商品:具有交易价值和属性的信息载体。
2.2 秒杀业务的特点
瞬时流量高、读多写少、实时性要求高。
2.3 秒杀的挑战
资源成本、高性能、防止超卖、反欺诈、扩展性、鲁棒性、流量管控。
3.如何设计秒杀系统
3.1 场景
功能:秒杀活动发布、秒杀商品详情、秒杀下单
并发:万人参与秒杀、QPS1w+
3.2 存储
MySQL -> Redis -> Localache
3.3 服务
子服务:用户服务、风控服务、活动服务、订单服务
基础组件:ID生成器、缓存组件、MQ组件、限流组件
3.4 扩展
流量隔离、CDN、缓存优化、流量管控、数据库扩展、MQ扩展、Redis扩展、服务器水平扩展、服务垂直扩展
3.5 系统架构图
3.6 秒杀流程图
4 总结
(1)服务无状态 当前服务不存储数据和业务。 (2)批量写入 有效降低系统压力 (3)最终一致性 自缓存和MQ会导致不一致,但最终会达到一致。