高可用性与容错-架构快速进阶教程
1. 简介
在本教程中,我们将研究高可用性和容错之间的异同。随着计算机网络的扩展和云计算的出现,网络服务在全球范围内流行起来。目前,网络化服务已融入日常生活,随时随地都需要。
由于这种普及,提供商必须保持通过网络提供的服务持续可供客户使用。为此,这些提供商创建了最低服务可用性协议,并采用允许和恢复故障的技术。
但是,尽管相关概念、高可用性和容错并不等同。因此,在下一节中,我们将看到背景概念。接下来,我们将特别探讨高可用性和容错。最后,我们将概述所研究的概念,并在系统摘要中进行比较。
2. 背景
尽管高可用性和容错在技术上已经使用了很长时间,但云计算的普及才是真正推动其发展的原因。
云计算实际上并不是什么新鲜事物。自互联网的最初几年以来,它就一直在讨论。然而,随着多个不同用户广泛创建和访问网络,云变得流行起来。
简而言之,云通过互联网提供了多种计算资源。它使利益干系人能够在线托管服务,从而使多个客户可以使用这些服务。
需要强调的是,在云计算中提供资源可以通过不同的模型来实现,例如基础架构即服务、平台即服务和软件即服务。
但是,无论采用哪种模式,利益相关者和客户都希望在他们需要的确切时刻访问所提供的服务。正是在这里实现了高可用性和容错:保证了网络服务的连续和正确运行。
但是,在讨论高可用性和容错的特殊性之前,让我们看看它们的一个重要概念:冗余。
冗余是部署系统组件副本(硬件和软件)的做法。这些副本对于服务的正常运行不是必需的,但对于保证其可用性、检测故障和缓解故障至关重要。
由于这些特征,我们将看到以下部分以多种方式探讨冗余。
3. 高可用性定义
简单粗暴说高可用性指定旨在最大程度地减少系统或服务停机时间的设计。因此,高可用性的主要目标是保持这些系统和服务持续可用。然而我们可以采用逐字拆解方式来理解“高可用”背后含义。
高:
逐字分析:“高”在这里是一个形容词,用于修饰后面的名词“可用”。它表达了一种程度上的优越性或超越性,意味着不仅仅是“可用”,而且是“非常可用”或“高度可用”。
结合计算机系统设计:在计算机系统设计中,“高”可能暗示了系统需要具备高度的稳定性、可靠性和容错能力,以确保在各种复杂环境下都能持续提供服务。
可:
逐字分析:“可”是一个助动词,用于表示某种能力或可能性。在这里,它表示系统具备某种能力或条件,使得用户能够使用或依赖它。
结合计算机系统设计:在计算机系统设计中,“可”强调了系统需要是用户可访问、可操作和可依赖的。它要求系统必须能够正常运行,响应用户的请求,并提供准确的数据或服务。
用:
逐字分析:“用”是原意一个动词但在这动词已经名词化了:表示使用或利用某种资源、工具或系统。在这里,它指的是用户或系统对计算机系统的使用
。
结合计算机系统设计:在计算机系统设计中,“用”强调了系统的实际应用价值。它要求系统必须具备足够的功能和性能,以满足用户的需求,并为用户提供有价值的服务或解决方案。
组合理解
将“高”、“可”和“用”组合起来,我们得到“高可用”。在计算机系统设计中,“高可用”指的是系统具备高度的稳定性、可靠性和容错能力,能够持续稳定地提供服务,确保用户能够随时访问和使用系统,而不会因为系统故障或停机而导致服务中断或数据丢失。
通常,我们通过保证服务在一年内在线并可供使用的时间百分比来衡量高可用性。最常见的可用性类包括:
- 90%(一九):一九类表示每年最长停机时间为 36.53 天(约一个月)
- 99%(两个 9):两个 9 类允许每年最多停机时间为 3.65 天(几天)
- 99.9%(三个 9):三个 9 类表示每年的最大停机时间为 8.77 小时(几小时)
- 99.99%(四个 9):四个 9 类每年接受的最大停机时间为 52.6 分钟(不到一个小时)
- 99.999%(五个 9):五个 9 类每年最多允许 5.26 分钟(几分钟)的停机时间
当然,还有更严格的高可用性类。反过来,这些类意味着每年的最大停机时间为秒(六个九及以上)或毫秒(八个九及以上)。但是,它们很难实现,通常只考虑用于特定的敏感方案。
要计算给定系统的可用性类,我们可以使用以下等式:
这是一种天真的方式,我们可以说,高可用性系统中的 9 数越多越好。但是,保证几个九是复杂的,并且意味着高昂的财务成本。因此,最佳高可用性类是满足提供商和客户端之间建立的所有协议的类。
3.1. 实现高可用性系统和服务
通常,高可用性依赖于一组充当单个系统或服务的复制组件。这些组件集通常称为高可用性群集。
高可用性群集在它们之间共享资源。例如,他们可以共享数据库和配置文件。因此,在故障或重载情况下,副本是数据一致的,可以承担服务并尽快开始工作。
下图描述了一个简化的高可用系统体系结构:
请注意,复制的系统和服务可能保持待机模式,仅在主体系统以某种方式发生故障时使用。通过这种方式,我们将系统故障和复制系统开始工作之间的时间视为非工作时间(根据所需的高可用性等级,该时间往往较低)。
4. 容错
容错表示系统即使在发生故障时也能运行的能力。此外,容错系统可以采用策略在故障组件的生命周期中恢复其生命周期。
我们可以将故障视为组件的一个条件,使其行为与预期不同。因此,当故障出现时,我们将其称为错误,如果错误危及系统操作,则会出现故障事件。
但是,在谈论容错之前,我们应该了解它指的是哪些错误。简而言之,在这种情况下通常探索三种主要的故障模型:
- 故障停止:指组件崩溃故障;组件崩溃意味着它停止工作
- 故障静默:指组件遗漏错误;组件的遗漏意味着它没有按预期响应(但不一定停止工作)
- 拜占庭:最通用的故障模型,指的是产生意外错误的故障,这些错误可能会或不会再次发生;这样,有时系统可以正常工作,但有时(对于相同的场景和输入),它不会
因此,容错系统首先设计用于检测和处理一定数量的故障(考虑特定模型),即使组件受损也能提供正确的结果。
由于所呈现的特征,我们期望容错系统具有高可靠性(系统按预期工作的置信度)、高可用性(如前所述,保持系统连续运行)和高可测试性(通过分析错误和故障来检测和诊断故障的能力)。
4.1. 实现容错系统
与高可用性系统类似,容错系统在大多数情况下依赖于协同工作的复制组件。反过来,这些组件不是作为一个整体工作,而是独立运行,合作以收敛到一个共同的结果。
这样,容忍给定组件中的许多错误意味着系统中至少具有副本。但是,该数字取决于哪个是采用的故障模型,但它的通常值是and。
在所描述的场景中,所有副本都接收相同的输入,并应处理和建议结果。因此,系统随后将大多数副本找到的结果作为操作结果。
下图显示了容错 DNS 系统的简单示例:
除了前面描述的复制之外,容错系统还具有冗余和多样性。
对于冗余,我们的意思是让副本准备好立即更换故障组件。然而,对于多样性,我们的意思是部署单个组件规范的不同实现,从而降低复制特定故障的可能性。
由于所有这些特性和要求,容错自然意味着具有高资本成本的复杂系统。
5. 系统总结
在现代网络中,通常通过互联网在线提供多种服务。在许多情况下,一旦快速中断可能导致灾难性后果和巨大的经济损失,提供商必须为客户提供持续可用的这些服务。
但是,保持网络服务的持续可用性是一项具有挑战性的任务。因此,已经提出了几种关于高可用性和容错的策略和技术来应对这一挑战。
但是,需要强调的是,高可用性和容错不是同一个概念。
高可用性是指旨在最大限度地减少停机时间的系统设计,无论其发生的原因如何。反过来,容错系统即使在出现一定数量的故障的情况下也可以继续工作。
这样,成为容错系统并不一定意味着是高可用系统,高可用系统也不表示是容错系统。但是,高可用性和容错可以很好地协同工作,以创建可靠的系统和服务。
下表比较了高可用性和容错的一些特征:
6. 结论
在本教程中,我们研究了高可用性和容错能力。最初,我们研究了与高可用性和容错系统相关的一些背景概念。之后,我们看到了在当前网络系统中实现高可用性和容错的定义和要求。最后,我们系统地比较了分析的系统设计。
我们可以得出结论,由于网络和互联网的普及和扩展,多种服务正在向网络世界转移。其中一些服务执行敏感操作,这些操作必须持续可用。在这种情况下,高可用性和容错是非常适合这些服务的系统设计,从而使这些设计成为现代必需品。