系统设计基础入门 | 青训营笔记

48 阅读3分钟

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

  • 系统设计方法论

    • 为什么做系统设计

      • 个人:面试可能遇到系统设计的题;个人能力的提升,做系统设计会遇到很多问题;拓展技术视野,用到新技术
      • 工作:业务驱动,业务需要设计系统去做支撑;系统重构,系统不满足现在需求,或存在问题;突破和创新
    • 如何评估一个系统:可用性,扩展性,安全性,易用性,性能,可维护性,伸缩性,耦合性

    • 系统设计定义:

      • 系统:关联的个体按照特定的规则运行,完成单个个体不能完成工作的整体
      • 设计:设想和计划,设想是目的,计划是过程安排
      • 定义:为了达成某种目的,通过个体组成整体的过程
    • 系统设计有标准流程吗?如何做系统设计

      • 场景分析:什么系统,需要哪些功能,多大的并发量
      • 存储设计:数据如何组织,使用sql存储还是nosql存储
      • 服务设计:业务功能实现和逻辑整合
      • 可扩展性:解决设计缺陷,提高鲁棒性、扩展性
    • 如何发现系统瓶颈?

      • 火焰图分析,针对单个实例分析,CPU内存等
      • 链路追踪,知道一个请求经过了那些服务,在那个服务的耗时
      • 性能测试,挖掘出整个系统的性能不足
    • 如何保证系统可用性和稳定性?

      • 链路梳理:

        • 核心链路,重点保障,对于非核心依赖,当出错时可以进行降级;
        • 流量漏斗;
        • 强弱依赖,弱依赖可以降级,强依赖不可以;
      • 可观测性:观测到系统的各项指标。

        • 链路追踪;
        • 核心监控;
        • 业务报警
      • 全链路测试:

        • 压力测试,压到链路的临界点,观测服务的表现能否满足可用性
        • 负载测试,准备测出链路的负载;
        • 容量测试,测试出系统整体容量
      • 稳定性控制:用一些手段和测试保证系统的稳定性

        • 系统限流,有效手段
        • 业务兜底,下游依赖返回的错误,从当前服务返回一些兜底数据
        • 熔断降级,
      • 容灾演练:

        • 混沌工程,故障演练

        • 应急手册

        • 容灾预案

  • 如何设计秒杀系统

    4S分析法

    • 场景Scenario

      • 功能:

        • 秒杀活动发布,
        • 秒杀商品详情,C端接口,用户侧会不断查询,流量高的读接口
        • 秒杀下单,写的接口
      • 并发量:要知道系统有多大的并发量

        • 万人参与秒杀

        • QPS 1w+

        • TPS 1k+

    • 存储Stroge

      • 做系统设计的重要环节,底层数据如何组织的

      • 三级存储:最底层Mysql,之上为了提高性能用Redis,再上用系统的localcache

    • 服务Service

      • 子服务:

        • 用户服务
        • 风控服务
        • 活动服务
        • 订单服务
      • 基础组件:

        • ID生成器,生成订单ID,使用mysql,分库分表,分布式ID生成
        • 缓存组件
        • MQ组件,保护系统做一个限流削峰,异步,解耦
        • 限流组件,
    • 扩展Scale

      • 流量隔离,秒杀系统流量和常规电商流量做隔离,防止秒杀商品流量过高影响常规商品下单
      • CDN,内容分发网络,提高静态资源访问,离用户近的节点
      • 缓存优化
      • 流量管控,流量拦截,过滤
      • 数据库扩展,读写分离,分库分表
      • 服务水平扩展,负载均衡,反向代理
      • MQ扩展,主从架构
      • rdis扩展,读写分离
      • 服务垂直扩展,可以理解为微服务的差分
  • 总结

    学习了系统设计定义,设计系统的流程和保证系统可用性和稳定性的方法措施。