系统设计 | 青训营笔记

49 阅读2分钟

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

系统设计方法论

谈到系统设计,我们会有哪些问题呢?

  1. 为什么要做系统设计

  2. 系统设计的定义是什么

  3. 怎么做系统设计,如何落地—个系统

  4. 系统功能实现之后,如何分析瓶颈并优化

    • 火焰图分析
    • 链路追踪
    • 性能测试
  5. 如何验证系统的可用性和稳定性

    • 链路梳理

      • 核心链路
      • 流量漏斗
      • 强弱依赖(核心链路予以更强保证,弱依赖可以做降级处理)
    • 可观测性

      • 链路追踪(对一次请求在微服务上的全过程追踪)
      • 核心监控
      • 业务报警
    • 全链路测试

      • 压力测试(压力测试(又叫强度测试)也是一种性能测试,它在系统资源特别低的情况下软件系统运行情况,目的是找到系统在哪里失效以及如何失效的地方)
      • 负载测试(负载测试是一种性能测试,指数据在超负荷环境中运行,程序是否能够承担。 关注点:how much)
      • 容量测试(确定系统可处理同时在线的最大用户数 关注点:how much(而不是how fast) 容量测试,通常和 数据库 有关,容量和负载的区别在于:容量关注的是大容量,而不需要关注使用中的实际表现。)
    • 稳定性控制

      • 系统限流

      • 业务兜底(当服务出现错误,仍可以返回合法数据)

      • 熔断降级

        相关解释

        • 熔断:当错误数超过阈值时快速失败,不调用后端服务,同时隔一定时间放几个请求去重试后端服务是否能正常调用,如果成功则关闭熔断状态,失败则继续快速失败,直接返回。(此处有个重试,重试就是弹性恢复的能力)
        • 隔离:把每个依赖或调用的服务都隔离开来,防止级联失败引起整体服务不可用
        • 降级:服务失败或异常后,返回指定的默认信息
    • 容灾演练

      • 混沌工程(通过故障注入等方式进行演练)
      • 应急手册(通过混沌工程进行总结)
      • 容灾预案
  6. 如何评估一个系统

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

如何做系统设计

主要以下四步:

场景分析(Scenario)

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

存储设计(Storage)

数据如何组织,Sq|存储, NoSq|存储

服务设计(Service)

业务功能实现和逻辑整合

可扩展性(Scale)

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