这是我参与「第五届青训营」伴学笔记创作活动的第11天
系统设计的流程
设计目的
解决问题: 从业务角度解决产品功能问题,从技术角度解决非功能性问题
用于评审: 通过对方案评审,对质量进行把控,并对参与系统开发的人达成一致
用户归档: 使系统具有延续性,并能使其他人更好的理解系统
场景分析
什么系统, 需要做什么功能, 多大的并发量
存储设计
数据如何组织、Sql存储、NoSql存储
服务设计
业务功能实现和逻辑整合
可拓展性
解决设计缺陷、提高鲁棒性、拓展性
系统瓶颈的发现
- 火焰图分析
- 链路追踪
- 性能测试
可用性和稳定性的保证
- 链路梳理:核心链路, 流量漏斗, 强弱依赖
- 可观测性:链路追踪, 核心监控, 业务报警
- 全链路测试:压力测试, 负载测试, 容量测试
- 容灾演练:混沌工程, 应急手册, 容灾预案
- 稳定性控制:系统限流, 业务兜底, 熔断降级
商品
具有交易价值和属性的信息载体
SPU: Standard Product Unit
SKU:Stock Keeping Unit
秒杀的挑战
- 高性能
- 资源成本
- 拓展性
- 防止超卖
- 反欺诈
- 流量管控
秒杀业务特点
- 瞬时流量高
- 读取多写入少
- 实时要求高
秒杀场景
功能
- 秒杀活动发布
- 秒杀商品详情
- 秒杀下单
并发
- 万人参与秒杀
- QPS 1W+
- TPS 1K+
秒杀服务
子服务
- 用户服务
- 订单服务
- 活动服务
- 风控服务
基础组件
- 缓存组件
- ID生成器
- MQ组件
- 限流组件
Rabbit MQ 的基本介绍
2007 年发布,是一个在 AMQP(高级消息队列协议)基础上完成的,可复用的企业消息系统,是当前最主流的消息中间件之一。 . RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue 高级消息队列协议 )的开源实现,由于erlang 语言的高并发特性,性能较好,本质是个队列,FIFO 先入先出,里面存放的内容是message . RabbitMQ 是一个消息中间件:它接收消息并且转发,就类似于一个快递站,卖家把快递通过快递站,送到我们的手上,MQ也是这样,接收并存储消息,再转发。
秒杀的一些拓展
- 流量管控
- 数据库拓展
- MQ拓展
- Redis拓展
- 服务水平拓展
- 服务垂直拓展