系统设计
本文来源于第五届字节跳动青训营活动,已收录到系统设计 | 青训营笔记 - 掘金 (juejin.cn) ,主要记录了对秒杀系统设计的学习
系统设计之秒杀系统
1.系统设计方法论
系统设计的思考问题
- 为什么要做系统设计
- 系统设计的定义是什么
- 怎么做系统设计,如何落地一个系统
- 系统功能实现之后,如何分析瓶颈并优化
- 如何验证系统的可用性和稳定性
系统设计的目的
对个人
- 面试
- 个人能力提升
- 拓展技术视野
对工作
- 业务驱动
- 系统重构
- 突破和创新
系统评估角度
可用性、易用性、可维护性、安全性、性能、扩展性、耦合性、伸缩性
系统设计的定义
系统
- 关联的个体
- 规则运作
- 组成工作的整体
设计
- 设想和计划
- 目的
- 过程安排
系统设计是为了达成某种目的,通过个体组成整体的过程
系统设计的流程
- 场景:用什么系统,需要哪些功能,多大的并发量
- 存储:数据如何组织,SQL 存储,NoSQL 存储
- 服务:业务功能实现和逻辑整合
- 扩展:解决设计缺陷,提高鲁棒性、扩展性
系统瓶颈的发现
方法角度
- 火焰图分析
- 链路追踪
- 性能测试
如何保证系统的可用性和稳定性
- 链路梳理:核心链路、流量漏洞、强弱依赖
- 可观测性:链路追踪、核心监控、业务报警
- 全链路测试:压力测试、负载测试、容量测试
- 稳定性控制:系统限流、业务兜底、熔断降级
- 容灾演练:混沌工程、应急手册、容灾预案
2.电商秒杀业务介绍
电商介绍
- 供给侧:商品、商家、供应链
- 消费侧:消费者、用户、流量来源
- 交易环境:线下商城、线上电商
进一步分析
商品:具有交易价值和属性的信息载体。
关于电商涉及到两个概念:SPU 和 SKU
SPU(Standard Product Unit):标准化产品单元。是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的集合,该集合描述了一个产品的特性。通俗点讲,属性值、特性相同的商品就可以称为一个SPU
SKU(Stock Keeping Unit): 库存量单位。SKU即库存进出计量的单位, 可以是以件、盒、托盘等为单位
秒杀业务的特点
- 瞬时流量高
- 读多写少
- 实时性要求高
秒杀业务的难点
高性能、资源成本、扩展性、防止超卖、反欺诈、鲁棒性、流量管控
设计秒杀系统
场景(Scenario)
- 功能:秒杀活动发布、秒杀商品详情、秒杀下单
- 并发:万人参与秒杀、QPS 1w+、TPS 1k+
存储(Storage)
MySQL —> Redis —> Localcache
服务(Service)
子服务:用户服务、风控服务、活动服务、订单服务
基础组件:ID 生成器、缓存组件、MQ 组件、限流组件
扩展(Scale)
- 流量隔离、CDN、缓存优化、流量管控(例如基于速率或信号控制、限流、拦截、过滤以及设置机房流量配比等)
- 数据库扩展、服务·水平扩展、MQ 扩展、Redis 扩展、服务垂直扩展
系统架构
- 用户层:WEB、IOS、Android
- 接入层:Nginx
- 应用层:发布活动、秒杀详情、秒杀下单、ID 生成器、限流组件、MQ 组件、Cache 组件
- 基础层:Redis、RocketMQ、MySQL
3.实践
流程图
4.总结
服务无状态
批量写入
最终一致性
参考资料
- 标题: 系统设计
- 作者: Entropy Tree
- 创建于 : 2023-02-06 20:37:26
- 更新于 : 2023-04-01 07:55:52
- 链接: https://www.entropy-tree.top/2023/02/06/golang-day10/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
推荐阅读
评论