这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天
系统设计方法论
为什么要做系统设计:
-
个人角度
- for面试
- 个人能力提升
- 拓展技术视野
-
工作角度
- 业务驱动
- 系统重构
- 突破和创新
系统设计的定义:
-
系统
- 关联的个体
- 规则运作
- 组成工作的整体
-
设计
- 设想和计划
- 目的
- 过程安排
总的定义:为了达成某种目的,通过个体组成整体的过程
系统设计的流程
讲座中提供一个参考的流程:
- 场景分析
- 存储设计
- 服务设计
- 可扩展性
如何发现系统的瓶颈:
-
火焰图分析
针对单个实例的分析,分析cpu、内存等
-
链路追踪
对同一个请求进行链路追踪,确认请求经过哪些服务以及相关的耗时情况
-
性能测试
如何保证可用性和稳定性?
-
链路梳理
核心链路(要梳理出来一条核心的链路,比如电商对应的可能是计算价格提单下单支付等,核心链路之外的就是非核心服务,那么对于非核心依赖,在出错的时候就可以对其进行降级,而对核心链路进行重点保障)
流量漏斗
强弱依赖(就是上面说的,出错时候弱依赖可以降级,而强依赖不行)
-
可观测性
链路追踪
核心监控
业务报警
-
全链路测试
压力测试(临界点)
负载测试
容量测试
关于上面三个测试可以看一下: cloud.tencent.com/developer/n…
-
稳定性控制
系统限流
业务兜底
熔断降级
-
容灾演练
混沌工程
应急手册
容灾预案
电商秒杀业务介绍
秒杀是电商里面的一个子业务,所以需要了解一下相关的背景知识。
电商对应有人、货、场
秒杀业务特点:
- 瞬时流量高
- 读多写少
- 实时性要求高(下完单要看到结果)
秒杀业务的挑战:
- 资源成本(如果资源是无限的,那么我们甚至都不需要考虑效率)
- 高性能
- 扩展性
- 防止超卖(秒杀价格便宜,因为设计问题多卖了肯定不行)
- 反欺诈(秒杀价格比较低,要防灰黑产)
- 鲁棒性
- 流量管控
如何设计秒杀系统
场景上:
-
功能
- 秒杀活动发布
- 秒杀商品详情
- 秒杀下单
-
并发:
- 万人参与
- QPS 1w+
- TPS 1k+
存储上,使用三级存储
mysql-> redis -> local cache
服务:
-
子服务
- 用户服务
- 风控服务
- 活动服务
- 订单服务
-
基础组件
- ID生成器
- 缓存组件
- MQ组件
- 限流组件
课程实践
剩下内容就是分析代码了。