这是我参与「第五届青训营 」伴学笔记创作活动的第11天
Redis: www.runoob.com/redis/redis…
RocketMQ: rocketmq.apache.org/zh/docs/qui…
01 系统设计方法论
为什么要做系统设计?
个人
For面试
个人能力提升
拓展技术视野
工作
业务驱动
系统重构
突破和创新带来的系统设计
如何评估一个系统?
可用性
安全性
扩展性
易用性
性能
耦合性
可维护性
伸缩性
系统设计的定义
系统
关联的个体
规则运作
组成工作的整体
设计
设想和计划
目的
过程安排
定义: 为了达成某种目的, 通过个体组成整体的过程
系统设计有标准的流程吗?
4S分析法
1 场景: 场景分析(Scenario)
什么系统, 需要哪些功能, 多大的并发量
2 存储: 存储设计(Storage)
数据如何组合, Sql存储, NoSql存储
3 服务: 服务设计(Service)
业务功能实现和逻辑整合
4 扩展: 可扩展性(Scale)
解决设计缺陷, 提高鲁棒性, 扩展性
如何发现系统的瓶颈?
火焰图分析
链路追踪
性能测试
如何保证可用性和稳定性?
链路梳理
核心链路
流量漏斗
强弱依赖
可观测性
链路追踪
核心监控
业务报警
全链路测试
压力测试
负载测试
容量测试
稳定性控制
系统限流
业务兜底
熔断降级
容灾演练
混动工程
应急手册
容灾预案
02 电商秒杀业务介绍
电商介绍:
人(消费者侧): 消费者, 用户, 流量来源
货(供给侧): 商品, 商家, 供应链
场(交易环境): 线下商场, 线上电商
商品: 具有交易价值和属性的信息载体
SPU: Standard Product Unit 标准化产品单元
SKU: Stock Keeping Unit 最小存货单位
秒杀业务的特点:
瞬时流量高
读多写少
实时性要求高
挑战:
资源成本
高性能
扩展性
鲁棒性
防止超卖
反欺诈
流量管控
4S分析法: (场景->存储->服务->扩展)
场景:
功能:
秒杀活动发布
秒杀商品详情
秒杀下单
并发:
万人参与秒杀
QPS 1w+
TPS 1k+
存储:
MySQL->Redis->Localcache
服务:
子服务:
用户服务
风控服务
活动服务
订单服务
基础组件:
ID生成器
缓存组件
MQ组件
限流组件
扩展:
流量隔离 (防止影响到非秒杀商品)
CDN (提高静态资源访问)
缓存优化
流量管控
数据库扩展
服务水平扩展
MQ扩展
Redis扩展
服务垂直扩展
系统架构:
用户层: WEB IOS Android
接入层: Nginx
应用层:
发布活动 秒杀详情 秒杀下单
ID生成器 限流组件 MQ组件
Cache组件
基础层: Redis RocketMQ MySQL
03 课程实践⭐
秒杀流程图见PPT
实践见源码
04 课程总结
服务无状态 (服务不存储状态, 便于扩展)
批量写入 (batch, 降低系统压力的有效方式)
最终一致性 (见第八课分布式理论的BASE理论)