这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天
系统设计方法论
为何系统设计
- 面试
- 个人能力提升
- 扩展技术视野
- 业务驱动
- 系统重构
- 突破和创新
- 解决问题
评估系统
系统设计标准流程
如何发现系统瓶颈
- 火焰图分析:单个实例cpu和内存的分析,找代码瓶颈
- 链路跟踪:知道请求在那个服务上耗费时间多
- 性能测试
保证可用性与稳定性
电商秒杀业务介绍
- 商品:具有交易价值和属性的信息载体
- spu:标准产品单元(商品太多了,需要统一标准化管理,降低成本)
- sku:库存保存单元(有库存和价格信息)
特点
- 瞬时流量高
- 读多血少
- 实时性要求高
挑战
- 反欺诈:防黄牛
如何设计秒杀系统
场景
-
功能
-
秒杀活动发布
-
秒杀商品详情(用户侧查询商品详情,读多)
-
秒杀下单(写)
-
-
并发
-
万人参与秒杀
-
QPS(每秒的响应请求数,也即是最大吞吐能力) 1w+
-
TPS(服务器每秒处理的事务数) 1k+
-
存储
三级存储
-
h_category:产品类目表
- parent_id:父类目
- name:类目名字
- level:类目所属级别
- be_parent:是不是父节点
- status:状态(?)
-
h_category_attribute:类目对应的属性
- attribute_key 类目的属性key
- status:状态
-
h_spec:规格,比如手机颜色,手机大小
- category_id:类目id
- spec_key:规格key
- status:状态
-
h_spec_detail:规格详情表,比如颜色有红色,蓝色,紫色
-
h_product:商品属性表,
- category_id:类目id
- shop_id:店铺id
- title:
- main_image:图片
- detail:详情
- category_data:
- spec_data:
-
h_sku:商品库存表
- price:价格
- stock:库存
- spec_detail_ids:具体规格的id
-
h_promo:活动表
- promo_name:活动名字
- start_data:开始时间
- end_data:结束时间
- status:活动状态
-
h_promo_product:活动的商品表
- promo_id:活动id
- sku_id:库存表id
- spu_id:商品表id
- promo_stock:活动库存
- promo_price:活动价格
服务
子服务
- 用户服务
- 风控服务
- 活动服务
- 订单服务
基础组件
- ID生成器:生成订单id,使用mysql也要分库分表设计分布式id生成
- 缓存组件
- MQ组件:削峰
- 限流组件
扩展
- 流量隔离
- CDN:静态资源缓存
- 缓存优化
- 流量管控
- 数据库扩展:读写分离,分库分表
- 服务水平扩展:负载均衡,反向代理
- MQ扩展:多主多从架构
- 服务垂直扩展