探索容灾架构演进之路,从单点到异地多活

1. 挑战与变革

在公司发展初期,业务发展和用户增长是首要关注的焦点。然而,随着业务规模不断扩大,用户数量逐渐攀升,应用稳定性的重要性也变得愈发凸显。在这个演进过程中,传统架构下的应用部署模式开始显露出多方面的稳定性风险,其中最为显著的问题之一就是机房单点故障。当机房发生故障时,业务无法迅速恢复,这可能导致巨大的损失。

以近两年实际案例为例,我们可以看到,无论是云上机房还是自建机房,都存在机房故障的潜在风险。例如:

  • 2022 年 12 月 18 日,阿里云香港 Region 可用区 C 遭遇机房冷却系统异常,导致大规模服务中断,故障长达近 12 个小时。
  • 2023 年 3 月 29 日,唯品会南沙机房冷却系统故障,导致线上商城停止服务,故障时间超过 12 个小时,损失超过亿元。
  • 2023 年 4 月 10 日,腾讯云广州电信机房冷却系统故障,导致大规模服务异常。 这些事件凸显了无论是云服务提供商还是自建数据中心在面对机房故障时的脆弱性,所以在部署架构上要尽可能的做到高可用,来应对潜在的机房故障风险。这种改革是为了确保业务的持续稳定运行,减少因故障而导致的经济损失。

2. 理解传统部署架构的局限性

在业务发展初期应用部署架构相对简单,但没有任何灾备能力,当存储或应用故障时整个业务将会中断。

为了提高可用性架构会演进成将存储进行主从部署,当存储故障时可由从库快速切换为主库继续提供服务,同时也开始将业务应用和接入层多实例部署,进一步提高可用性。

随着业务进一步发展,业务应用也开始由单体应用向微服务演进,随着新应用的加入整体架构如下。

到目前为止从接入层、应用层、存储层均已经具备一定的高可用能力,但还是那个核心问题整个架构部署依然是在单个机房完成的。如果遇到机房级别的故障,这套部署架构还是无能为力,这就是传统部署架构的局限性

3. 容灾架构的类型

针对传统架构的容灾设计业界常见的方案有异地冷备、同城双活、两地三中心、异地多活

异地冷备

异地冷备部署架构是由两个机房组成的,主机房负责对外提供服务,而备机房则专注于存储数据备份。在主机房发生故障时,应用部署需要在备机房进行全面展开,包括接入层和业务服务。接下来的流程包括将备机房的存储切换为主库,最终将流量切换到备机房的接入层。这一故障恢复的过程相对较长,需要大量人工干预,因而准确性和实效性难以得到充分保障,从而显著延长了服务不可用的时间。即使在所有故障恢复动作完成后,由于备机房未经验证,也难以确保备用机房能够直接提供对外服务。

  • 优点:成本低,硬件以及网络等资源投入少
  • 缺点:可用性差,故障恢复时间长甚至无法恢复
  • 适用场景:对恢复时间要求较低的应用,成本敏感的业务,非关键业务或支持性业务,较小规模的企业(有一定规模的公司几乎很少使用此方案)

同城双活

同城双活部署架构同样需要两个机房,异地冷备架构中备用机房可用性无法得到保证,那么同城双活部署架构的思路就是让备用机房和主机房一样,实时对外提供服务达到“热备”的效果。机房 A 和机房 B 是部署在同一个城市,两个机房间使用同城专线交互,延迟相对较低。理想状态下当机房 A 出现故障时可以直接将流量切换到机房 B,而无需担心机房 B 的服务不可用

  • 优点:机房故障隔离,双机房流量负载均衡,机房间通信相对较低的网络延迟,高可用
  • 缺点:部署架构相对复杂,运维 &研发成本增加,无法应对城市级别故障
  • 适用场景:同城双活适用于那些对系统可用性要求极高,不能容忍长时间的停机和服务中断的业务场景(通常作为异地多活的一个过渡阶段)

两地三中心

两地三中心的部署架构是同城双活+异地冷备的组合模式,在同城双活的基础上另外建设异地机房,在异地机房中备份存储数据,当发生城市级别的故障时(例如地震,海啸)可以在异地机房中部署接入层,全量服务来对外提供服务。不过这个和异地冷备一样,当真正需要异地的冷备机房启用时很难保证它能正常工作。

  • 优点:机房故障隔离,城市故障有灾备能力,双机房负载均衡,机房间通信相对较低的网络延迟,高可用
  • 缺点:运维 &研发成本增加,异地冷备的数据中心可用性很难保障

