良好架构设计中的可靠性:高可用、容错、灾难恢复

简介: 良好架构设计支柱云计算良好架构设计有五大支柱,分别是:安全性,可靠性,性能效率,成本优化和卓越操作。其中可靠性是指系统从基础设施或者服务故障当中实现恢复、以动态方式获取计算资源以满足需求,以及缓解配置错误或者暂时性网络问题等干扰因素的能力。

良好架构设计支柱

云计算良好架构设计有五大支柱,分别是:安全性,可靠性,性能效率,成本优化和卓越操作。其中可靠性是指系统从基础设施或者服务故障当中实现恢复、以动态方式获取计算资源以满足需求,以及缓解配置错误或者暂时性网络问题等干扰因素的能力。一般设计原则为:测试恢复规程,自动故障恢复,横向扩展以提升总体系统可用性、多钟小资源代替大资源,不再依靠猜测确定容量需求,自动管理变更。

在我们讨论可靠性和阅读相关文献的时候,我们经常会注意到以下几个概念,它们是高可用(High Availability),容错(Fault Tolerance),灾难恢复(Disaster Recovery)。明白它们的含义和区别有助于我们更好的理解和交流的一致。

高可用(High Availability)

高可用系统是指设计成99.999%的时间可用,即一年允许有5.26分钟的宕机时间,或尽可能接近这个时间。这通常需要设计一个冗余的失效备份系统(failover system),并且能处理跟主系统相同的工作负荷。当主系统出现故障的时候,能自动在很短的时间内切换到备份系统。

在物理基础设施中,要通过设计没有单点故障的系统来达到高可用。也就是说,关键的电力、冷却系统、计算、网络、存储都需要有额外的冗余设计。在阿里云中,我们可以使用多个可用区(Available Zone)来实现物理的高可用,一个可用区包含一个或多个数据中心,一个可用区出现故障,系统能自动使用其它可用区的资源。但要做到自动切换使用其它可用区资源,我们还需要特别设计和注意。

比如我们创建一个高可用的RDS,但可用区我们选择了A,虽然RDS会在可用区A创建2个主备实例,但如果可用区A出现故障,那么这2个实例都不能工作,从而影响RDS的高可用。如果我们选择两个不同的可用区比如A+B,这样就能做到可用区级别的高可用。另外一个例子是,我们设计使用2个ECS来做web server,它们分别放到不同的可用区,这时我们还需要增加一个负载均衡(Load Balancer)来做到流量的分发,同时我们还要有另一个负载均衡待命,当主负载均衡失效的时候,待命的负载均衡能够马上启用并分发流量。

高可用的核心概念就是要有冗余待命的实例同时存在,并且在检测到主实例失效时马上投入工作。否则就只能是一个冗余的系统而不是真正的高可用系统。汽车的备用轮胎是一个高可用的设计,当然它还没有达到刚才我们描述的真正的高可用。

higha

容错(Fault Tolerant)

容错系统跟高可用的概念非常接近,但是它又更近一步,那就是要做到零宕机(Zero Downtime)。高可用能做到5个9(99.999%)的系统可用时间,还不能做到100%,那是因为只是高可用的设计还不能保证零宕机时间。如果我们做到了零宕机,那么这个系统就是一个容错系统。像下面的飞机发动机,设计有4个发动机,如果只是一两个发动机出现故障,并不会完全影响飞机的飞行。现在我们可以理解前面汽车设计的备用轮胎不能算是容错系统,因为换轮胎是需要一定时间,在这段时间汽车不能正常驾驶。

fault

灾难恢复(Disaster Recovery)

有了高可用的设计以及容错系统,我们还需要灾难恢复设计吗?我们已经达到了5个9或者更好的可用性,还搭建灾备实例干嘛呢?灾难恢复是在高可用和容错的基础上又走得更远,那就是在重大灾难发生时,比如飓风、地震或其它引起基础设施的破坏而不能提供服务时,灾难恢复会有一个完整的计划来恢复关键业务系统,而不至于让我们的业务处于瘫痪且不能恢复的状态。比如我们将重要业务放到云服务提供商的一个区域或城市(Region),当这个区域出现上述重大灾难造成我们的客户数据丢失而不能恢复时,这对我们的business会造成毁灭性的打击。那么将重要数据同时备份到其它的一个区域或城市,这样的设计就属于灾难恢复的范畴。

