2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

规避云服务宕机的架构设计方法

  • 2021-01-18
  • 本文字数:1499 字

    阅读完需:约 5 分钟

规避云服务宕机的架构设计方法

本文最初发表于For Else网站,经原作者 Jeff Carter 许可,由 InfoQ 中文站翻译分享。


前段时间,AWS 发生宕机事故,很多服务中断。从架构角度,我们如何去应对这种宕机,网上有很多相关讨论。但是这些讨论太复杂,并且在成本、复杂性和权衡方面差异很大。所以,我决定简要介绍其中的一种方法。

多云


首先,就是关于多云价值的讨论。它的理念就是在多个云中运行你的应用。



通过将负载分散到多个供应商,我们就能在其中的某一个供应商出现故障的时候得以幸免于难。在理论上,这种方式听起来很不错!当然,两家云厂商不会同时宕机。但是,在实践中,由于种种原因,在应用层面这样做是很困难的:


  • 每种云的基础设施是不同的

  • 部署的复杂性会大幅度增加

  • 两者之间的带宽费用相当高昂


鉴于此,多云架构并不是高可用的可行方案(少数的边缘情况除外)。

多 Region


接下来,是关于多 Region 的讨论。AWS Region 是由多个可用区(availability zone,AZ)组成的,每个 AZ 是一个或多个的数据中心,它们具有独立的电源、网络和连接。在一个 Region 的多个 AZ 中运行能提供高可用性,但是无法提供灾难恢复(Disaster Recovery,DR)功能。为实现这一点,我们需要多个 Region。一个非常简略的多 Region 结构如下所示:



这种方式解决了多云架构的多个问题:


  • 应用依然在同一个云中运行,所以基础设施保持不变

  • Region 是完全独立的,因此能获得同样的可用性优势

  • Region 之间的带宽费用要比云之间的费用低得多


但令人遗憾的是,大多数的评论都是围绕 Active-Active 的多 Region。也就是将负载同时分布到多个 Region,这带来了很多关于持久化同步方面的复杂性。同时,这种方式也会增加部署方面的复杂性,并且很多地方都很容易出错,甚至它本身的停机时间比 AWS 导致的宕机时间可能还要长。

多 Region DR


这是一种常被忽视的方案。它的理念是在同一时间只有一个 Region 处于活跃状态,在发生灾难的时候,另外一个备用的 Region 能接管系统的功能(因此是 DR)。这种方式和上面所述方案的收益是一样的,但是它能极大地规避全 Active-Active 架构的复杂性。在这种架构下,备用 Region 不用完全构建,只需要复制持久化数据即可。



但是,稍等,在发生灾难时,部署完整的应用栈难道不需要一段时间吗?是的,是这样的,不过这是允许的!对大多数常见的中断场景来说,高可用是通过使用多 AZ 实现的,这种方式就足够了。如果整个 Region 出现问题,就像我们前段时间在 AWS 上所看到的那样,花费小于一个小时的时间从备份中建立一个新的应用栈,仍然要比大于八个小时的中断更可取。这个过程可以通过自动化的方式来进行简化,但即便是手动的(但经过了实践检验)操作,有可选的备用方案也是很重要的。


所以,我们更深入地探讨一下这种架构:


  • 应用程序像平常那样部署在主 Region 中

  • 使用 AWS 托管的服务、备份和副本实现数据持久化,这通常只需要一两个配置即可:

  • 在不同的 Region 中为 RDS 添加一个读副本

  • 创建 Dynamo DB global 表

  • 启用 S3 bucket 副本

  • 在进行故障恢复的时候,将应用程序部署在其他的 Region 上,并更新 DNS 的设置

  • 这一过程要定期进行测试


这是一个银弹吗?绝不是。它并不适用于任何类型的工作负载,也绝对不可能适用于任何类型的宕机。然而,它是一个相对简单的方案,并且有一定的成本效益。


总结


总之,中断肯定是会发生的,这丝毫不会降低 AWS 的价值,但是这确实表明了良好架构和规划的重要性。我们可以设计一些非常昂贵和复杂的系统来缓解这些中断,但这对大多数客户来说是过犹不及和不切实际的。幸运的是,我们还有一些其他的选择,它们可能会提供一个“足够有效”的解决方案,并有合理的权衡,这应该成为在 AWS 上开展工作时的“最佳实践”。


