系统架构之秒杀 | 青训营笔记

99 阅读2分钟

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

01 系统设计方法论

问题:为什么做、定义(不同于架构设计、服务、组件、模块、框架)、怎么做(如何落地)、分析瓶颈并优化、验证系统的可用性和稳定性。

image-20230207003622887.png

标准流程 :场景、存储、服务、拓展 4s分析法

image-20230207003651601.png

如何发现瓶颈:

火焰图分析——针对单个实例分析cpu、内存等使用

链路追踪——同一个请求经过哪些服务、耗时

性能测试——整个系统性能的不足

image-20230207003716597.png

核心链路——详情、价格、提单、下单、支付

其他为非核心服务

02 电商秒杀业务介绍

电商介绍

image-20230207005046608.png

image-20230207215129974.png

秒杀的挑战:

image-20230207215153516.png

反欺诈:防止黑产非法牟利(二次售卖)

鲁棒性:可用性、稳定性、、

如何设计

沿用4s分析

image-20230208001613563.png

三级存储

image-20230208001632863.png

image-20230208001658280.png

spec为规格(颜色、容量大小)

类目和规格的信息共同组成商品的属性,除了这些属性product还有其他组成商品的信息(前面提到的SPU)

SKU可销售单元

promo活动

活动promo+商品product+sku->活动商品表promo_product(该库存为逻辑库存)

秒杀商品表+商品+用户信息->订单order

PK应该是Primary Key(主键约束);UK应该是Unique Key(唯一值约束);CK应该是Check(检查约束)

image-20230208001717184.png

风控为mock服务,无具体实现

ID生成器——mysql分库分表,涉及分布式id生成

MQ——保护系统进行削峰、异步、解耦

image-20230208001741579.png

秒杀系统流量与常规电商系统流量隔离

cdn——静态资源的缓存,提高性能、静态资源的访问。

数据库拓展——读写分离、在拓展上分库分表

服务水平/垂直拓展——负载均衡、反向代理/微服务做拆分

MQ——保证可用性、稳定性(主从架构、多主多从架构)

redis——保证可用性、稳定性(读写分离、一主多从、集群)

image-20230208001803134.png

Nginx上面再加一层负载均衡 LVS/F5 组件

03 课程实践

image-20230208001834348.png

整体代码结构:

common定义基础的东西(统一返回结构体、枚举、常量)

config(redis配置)

convertet数据转换

service业务逻辑层,含接口Service和实现ServiceImpl

util基础的工具

04 课程总结

image-20230208001941909.png