下图中的例子描述的是飞机出现重大事故时飞行员跳伞的情况,这里飞行员就是我们的business。留得青山在,不怕没柴烧。有了他,我们可以继续开创新的天地。

disaster

总之,灾难恢复就是确保我们的business不被中断。当然灾难的恢复需要时间,我们也可能会丢失一部分数据。这里有两个重要指标就是RTO(Recover Time Objective),RPO(Recover Point Objective),分别代表恢复需要的时间以及恢复到灾难之前的什么时间的数据。它们都是越短越好。RPO跟我们的备份周期相关,如果数据做到了实时同步,这个时间就会很短;如果每天备份一次且没有增量备份,那么我们就可能丢失一天的内容。要做到RTO时间尽可能短,也是需要通过一些自动化的脚本或基础设施自动创建来实现。这里其实是IaC(Infrastructure As Code)的一些概念。阿里云提供的ROS或者开源的Terraform可以用来做基础设施的脚本管理和维护。

大家可以参考参考资料6来看灾难恢复计划的具体模板。

总结

理解了上面高可用、容错、灾难恢复的几个概念,我们在看资料和交流的时候才知道我们想表达的是哪一个概念,才不至于互相混用这几个词语引起对方的误解。

参考资料

  1. AWS Well-Architected Framework
  2. Disaster Recovery vs. High Availability vs. Fault Tolerance: What are the Differences?
  3. High Availability vs. Fault Tolerance vs. Disaster Recovery
  4. The Difference Between Fault Tolerance, High Availability, & Disaster Recovery
  5. Building Fault-Tolerant Applications on AWS
  6. Disaster Recovery Plan Template
相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
5月前
|
人工智能 架构师 Cloud Native
架构愿景: 构建良好软件的关键
架构愿景: 构建良好软件的关键
56 0
|
7月前
|
开发框架 .NET 容器
.NET Core-依赖注入:良好架构的起点
.NET Core-依赖注入:良好架构的起点
|
7月前
|
开发框架 .NET 容器
.net core依赖注入:良好架构的起点
.NET Core使用依赖注入框架来管理服务的依赖与生命周期。
x3d
良好Web系统架构的几个因素
好像以前整理过一些思路。   这里的架构不是指纵向的架构,而是横向的架构方面。   三个词:挂件化、模块化、钩子化。
x3d
602 0
|
3天前
|
敏捷开发 监控 数据管理
构建高效微服务架构的五大关键策略
【4月更文挑战第20天】在当今软件开发领域,微服务架构已经成为一种流行的设计模式,它允许开发团队以灵活、可扩展的方式构建应用程序。本文将探讨构建高效微服务架构的五大关键策略,包括服务划分、通信机制、数据管理、安全性考虑以及监控与日志。这些策略对于确保系统的可靠性、可维护性和性能至关重要。
|
16天前
|
API 数据库 开发者
构建高效可靠的微服务架构:后端开发的新范式
【4月更文挑战第8天】 随着现代软件开发的复杂性日益增加,传统的单体应用架构面临着可扩展性、维护性和敏捷性的挑战。为了解决这些问题,微服务架构应运而生,并迅速成为后端开发领域的一股清流。本文将深入探讨微服务架构的设计原则、实施策略及其带来的优势与挑战,为后端开发者提供一种全新视角,以实现更加灵活、高效和稳定的系统构建。
20 0
|
4天前
|
消息中间件 监控 持续交付
构建高效微服务架构:后端开发的进阶之路
【4月更文挑战第20天】 随着现代软件开发的复杂性日益增加,传统的单体应用已难以满足快速迭代和灵活部署的需求。微服务架构作为一种新兴的分布式系统设计方式,以其独立部署、易于扩展和维护的特点,成为解决这一问题的关键。本文将深入探讨微服务的核心概念、设计原则以及在后端开发实践中如何构建一个高效的微服务架构。我们将从服务划分、通信机制、数据一致性、服务发现与注册等方面入手,提供一系列实用的策略和建议,帮助开发者优化后端系统的性能和可维护性。