10 [实践课]手把手教你做系统设计 | 青训营笔记

27 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第11天

资料: juejin.cn/post/719438…

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理论)