系统健壮性设计--笔记

573 阅读2分钟

系统健壮性设计

「这是我参与11月更文挑战的第10天,活动详情查看:2021最后一次更文挑战

1.代码评审

1.1 什么是烂代码

人的视角

  1. 维护者脏话的频率
  2. 维护者脏话的类型丰富
  3. 存在打架斗殴的可能
  4. 面向离职的编制

代码视角

  1. 不遵循代码规约
  2. 代码向迷宫
  3. 代码流程脚踩西瓜皮
  4. 代码执行效率低
  5. 10行代码15个bug

1.2 代码的恶性循环

  • 业务催的紧,直接写代码
  • 没时间填坑,却不断挖坑
  • 到处灭火,更是没有时间CodeRevew

1.3 程序员的自我修养

image-20211127105441549.png

1.4代码评审

image-20211127105523111.png

1.5CodeReiew的"副作用"

  1. 提高自己的抗打击能力
  2. 对于自己错误的深刻理解
  3. 交流中碰撞出激情的火花
  4. 有可能锻炼肺活量

2.健壮性与鲁棒性

image-20211127110616150.png

2.1健壮性度量

从架构层面: 负载均衡容灾能力

从代码层面: 参数校验, 异常处理, 分支覆盖

环境层面: 混沌工程,异地多活

2.2 负载均衡

image-20211128195822887.png

2.3容灾能力

限流: 策略地丢弃部分用户请求

降级: 部分功能不可用 或用户体验被降级

熔断: 服务全部停止响应, 以保护核心流程

灾备: 复制多份系统能力或 解决数据核心服务单点问题

3.如何构建健壮性的系统

3.1 数据健壮性

  • 逻辑删除, 杜绝物理删除
  • 定时本地备份, 可以作为数据日志快照
  • 主备准实实时备份,快速切换服务能力
  • 定时云端离线备份,防地震,防水灾

3.2代码健壮性

image-20211128200722375.png

封装: 是一种对象功能内聚的表现形式,主要是被封装的组件、类、方法的影响半径尽可能地小,这也是提升系统健壮性的一种思维方式

4.面向失败的架构思维

image-20211128201101248.png

4.1面向失败设计

在软件生命周期中,也会出现各式各样的问题,我们需要通过面向失败的设计,防范和监控已知的确定性风险及未知的不确定风险:

  • 任何环境都是不可信赖的,都需要对环境进行预处理
  • 任何外部依赖接口都有可能出错
  • 任何异常都需要响应和处理
  • 任何行为都需要日志记录的
  • 任何系统的上线都需要经过严酷的测试

4.2健壮性测试

  • 功能测试: 想象用户的一切可能行为进行正确性验证
  • 稳定性测试: 确定系统长时间在正常压力情况下运行的有效性
  • 性能测试: 系统能够提供的最大服务级别的能力
  • 混动工程: 确定线上系统故障的恢复能力