系统设计|青训营笔记

92 阅读2分钟

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

一、系统设计方法

系统设计的问题

为什么做系统设计?
系统设计的定义是什么?
怎么做系统设计,如何落地一个系统?
系统功能实现之后,如何分析瓶颈并优化?
如何验证系统的可用性和稳定性?

为什么做系统设计

个人:面试、个人能力提升、扩展技术视野。
工作:业务驱动、系统重构、突破和创新。

如何评估一个系统

可用性、安全性、扩展性、易用性、性能、耦合性、可维护性、伸缩性。

系统设计的定义

系统:

  • 关联的个体
  • 规则运作
  • 组成工作的整体 设计:
  • 设想和计划
  • 目的
  • 过程安排

系统设计:为了达到某种目的,通过个体组成整体的过程。

如何做系统设计

场景->存储->服务->扩展

场景分析

  • 什么系统、需要哪些功能、多大的并发量

存储设计

  • 数据如何组织、Sql存储、NoSql存储

服务设计

  • 业务功能实现和逻辑整合

可扩展性

  • 解决设计缺陷、提高鲁棒性、扩展性

如何发现系统的瓶颈

火焰图分析、链路追踪、性能测试

如何保证可用性和稳定性

链路梳理

  • 核心链路
  • 流量漏斗
  • 强弱以来

可观测性

  • 链路追踪
  • 核心监控
  • 业务报警

全链路测试

  • 压力测试
  • 负载测试
  • 容量测试

稳定性控制

  • 系统限流
  • 业务兜底
  • 熔断降级

容灾控制

  • 混沌工程
  • 应急手册
  • 容灾预案

二、电商秒杀业务介绍

人<->场<->货<->人
人:
消费者侧:消费者,用户,流量来源
场:
交易环境:线下商场,线上电商
货:
供给侧:商品,商家,供应链

秒杀业务的特点

瞬时流量高、读多写少、实时性要求高

秒杀的挑战

资源成本、反欺诈、高性能、防止超卖、流量管控、扩展性、鲁棒性

如何设计秒杀系统

场景

功能

  • 秒杀活动发布
  • 秒杀商品详情
  • 秒杀下单

并发

  • 万人参与秒杀
  • QPS 1w+
  • TPS 1k+

存储

MySQL->Redis->Localcache

服务

子服务

  • 用户服务
  • 风控服务
  • 活动服务
  • 订单服务

基础组件

  • ID生成器
  • 缓存组件
  • MQ组件
  • 限流组件

扩展

流量隔离
CDN
缓存优化
流量管控
数据库扩展
MQ扩展
Redis扩展
服务水平扩展
服务垂直扩展