NOTE
1.3 如何设计高可用系统
1. 什么是高可用系统 - 即可用性高的系统 - 可用性指的是系统的一部分出现了故障,我们能预料并应对这个故障。本质上就是容错 - 可用性高 - 可用性=平均故障间隔/(平均故障间隔 + 故障恢复平均时间) - 一般都是以几个9来表示系统的可用性,99.99的可用性较多,9越多就代表可用性越强 2.
这是历史学习笔记,可能存在过时或不完整的理解。
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. 风险预案
- 平时要预想各种各样能出现的风险点,针对风险点准备各种预案,能快速解决问题
- 分类分场景整理下历史上经常发生的线上事故,例如 MySQL 故障预案、MQ 故障预案、发单接口故障预案等
- 通过放火平台来验证预案
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. 复盘
对出过的线上事故一定要及时的进行复盘,通过复盘来发现我们现有流程、机制是否有问题,让大伙不要踩重复的坑,并不断完善我们的紧急预案