原文链接:


https://www.forelse.io/posts/architectures-for-mitigating-aws-outages

2021-01-18 12:003179
用户头像
张卫滨 业精于勤,行成于思。

发布了 651 篇内容, 共 479.8 次阅读, 收获喜欢 783 次。

关注

评论 1 条评论

发布
用户头像
成本为王,不做备份
2021-01-20 10:49
回复
没有更多了
发现更多内容

OceanBase 在线体验环境,现已上线!

OceanBase 数据库

征文丨TiDB 社区专栏第一届征文大赛,快来一次性集齐所有周边吧!

PingCAP

数字化时代,如何做好用户体验与应用性能管理

云智慧AIOps社区

监控宝 监控工具 自动化运维 数字化经济

一站式运维管理工具平台 OCP 到底有多好用,看这篇文章就够了!

OceanBase 数据库

数据对接 - 大屏云极简使用手册

shulinwu

可视化 数据可视化 大屏可视化 数据可视化控件 大屏

【三级等保】三级等保服务费用一年大概要多少?一年需要测评一次嘛?

行云管家

网络安全 等保 等级保护 三级等保

Linux性能优化—内存实战篇

Linux服务器开发

性能优化 内存管理 Linux服务器开发 Linux内核 内核源码

Web 键盘输入法应用开发指南(9)—— 标准与实现

天择

JavaScript 键盘 输入法 3月月更

ZEGO 自研客户端配置管理系统 —— 云控

ZEGO即构

后台开发 客户端配置 音视频架构

私有云与公有云,哪种云模型最适合企业的需求

Ethereal

Meetup预告| AIOps指标相关算法体系分享

云智慧AIOps社区

机器学习 大数据 算法 AIOPS 智能运维

企业帮助中心的搭建步骤

小炮

帮助中心

【直播回顾】OpenHarmony知识赋能第四期第二课——GPIO驱动开发

OpenHarmony开发者

OpenHarmony GPIO 驱动开发

在 Manjaro 上安装 Chrome

信号量

chrome Linux

2022 年值得关注的 9 个最新 Java 趋势

Ethereal

电科申泰加入龙蜥社区并成为理事单位,共创基础软硬件生态新未来

OpenAnolis小助手

开源 理事单位 申威 软硬件

如何使用 Checkmk 监控 SSL TLS 证书?

Ethereal

Map-Reduce 思想在 ABAP 编程中的一个实际应用案例

汪子熙

mapreduce abap CRM系统 企业级应用 3月月更

两小时,掌握四个数字化工具!

明道云

鸿蒙开发必备书籍【收藏】

坚果

鸿蒙 3月月更

抓到Netty一个隐藏很深的内存泄露Bug | 详解Recycler对象池的精妙设计与实现

bin的技术小屋

中间件 池化技术 java netty 内存池

【C语言】三子棋游戏与多子棋 (保姆级的实现过程)

謓泽

3月月更

2022年济南正规等保测评公司名单(排名不分先后)

行云管家

等保 等保测评 等保2.0 济南

OceanBase 存储引擎详解

OceanBase 数据库

HSC推出「万物生长计划」 赋能虎符交易所HOO新应用场景

区块链前沿News

Hoo 虎符交易所 虎符智能链

资产管理系统开发解决方案

低代码小观

企业管理 资产管理 CRM系统 企业管理软件

国内首届DataOps+MLOps meetup回顾

星策开源社区

人工智能 机器学习 DevOps Meetup MLOps

这门面向应用开发者的 TiDB 使用教程,TiDB SQL、Connector API、架构体系…你一定不能错过!

PingCAP

netty系列之:java中的base64编码器

程序那些事

Java 程序那些事 3月月更

并发异步编程之争:协程(asyncio)到底需不需要加锁?(线程/协程安全/挂起/主动切换)Python3

刘悦的技术博客

多线程 协程 Python3 协程原理

零基础学编程?从这本豆瓣评分9.2的入门级神作开始

图灵社区

Python 零基础

规避云服务宕机的架构设计方法_架构_Jeff Carter_InfoQ精选文章