这是我参与「第五届青训营 」伴学笔记创作活动的第12天
前言
一个好的系统当然离不开系统设计,本文笔者将对系统设计的方法流程学习做一个记录,分为系统设计方法论、电商秒杀业务介绍、如何设计秒杀系统。
系统设计方法论
为什么要做系统设计
| 个人 | 工作 |
| for面试 | 业务驱动 |
| 个人能力提升 | 系统重构 |
| 拓展技术视野 | 突破和创新 |
如何评估一个系统
以下一些性质应该还是比较好理解。
- 可用性
- 易用性
- 安全性
- 性能
- 可维护性
- 扩展性
- 耦合性
- 伸缩性
系统设计的定义
| 系统 | 设计 |
| 关联的个体 | 设想和计划 |
| 规则运作 | 目的 |
| 组成工作的整体 | 过程安排 |
定义:为了达成某种目的,通过个体组成整体的过程。
如何做系统设计
- 场景分析(Scanario):什么系统,需要哪些功能,多大并发量。
- 存储设计(Storage):数据如何组织,sql存储,Nosql存储。
- 服务设计(Service):业务功能实现和逻辑整合。
- 可扩展性(Scale):解决设计缺陷,提高鲁棒性、扩展性。
如何发现系统瓶颈
- 火焰图分析
- 链路追踪
- 性能测试
如何保证可用性和稳定性
| 链路梳理 | 可观测性 | 全链路测试 | 稳定性控制 |
| 核心链路、流量漏斗、强弱依赖 | 链路追踪、核心监控、业务报警 | 压力测试、负载测试、容量测试 | 系统限流、业务兜底、熔断降级 |
电商秒杀业务介绍
电商介绍
供给方:商品、商家、供应链
交易环境:线下商场、线上电商
消费方:消费者、用户、流量来源
商品:具有交易价值和属性的信息载体
秒杀业务特点
- 瞬时流量高(双十一的流量就很高)
- 读多写少(用户大多数是在看商品信息)
- 实时性要求高(用户下单后立马能看到实时信息)
秒杀的挑战
- 高性能
- 资源成本
- 扩展性
- 防止超卖(商家只有100库存结果卖了1000的量)
- 反欺诈
- 流量管控
- 鲁棒性
如何设计秒杀系统
场景
- 功能:秒杀活动发布、秒杀商品详情、秒杀下单。
- 并发:万人参与秒杀、OPS 1w+、TPS1k+。
存储
MYSQL->Redis->Localcache
服务
- 子服务:用户服务、风控服务、活动服务、订单服务。
- 基础组件:ID生成器、缓存组件、MQ组件、限流组件。
扩展
- 流量隔离
- CDN
- 缓存优化
- 流量监控
- 数据库扩展
- MQ扩展
- Redis扩展
- 服务水平(垂直)扩展
秒杀流程图
小结(学习心得)
系统设计的学习,帮助我对系统设计有了一个整体的认识和思路,它能够对自己的能力有一定的提升,也能帮助我看到更多的东西。
参考
- 字节跳动青训营《手把手教你做系统设计之秒杀系统》课程