可用性
可用性不是某个技术特性,而是一种系统能力 + 组织能力的综合结果
一、可用性的第一性原理(认知地基)
这一节是全文的“地基”,所有后续设计都必须服从这些事实。
1. 不可违背的客观事实
故障一定会发生
- 硬件会坏
- 软件必然有 Bug
- 网络一定不可靠
- 人一定会犯错
网络分区不可避免
- 分布式系统无法获得全局一致视图
- 状态判断永远存在不确定性
状态决策不可能 100% 正确
- 主备切换、多主选举一定存在误判
- 所谓“正确”只是概率更高
可用性是概率,不是确定性
- 高可用 ≠ 不宕机
- 高可用 = 快速恢复 + 可控影响
人是系统的一部分
- 既是修复者
- 也是最大的不稳定源
👉 高可用的本质,是与不确定性共存,而不是消灭它
二、核心概念与指标体系(概念澄清)
1. 核心属性区分(避免概念混乱)
| 概念 | 本质 | 关注点 |
|---|---|---|
| 可靠性(Reliability) | 持续无故障运行的概率 | 宕机次数 |
| 可用性(Availability) | 系统可被使用的时间比例 | 宕机时长 |
| 稳定性(Stability) | 行为一致性与退化趋势 | 抖动、劣化 |
可靠性影响可用性,但不等于可用性
2. 核心指标
- MTBF:平均故障间隔
- MTTR:平均恢复时间
Availability = MTBF / (MTBF + MTTR)业务维度:
- RTO:允许的最大恢复时间
- RPO:允许的数据丢失量
三、可用性能力分层模型(总架构)
这是对全文的总抽象。
L5 组织与治理能力(文化、流程、演练)L4 业务连续性能力(RTO / RPO)L3 系统级可用性(MTTR)L2 组件级可靠性(MTBF)L1 基础设施可靠性越往上,越偏人和组织;越往下,越偏技术
四、架构性手段(设计期:降低故障概率)
4.1 冗余(Availability 的基础)
- 计算冗余:无状态 → 易冗余
- 存储冗余:有状态 → 一致性困难
关键认知:
冗余并不能保证高可用,只是提供“选择权”
状态决策的三种模式
- 互连式
- 中介式
- 探测式
本质问题:
状态信息本身也是不可靠的
4.2 隔离(控制故障影响面)
隔离的目标
- 限制资源争抢
- 阻断故障扩散
- 防止“滚雪球效应”
隔离能力树
隔离能力├─ 资源隔离│ ├─ 线程│ ├─ 进程│ └─ 机器├─ 流量隔离│ ├─ 正式 / 压测│ ├─ 爬虫│ └─ 链路├─ 数据隔离│ ├─ 读写分离│ └─ 多中心├─ 机房隔离│ ├─ 同城│ ├─ 异地│ └─ 跨国4.3 存算分离(复杂度控制)
让计算节点无状态,是提升可用性的关键简化手段
- 计算失败 → 重试 / 迁移
- 状态集中 → 一致性成本集中化
五、运行时控制手段(故障发生时)
5.1 限流 / 熔断 / 降级的角色划分
| 手段 | 保护对象 | 本质 |
|---|---|---|
| 限流 | 服务提供方 | 资源保护 |
| 熔断 | 服务调用方 | 自我保护 |
| 降级 | 系统整体 | 有损服务 |
5.2 降级的业务哲学
- 降级不是技术问题,而是**业务决策**
- 距离用户越近,损失越小
- 核心目标:**用户无感或弱感知**
降级类型抽象
降级策略├─ 数据降级(默认值 / 静态值 / 缓存)├─ 功能降级(关闭非核心)├─ 流量降级(限流)├─ 写降级(异步 / 延迟)├─ 前端降级(静态化)六、变更与治理(人为风险控制)
6.1 变更是最大风险源
大部分事故不是系统设计错误,而是变更失控
变更生命周期
- 变更前:评估 + 回滚计划
- 变更中:分级发布 + 监控
- 变更后:指标回归验证
6.2 数据逻辑保护
- 审核链路:DBA → PO → Dev
- 防错优于修复
- 备份必须可恢复(定期演练)
七、容灾与业务连续性(极端场景)
7.1 容灾的层次
- 基础设施容灾
- 数据容灾
- 应用容灾
- 业务容灾
7.2 DRP / BCP 的本质
容灾不是技术方案,而是组织应急能力
- 预案
- 演练
- 角色
- 决策链路
八、可观测性与健康治理
8.1 监控的四个维度
- 资源
- 系统
- 异常
- 业务
8.2 架构健康的三大对象
架构健康├─ 应用健康├─ 环境健康└─ 依赖健康目标不是“零问题”,而是:
问题可预期、可发现、可处理
九、评估与持续演进
9.1 FMEA:事前失败分析
- 从“功能”视角,而非“组件”视角
- 关注业务影响而非技术优雅
9.2 SRE 文化
- 混沌工程
- 可用性评估
- 持续演进而非一次性设计
十、最终总结
高可用设计的核心权衡
- 一致性 vs 可用性
- 成本 vs 风险
- 自动化 vs 可控性
- 复杂度 vs 收益
高可用不是“设计出来的”,而是“治理出来的”
关联内容(自动生成)
- [/计算机网络/网络安全/安全性.html](/计算机网络/网络安全/安全性.html) 网络安全中的可用性保障与系统可用性设计密切相关,特别是在面对攻击时的系统韧性方面
- [/计算机网络/网络安全/网络安全技术.html](/计算机网络/网络安全/网络安全技术.html) 网络安全技术中的容灾和恢复能力与系统可用性设计直接相关
- [/计算机网络/网络安全/网络安全隔离技术.html](/计算机网络/网络安全/网络安全隔离技术.html) 网络隔离技术通过故障隔离和爆炸半径控制与系统可用性设计相关
- [/软件工程/架构/系统设计/可观测性.html](/软件工程/架构/系统设计/可观测性.html) 可观测性是实现高可用系统的重要手段,通过监控、日志和追踪实现问题的快速发现和处理
- [/软件工程/架构/系统设计/分布式/分布式系统.html](/软件工程/架构/系统设计/分布式/分布式系统.html) 分布式系统设计与可用性密切相关,涉及故障处理、容错机制和一致性权衡
- [/软件工程/架构/系统设计/缓存.html](/软件工程/架构/系统设计/缓存.html) 缓存设计是提升系统可用性的重要手段,通过减轻后端压力和提供降级能力保障服务可用
- [/软件工程/架构/系统设计/网关.html](/软件工程/架构/系统设计/网关.html) 网关承担着限流、熔断、降级等保障系统可用性的关键职责
- [/软件工程/架构/系统设计/高并发.html](/软件工程/架构/系统设计/高并发.html) 高并发系统设计与可用性密切相关,涉及流量控制、资源隔离和系统稳定性保障
- [/软件工程/微服务/服务治理/服务容错.html](/软件工程/微服务/服务治理/服务容错.html) 服务容错机制是保障系统可用性的核心技术,包括熔断、降级、限流等手段
- [/数据技术/数据工程.html](/数据技术/数据工程.html) 数据工程中的可靠性保障与系统可用性设计有相似的工程原理和方法论
- [/软件工程/架构/系统设计/云原生.html](/软件工程/架构/系统设计/云原生.html) 云原生架构通过容器、微服务等技术为系统可用性提供新的解决方案
- [/中间件/数据库/ElasticSearch.html](/中间件/数据库/ElasticSearch.html) ES集群的高可用和容错设计是可用性在具体技术组件中的实践体现
- [/软件工程/架构/架构.html](/软件工程/架构/架构.html) 架构设计原则与可用性密切相关,涉及系统稳定性、可扩展性和容错能力
- [/操作系统/安全.html](/操作系统/安全.html) 系统安全与可用性密切相关,安全事件可能导致系统不可用,安全机制也可能影响系统性能
- [/计算机网络/rpc.html](/计算机网络/rpc.html) RPC框架的容错与失败处理机制是保障分布式系统可用性的关键技术