NOTE

1.3 如何设计高可用系统

1. 什么是高可用系统 - 即可用性高的系统 - 可用性指的是系统的一部分出现了故障,我们能预料并应对这个故障。本质上就是容错 - 可用性高 - 可用性=平均故障间隔/(平均故障间隔 + 故障恢复平均时间) - 一般都是以几个9来表示系统的可用性,99.99的可用性较多,9越多就代表可用性越强 2.

系统设计创建于 更新于 historical

这是历史学习笔记,可能存在过时或不完整的理解。

1. 什么是高可用系统

  • 即可用性高的系统
    • 可用性指的是系统的一部分出现了故障,我们能预料并应对这个故障。本质上就是容错
    • 可用性高
      • 可用性=平均故障间隔/(平均故障间隔 + 故障恢复平均时间)
      • 一般都是以几个9来表示系统的可用性,99.99的可用性较多,9越多就代表可用性越强

2. 怎么设计高可用系统

2.1. 设计阶段

2.1.1. 设计评审

  • 方案对比

2.2. 开发阶段

2.2.1. 缓存

2.2.2. 降级

  • 如何设计降级系统.md(关联笔记尚未公开)

2.2.3. 限流

2.2.4. 隔离

  • 如何设计隔离系统.md(关联笔记尚未公开)

2.2.5. 熔断

  • 如何设计熔断系统.md(关联笔记尚未公开)

2.2.6. 超时与重试

2.2.7. 池化技术

2.3. 测试阶段

2.3.1. 功能测试

  • 测试的全流程覆盖最好能做到全自动化,很多测试用例可以沉淀下来,用来做全流程回归,当然这需要系统支持。我也见过太多犹豫 QA 没精力进行全流程回归而导致问题没有提前发现而产生的事故,所以 测试的原则是尽可能自动化和全流程覆盖,让宝贵的人力资源投入到只能人工测试的环节

2.3.2. 单测

2.3.3. 压测

  • 压力测试.md(关联笔记尚未公开)
  • 全链路压测.md(关联笔记尚未公开)

2.3.4. 风险预案

  • 平时要预想各种各样能出现的风险点,针对风险点准备各种预案,能快速解决问题
    1. 分类分场景整理下历史上经常发生的线上事故,例如 MySQL 故障预案、MQ 故障预案、发单接口故障预案等
    2. 通过放火平台来验证预案

2.3.5. Code Review

2.4. 上线阶段

2.4.1. 变更管控

  • 知会上下游人员

2.4.2. 灰度发布与回滚

2.4.3. 避免单点

  • 服务部署在多个Region,每个Region再部署多个Zone
    • Region:地域。指的是华北、华南这种地域范围,不同地域之间通过互联网连接而不是内网;
    • Zone:区域。指的是同一Region内不同的物理区域,比如华北的上海、杭州等,不同Zone之间通过内网连接而不通过互联网

云数据库 Redis 地域和可用区-产品简介-文档中心-腾讯云-腾讯云 【IT老齐356】OPPO同城多活、异地双活、异地多活数据架构_哔哩哔哩_bilibili

2.4.3.1. 异地双活
  • 指的是实时的同步,所以只能同一Region跨Zone实现
2.4.3.2. 异地容灾
  • 指的是非实时的同步,所以既可以跨Zone也可以跨Region实现

2.5. 运维阶段

2.5.1. 监控

  • 如何设计监控系统.md(关联笔记尚未公开)

2.5.2. 混沌工程

  • 如何设计混沌工程.md(关联笔记尚未公开)

2.5.3. 复盘

对出过的线上事故一定要及时的进行复盘,通过复盘来发现我们现有流程、机制是否有问题,让大伙不要踩重复的坑,并不断完善我们的紧急预案

3. 参考