系统设计 | 青训营笔记

92 阅读2分钟

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

系统设计的步骤:

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

发现系统的瓶颈:

  • 火焰图分析:火焰图仅用一张小图,就可以定量展示所有的性能瓶颈的全景图,而不论目标软件有多么复杂。
    传统的性能分析工具通常会给用户展示大量的细节信息和数据, 而用户很难看到全貌,反而容易去优化那些并不重要的地方,经常浪费大量时间和精力却看不到明显效果。传统分析器的另一个缺点是,它们通常会孤立地显示每个函数调用的延时,但很难看出各个函数调用的上下文,而且用户还须刻意区分当前函数本身运行的时间(exclusive time)和包括了其调用其他函数的时间在内的总时间(inclusive time)。

而相比之下,火焰图可以把大量信息压缩到一个大小相对固定的图片当中(通常一屏就可以显示全)。 不怎么重要的代码路径会在图上自然地淡化乃至消失,而真正重要的代码路径则会自然地凸显出来。越重要的,则会显示得越明显。火焰图总是为用户提供最适当的信息量,不多,也不少。

  • 链路追踪:链路追踪是分布式系统下的一个概念,它的目的就是要解决上面所提出的问题,也就是将一次分布式请求还原成调用链路,将一次分布式请求的调用情况集中展示,比如,各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等。
  • 性能测试 如何保证可用性和稳定性:
  • 链路梳理:核心链路、流量漏斗、强弱依赖
  • 可观测性:链路追踪、核心监控、业务报警
  • 全链路测试:压力测试、负载测试、容量测试
  • 稳定性控制:系统限流、业务兜底、熔断降级
  • 容灾演练:混沌工程、应急手册、容灾预案