这是我参与【第五届青训营】伴学笔记创作活动的第十二天。今天就写一下在青训营学的系统设计的理论知识以及电商秒杀系统的系统设计实践的有关内容。
系统设计实践
本文以电商业务为实例做系统设计。
系统设计方法论
为什么要做系统设计
-
个人
- 提高面试综测
- 个人能力提升
- 拓展技术视野
-
工作
- 业务驱动
- 系统重构
- 突破和创新
如何做系统设计
- 场景分析(什么系统、需要那些功能、多大的并发量)
- 存储设计(数据如何组织,Sql 存储, NoSql 存储)
- 服务设计(业务功能实现和逻辑整合)
- 可扩展性(解决设计缺陷,提高扩展性)
如何发现系统的瓶颈
- 火焰图分析:针对单个实例分析,分析内存使用,cup 使用等
- 链路追踪:对请求进行链路追踪,分析其经过了哪些服务及其耗时
- 性能测试:挖掘整个系统的性能
如何保证可用性和稳定性
-
链路梳理
- 核心链路:对核心的链路作保障,非核心的出错可降级
- 流量漏斗
- 强弱依赖:提前发现因为依赖问题可能导致的故障, 避免依赖故障影响用户体验, 积累数据持续推进系统稳定性提升
-
可观测性
- 链路追踪
- 核心监控
-
全链路测试
- 压力测试:达到甚至超过临界点
- 负载测试
- 容量测试
-
稳定性控制
- 系统限流
- 熔断降级
-
容灾演练
电商秒杀业务介绍
电商介绍
- SPU (标准化产品单元)
- SKU (库存量单位)
秒杀业务的特点
- 瞬时流量高
- 读多写少
- 实时性要求高
如何设计一个秒杀系统
场景
-
功能:
- 秒杀活动发布
- 秒杀商品详情
- 秒杀下单
-
并发,请求众大
存储
mysql <- redis <- localcache (主要在于高性能)
服务
- 子服务:用户服务、风控服务、活动服务、订单服务
- 基础组件:ID生成器、缓存组件、MQ 组件(提供削峰、异步、解耦等功能)、限流组件
扩展
流量隔离、缓存优化、数据库扩展、服务水平扩展、MQ扩展、Redis扩展等
系统架构图
秒杀流程图
高并发高性能系统要点总结
服务无状态
-
定义:服务的无状态化就是冗余部署的多个服务模块(进程),使其完全对等。 也就是部署多个相同服务,请求到任一服务的处理结果是一样的。 这些模块不存储业务的上下文信息,比如session、登录、业务上下文相关的信息。 只会根据每次请求携带的数据进行相应的业务处理。
实质这些业务相关的信息是会存放在统一的一个地方,比如缓存、es等等。
-
目的:快速扩容、弹性扩容
批量写入
高并发环境下降低系统压力的一个非常有效的方式
最终一致性
- 定义:系统中的所有数据副本经过一定时间后,最终能够达到一致的状态,不需要实时保证系统数据的强一致性。最终一致性是弱一致性的一种特殊情况。
- 场景:在高并发高性能条件下,用 redis 缓存等会产生新数据的副本,会造成数据的短暂不一致,但在最终会达到一致。