本页介绍分布式系统中实现高可用性所用的模式。高可用性确保系统即使在组件发生故障时也能保持运行和可访问。本文档涵盖故障转移策略、复制技术以及如何计算和衡量可用性。
有关一致性方法的信息,请参阅CAP 定理与一致性模式。
有两种互补的模式支持高可用性:**故障转移**和**复制**。这些模式有助于系统在组件发生故障时继续运行,但它们也带来了额外的复杂性和潜在的缺点。
故障转移是一种在主系统发生故障时将操作重定向到备用系统的技术。
在主备故障转移中,心跳包在活动服务器和备用服务器之间发送。如果心跳中断,备用服务器将接管活动服务器的 IP 地址并恢复服务。
停机时间的长短取决于备用服务器是处于“热”备用状态(可立即接管)还是“冷”备用状态(需要启动时间)。在此配置中,只有活动服务器处理流量。
主备故障转移有时也称为主从故障转移。
在双活故障转移中,两台服务器都主动管理流量,将负载分散到它们之间。
对于面向公众的服务器,DNS 需要知道两台服务器的公共 IP。对于内部服务器,应用程序逻辑需要感知两台服务器。
双活故障转移有时也称为主主故障转移。
复制涉及复制关键数据或服务以提高可靠性和容错性。
这些复制模式在系统设计入门的数据库部分有详细描述,但它们是可用性的基础。
主从复制:主节点处理读写操作,并将数据复制到一个或多个仅处理读操作的从节点。如果主节点离线,可以将从节点提升为主节点。
主主复制:多个主节点处理读写操作,并在写操作上相互协调。如果任一主节点发生故障,系统仍可继续进行读写操作。
可用性通常通过正常运行时间(或停机时间)量化为服务可用时间的百分比。它通常以“几个9”来衡量——一个具有 99.99% 可用性的服务被描述为具有“四个9”。
| 持续时间 | 可接受的停机时间 |
|---|---|
| 每年停机时间 | 8小时45分57秒 |
| 每月停机时间 | 43分49.7秒 |
| 每周停机时间 | 10分4.8秒 |
| 每天停机时间 | 1分26.4秒 |
| 持续时间 | 可接受的停机时间 |
|---|---|
| 每年停机时间 | 52分35.7秒 |
| 每月停机时间 | 4分23秒 |
| 每周停机时间 | 1分5秒 |
| 每天停机时间 | 8.6秒 |
如果一个服务由多个易于发生故障的组件组成,则服务的整体可用性取决于这些组件是串联还是并联。
当两个可用性低于 100% 的组件串联时,整体可用性会降低
Availability (Total) = Availability (Foo) * Availability (Bar)
如果 Foo 和 Bar 的可用性均为 99.9%,则它们串联后的总可用性将为 99.8%。
当两个可用性低于 100% 的组件并联时,整体可用性会增加
Availability (Total) = 1 - (1 - Availability (Foo)) * (1 - Availability (Bar))
如果 Foo 和 Bar 的可用性均为 99.9%,则它们并联后的总可用性将为 99.9999%。
实施可用性模式时,请考虑以下因素:
来源:README.md114-117 README.md500-579
可用性模式有助于确保系统在组件故障期间保持运行。两种主要方法是:
故障转移:使用备用组件在主组件故障时接管
复制:复制数据或服务以实现冗余
在设计高可用性时,请考虑:
通过适当实施这些模式,系统可以实现更高的弹性和正常运行时间,但每种方法都涉及权衡,必须根据您的具体要求进行考虑。