异地多活

异地多活是最理想态的容灾部署方案,部署多个数据中心,数据中心可以无限水平扩展,多个数据中心同时对外提供服务,任意数据中心故障时可以将流量切换到其他数据中心。不过异地多活的挑战也是最多的,要在同城双活的基础上实现单元化,不同数据中心之间的数据同步以及管控系统的多活等等,每一个挑战都是困难且复杂的。

小结

通过上面的介绍不难看出,这几种容灾架构的对应的可用性是逐步提高的,事情都是具有两面性的,在可用性逐步提供的同时整个部署架构的复杂性和成本也是再升高的。

4. 容灾架构选择的关键因素

在容灾架构中,核心思想是通过冗余部署,将可能出现问题的单点服务、接入层和存储,在一个或多个数据中心中进行冗余部署,以应对潜在的故障。然而,冗余带来的问题主要体现在成本方面。在我看来,选择适合的容灾架构是一个涉及可用性需求和成本(运维和研发成本)的博弈过程。

在软件行业中,大家通常都听说过一句话:“世上没有最好的架构,只有最合适的架构” 异地多活被认为是最理想的容灾方案,但并不适用于所有公司的所有阶段。在选择容灾架构时,需要综合考虑容灾需求和成本,选择当前最适合的架构。这是一个动态的过程,随着业务的发展逐渐演进。

因此,在选择容灾架构时,公司需要明智地权衡可用性需求和维护这种冗余结构所需的资源投入。这种平衡是一个关键的战略决策,影响着企业的业务连续性和整体稳定性。

5. 总结

本文简要介绍了几种容灾架构的类型和它们各自的优缺点。容灾架构的选择在于平衡可用性需求和成本之间的关系,并不存在一种完美的架构,而是应该根据业务发展的阶段逐步演进容灾架构,避免陷入过度设计和资源浪费的困境。理性地选择最适合当前业务阶段的架构,并在业务发展中不断进行迭代,是建立强健容灾体系的关键。

接下来的问题是如何根据当前架构进行变革和实施。这个过程充满了挑战和困难,需要认真应对。在下一篇文章中,我们将深入探讨同城双活容灾架构在实际落地中所面临的困难和挑战,并提供相应的解决方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/175729.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java】IDEA 基本操作

0.IDEA 0.1 IDEA中的层级结构 0.1.1 结构分类 project(项目、工程)module(模块)package(包)class(类) 0.1.2 结构介绍 project(项目、工程) ​ 淘宝、京…

JS:获取当前日期是本年度的第几周

问题 根据当前的日期(比如年月日),来得到当前日期属于本年度的第几周 解决 代码: // 获取当前日期是本年的第几周 //参数: a为年 b为月 c为日 function getYearWeek(a, b, c) {var date1 new Date(a, parseInt(b)…

【Axure高保真原型】3D金字塔图_移入显示数据标签

今天和大家分享3D金字塔图_移入显示数据标签的原型模板,鼠标金字塔区域时,对应区域会变绿,可以查看该区域对应的项目和数据,这个原型模板是用Axure原生元件制作的,所以无需联网,而且可以自由修改样式、交互…

百度智能小程序系统源码+关键词排名优化 附带完整的搭建教程

百度智能小程序系统的开发背景是基于百度强大的技术实力和对用户需求的深入理解。在移动互联网时代,用户对便捷、高效、智能的服务需求越来越高。而小程序作为一种轻量级的应用程序,恰好能够满足用户的这些需求。然而,开发一个小程序需要掌握…

Kafka 如何实现顺序消息

版本说明 本文所有的讨论均在如下版本进行,其他版本可能会有所不同。 Kafka: 3.6.0Pulsar: 2.9.0RabbitMQ 3.7.8RocketMQ 5.0Go1.21github.com/segmentio/kafka-go v0.4.45 结论先行 Kafka 只能保证单一分区内的顺序消息,无法保证多分区间的顺序消息…

uniapp挽留提示2.0

项目需求:有时候挽留的ui是全屏的,用page-container也可以。后来产品提了个问题,手机侧滑的时候没那么顺畅(就是一用侧滑,就显示出来,产品要的方案是如下图,emmm大概是这个意思) 后面…

Python入门04字符串

目录 1 字符串的定义2 转义字符3 字符串的常见方法4 分割字符串5 字符串反转6 字符串的链式调用7 格式化字符串8 多行字符串总结 1 字符串的定义 在Python中,字符串表示一个字符的序列,比如 str "hello,world"这里我们定义了一个字符串&…

