availability模式
故障切换与复制的availability策略
Availability 指系统在某个时间段内持续可用、能完成其功能的比例。它是衡量系统在正常条件下可用时长的简单指标。
The Nine's of availability
Availability 常用 uptime(或 downtime)占比来度量,也叫“几个 9”。
$$ Availability = \frac{Uptime}{(Uptime + Downtime)} $$
比如 availability 是 99.00%,就称为 “2 nines”;99.9% 是 “3 nines”,以此类推。
| Availability (Percent) | Downtime (Year) | Downtime (Month) | Downtime (Week) |
|---|---|---|---|
| 90% (one nine) | 36.53 days | 72 hours | 16.8 hours |
| 99% (two nines) | 3.65 days | 7.20 hours | 1.68 hours |
| 99.9% (three nines) | 8.77 hours | 43.8 minutes | 10.1 minutes |
| 99.99% (four nines) | 52.6 minutes | 4.32 minutes | 1.01 minutes |
| 99.999% (five nines) | 5.25 minutes | 25.9 seconds | 6.05 seconds |
| 99.9999% (six nines) | 31.56 seconds | 2.59 seconds | 604.8 milliseconds |
| 99.99999% (seven nines) | 3.15 seconds | 263 milliseconds | 60.5 milliseconds |
| 99.999999% (eight nines) | 315.6 milliseconds | 26.3 milliseconds | 6 milliseconds |
| 99.9999999% (nine nines) | 31.6 milliseconds | 2.6 milliseconds | 0.6 milliseconds |
Availability in Sequence vs Parallel
如果一个服务由多个容易失败的组件构成,整体 availability 取决于它们是串行还是并行。
Sequence
串行时整体 availability 会降低:
$$ Availability \space (Total) = Availability \space (Foo) * Availability \space (Bar) $$
例如 Foo 与 Bar 都是 99.9%,串行组合后总 availability 约为 99.8%。
Parallel
并行时整体 availability 会提高:
$$ Availability \space (Total) = 1 - (1 - Availability \space (Foo)) * (1 - Availability \space (Bar)) $$
例如 Foo 与 Bar 都是 99.9%,并行组合后总 availability 为 99.9999%。
Availability vs Reliability
如果系统可靠(reliable),它通常可用;但系统可用不代表它一定可靠。换句话说,高 reliability 有助于高 availability,但也可能通过其他机制在不可靠系统上实现高 availability。
High availability vs Fault Tolerance
High availability 与 fault tolerance 都是为了提高 uptime,但方式不同。Fault-tolerant 系统几乎没有服务中断,但成本很高;High availability 系统允许最小化的服务中断。Fault tolerance 要求硬件完全冗余:主系统故障时,备用系统无缝接管、无 uptime 损失。