菜单

可用性模式

相关源文件

本页介绍分布式系统中实现高可用性所用的模式。高可用性确保系统即使在组件发生故障时也能保持运行和可访问。本文档涵盖故障转移策略、复制技术以及如何计算和衡量可用性。

有关一致性方法的信息,请参阅CAP 定理与一致性模式

概述

有两种互补的模式支持高可用性:**故障转移**和**复制**。这些模式有助于系统在组件发生故障时继续运行,但它们也带来了额外的复杂性和潜在的缺点。

来源:README.md500-502

故障转移

故障转移是一种在主系统发生故障时将操作重定向到备用系统的技术。

主备模式

在主备故障转移中,心跳包在活动服务器和备用服务器之间发送。如果心跳中断,备用服务器将接管活动服务器的 IP 地址并恢复服务。

停机时间的长短取决于备用服务器是处于“热”备用状态(可立即接管)还是“冷”备用状态(需要启动时间)。在此配置中,只有活动服务器处理流量。

主备故障转移有时也称为主从故障转移。

来源:README.md504-511

双活模式

在双活故障转移中,两台服务器都主动管理流量,将负载分散到它们之间。

对于面向公众的服务器,DNS 需要知道两台服务器的公共 IP。对于内部服务器,应用程序逻辑需要感知两台服务器。

双活故障转移有时也称为主主故障转移。

来源:README.md514-519

故障转移的缺点

  • 需要额外硬件并增加系统复杂性
  • 如果活动系统在将新数据复制到备用系统之前发生故障,则可能存在数据丢失的风险

来源:README.md522-525

复制

复制涉及复制关键数据或服务以提高可靠性和容错性。

主从复制和主主复制

这些复制模式在系统设计入门的数据库部分有详细描述,但它们是可用性的基础。

  • 主从复制:主节点处理读写操作,并将数据复制到一个或多个仅处理读操作的从节点。如果主节点离线,可以将从节点提升为主节点。

  • 主主复制:多个主节点处理读写操作,并在写操作上相互协调。如果任一主节点发生故障,系统仍可继续进行读写操作。

来源:README.md528-533

可用性指标

可用性通常通过正常运行时间(或停机时间)量化为服务可用时间的百分比。它通常以“几个9”来衡量——一个具有 99.99% 可用性的服务被描述为具有“四个9”。

常见可用性级别

99.9% 可用性 - 三个9

持续时间可接受的停机时间
每年停机时间8小时45分57秒
每月停机时间43分49.7秒
每周停机时间10分4.8秒
每天停机时间1分26.4秒

99.99% 可用性 - 四个9

持续时间可接受的停机时间
每年停机时间52分35.7秒
每月停机时间4分23秒
每周停机时间1分5秒
每天停机时间8.6秒

来源:README.md537-556

并行与串行下的可用性

如果一个服务由多个易于发生故障的组件组成,则服务的整体可用性取决于这些组件是串联还是并联。

串联组件

当两个可用性低于 100% 的组件串联时,整体可用性会降低

Availability (Total) = Availability (Foo) * Availability (Bar)

如果 FooBar 的可用性均为 99.9%,则它们串联后的总可用性将为 99.8%。

来源:README.md558-570

并联组件

当两个可用性低于 100% 的组件并联时,整体可用性会增加

Availability (Total) = 1 - (1 - Availability (Foo)) * (1 - Availability (Bar))

如果 FooBar 的可用性均为 99.9%,则它们并联后的总可用性将为 99.9999%。

来源:README.md572-579

实现考量

实施可用性模式时,请考虑以下因素:

  1. 恢复时间目标 (RTO):故障后恢复服务所允许的最大时间
  2. 恢复点目标 (RPO):以时间衡量的最大可接受数据丢失量
  3. 一致性要求:考虑 CAP 定理的权衡
  4. 地理分布:将组件分布到多个区域可以提高可用性
  5. 监控和警报:快速检测故障对于高可用性至关重要
  6. 自动恢复:系统应尽可能在没有手动干预的情况下从故障中恢复

实际示例

数据库高可用性

Web 应用程序高可用性

来源:README.md114-117 README.md500-579

总结

可用性模式有助于确保系统在组件故障期间保持运行。两种主要方法是:

  1. 故障转移:使用备用组件在主组件故障时接管

    • 主备模式:备用组件仅在故障时激活
    • 双活模式:所有组件都主动处理流量
  2. 复制:复制数据或服务以实现冗余

    • 主从模式:主节点处理写操作,从节点处理读操作
    • 主主模式:多个活动写节点

在设计高可用性时,请考虑:

  • 所需的可用性级别(“几个9”)
  • 组件排列(串联 vs. 并联)
  • 故障转移期间潜在的数据丢失
  • 增加的复杂性和资源需求

通过适当实施这些模式,系统可以实现更高的弹性和正常运行时间,但每种方法都涉及权衡,必须根据您的具体要求进行考虑。

来源:README.md114-117 README.md500-579