java选择排序和冒泡排序

1.区别 选择排序和冒泡排序的区别主要在于算法逻辑、稳定性和交换成本。 算法逻辑:选择排序和冒泡排序都属于比较排序,但在具体算法逻辑上有所不同。冒泡排序是通过相邻元素之间的比较和交换,将较大(或较小)的元素逐…

一文从Vue2过渡到Vue3

文章目录 Vue3简介创建Vue3.0工程使用 vue-cli 创建使用 vite 创建Vue3工程结构变化 常用 Composition API拉开序幕的setupref函数reactive函数Vue3.0中的响应式原理vue2.x的响应式Vue3.0的响应式 reactive对比refsetup的两个注意点计算属性与监视computed函数watch函数watchEf…

Pytorch中的gather的理解和用法

Pytorch中的gather的理解和用法 这个Gather的用法花费了点时间,我相信很多人一开始不太懂。 跟着我简单理解。 首先样例是: tensor([[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]])然后index: [[2, 1, 0]]然后执行的代码: tensor_0.gather(0…

享受更健康的睡眠,dido P1S智能手环体验

如今很多人都有严重的失眠困扰,像是因为平时工作非常繁忙,每天回到家后已经很晚了,或者是睡前长时间刷手机,躺在床上辗转反侧,晚上就很难入睡,脑海中一片混乱,休息的质量就很差。我最近尝试了一…

人工智能关键技术决定机器人产业的前途

人工智能(Artificial Intelligence,AI)是指让计算机或机器具有类似于人类的智能和学习能力的技术。人工智能技术与机器人技术的结合将改变传统的机器人行业格局,就像智能手机对传统手机的颠覆一样。本文从人工智能技术的发展趋势、…

ASIWebPage数据库抓取代码示例

objective-c #import "ASIWebPageRequest.h" int main(int argc, const char * argv[]) { autoreleasepool { // 创建并设置 NSURL *代理URL [NSURL URLWithString:""]; ASIHTTPRequest *request [ASIHTTPRequest requestW…

jsoup登录日志平台后调企业微信机器人自动发送错误日志告警

一、需求:错误日志Top10告警发送 二、需求分解 jsoup实现登录,获取到cookie和token等用户鉴权信息获取接口相应的key值调用日志平台错误日志Top榜接口,查询到结果集调用企业微信机器人发送消息接口加上定时任务,可以实现定时发送…

java多线程-扩展知识二:线程的生命周期

1、生命周期 生命周期有广义与狭义之分,狭义为生命科学术语,指包括人类在内的一切动物由出生到死亡经历的生命全程。广义的生命周期泛指自然界与人类社会各种客观事物的阶段性变化及规律,如家庭生命周期、产品生命周期等。本义即狭义的生命周…

任务管理器怎么打开?4个方法快速打开!

“我想进入电脑任务管理器中对某些应用进行设置,但是我不知道应该怎么进入任务管理器中。有什么方法可以快速进入任务管理器吗?” 任务管理器是Windows操作系统中一个强大的工具,可以让你监控和管理计算机上运行的进程、应用程序和性能。当我…

FLASK博客系列5——模板之从天而降

我们啰啰嗦嗦讲了4篇&#xff0c;都是在调接口&#xff0c;啥时候能看到漂亮的页面呢&#xff1f;别急&#xff0c;今天我们就来实现。 来我们先来实现一个简单的页面。不多说&#xff0c;上代码。 app.route(/) def index():user {username: clannadhh}return <html>&…

解决方案:新版WPS-右键粘贴值到可见单元格没有了

旧版WPS&#xff0c;右键就能出现 但是新版WPS不是在这里&#xff08;方法1&#xff09; 新版WPS&#xff08;方法2&#xff09; 视频详细教程链接&#xff1a;解决方案&#xff1a;新版WPS-右键粘贴值到可见单元格没有了 -- 筛选后复制公式粘贴为数值_哔哩哔哩_bilibili

智能优化算法应用:基于飞蛾扑火算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于飞蛾扑火算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于飞蛾扑火算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.飞蛾扑火算法4.实验参数设定5.算法结果6.参考…

数智融合 开启金融数据治理新时代

11月24日&#xff0c;由上海罗盘信息科技有限公司&#xff08;罗盘科技&#xff09;主办&#xff0c;北京酷克数据科技有限公司&#xff08;酷克数据&#xff09;支持协办的“博学近思 切问治理”数据治理分享会在上海成功举行。 本次会议深度聚焦金融行业数智化转型&#xff…