混合云应用双活容灾最佳实践
mhr18 2024-12-14 11:11 16 浏览 0 评论
前言
越来越多的企业在数字化转型和上云进程中选择混合云的形态(云+自建 IDC 或云+其他厂商云)来进行容灾建设,一方面不会过度依赖单一云厂商,另一方面还能充分利用已有的线下 IDC 资源。
MSHA 云原生多活容灾解决方案[1],也发布了混合云多活容灾产品能力。本文会通过一个业务 Demo 案例,介绍混合云容灾建设的难点,以及如何基于 MSHA 来快速搭建应用双活架构并具备分钟级业务恢复能力。
业务混合云容灾实践
业务背景信息
A 企业是一个零售行业电商交易平台,业务系统部署在自建 IDC 机房,存在以下痛点:
- 业务仅在 IDC 单机房部署,缺少容灾能力。
- IDC 容量不足,物理机器升级替换周期长,不足以支撑业务的快速发展。
业务在快速发展过程中,多次遇到的容量不足以及故障问题引起了公司高层的重视,决心进行容灾能力建设。由于自建 IDC 是公司已有资产且稳定使用多年,同时不希望过度依赖于云,因此期望建立 IDC+云 的混合云形态容灾架构。
当前应用部署架构
电商交易平台包含的应用:
- frontend:Web 应用,负责和用户交互。
- cartservice:购物车应用,提供购物车添加、存储和查询服务。
- productservice:商品应用,提供商品、库存服务。
技术栈:
- SpringBoot。
- RPC 框架:SpringCloud、Dubbo,注册中心使用自建的 Nacos、Zookeeper。
- 数据库 Redis 和 MySQL。
混合云容灾目标
业务容灾需求归纳如下:
- 云上云下互容灾,切换 RTO 为分钟级。期望云上云下相互容灾,继续发挥 IDC 的价值,且不 100% 依赖于云。面对 IDC 或云故障场景,关键时刻要敢切换、能切换,且切换 RTO 要求小于 10 分钟。
- 无数据一致性风险。云上云下的两个数据中心数据强一致,日常态和容灾切换过程中都要避免存在脏写等数据一致性风险。
- 一站式管控。业务容灾涉及的技术栈框架和云产品,需要统一管控、统一运维、统一切换,操作收敛在一站式管控平台,方便故障场景快速白屏化操作,自动化执行。
- 实施周期短,改造成本低。业务存在多个产品线,依赖关系复杂、调用链路长,且处于高速发展频繁迭代时期,期望容灾建设不会给业务研发团队带来改造负担。
建设难点
- 流量管理难度高
- 若采用 DNS 将流量按权重解析到云上和云下,存在修改 DNS 解析生效时间长的问题(通常为十分钟或小时级,参见 DNS 解析生效时间 FAQ[2]),不能满足容灾切换小于 10 分钟的要求。
- 业务应用所依赖的 Redis 和 MySQL,IDC内采用开源自建而云上直接使用云产品,要实现开源自建+云产品的容灾切换能力难。
- 容灾切换数据质量保障难
- 容灾切换过程中,可能因数据同步延迟导致读到旧数据,以及切换规则推送到分布式应用节点时间不一致等原因可能造成云上云下数据库同时读写而出现脏写的问题,整个切换过程数据质量保障是个关键点,同时也是难点。
- 无业务代码侵入难
- 要实现 Redis、MySQL 容灾切换能力,通常需要业务应用配合改造,对业务代码侵入大。
解决方案
结合业务容灾需求和混合云 IDC+云形态的特点,采用应用双活架构能够较好的满足业务容灾诉求。
应用双活架构
架构简图:
架构规范:
- 选择离 IDC 物理距离<=200km 的云上 Region,网络延迟较低(约 5~7ms)。
- 应用、中间件云上云下冗余对称部署,同时对外提供服务(应用双活)。
- 数据库异地主备,异步复制备份。应用读写同一数据中心的数据库,避免考虑一致性问题。
详细方案
- 应用流量双活
业务应用云上云下对称部署,并基于 MSHA 接入层集群,来承接入口 HTTP/HTTPS 流量,按照比例或精准路由规则云上云下分流。多活控制台提供 MSFE 集群界面白屏化的部署、扩缩容、监控等常规运维能力,以及应对故障场景的分钟级切流能力。
- 服务互通和同单元优先调用
业务应用需要按业务产品线分批上云,过程中存在下游应用仅 IDC 部署的情况。利用 MSHA 注册中心同步功能,可实现云上云下服务互通,助力业务上云。同时基于 MSHA-Agent 的切面能力,在 Dubbo/SpringCloud 服务调用时,Consumer 优先调用同单元内的Provider,从而避免跨机房调用带来的网络延迟,减小业务请求 RT。
- 数据同步&数据库连接切换
数据库异地主备部署,云上云下应用日常态均读写云上 Redis 和 RDS 数据库,无需考虑数据一致性问题。MSHA 控制台通过集成 DTS 同步组件,支持云上云下的数据同步(异步复制)。同时基于 MSHA-Agent 切面能力,具备应用数据库访问连接的切换能力,云上 Redis 或 RDS 故障则可将读写访问连接切换到 IDC 内的 Redis 或 MySQL,反之亦然。切换过程中还具备禁写保护能力,避免产生读到旧数据以及脏写等数据质量问题。
- 一站式管控&无业务代码侵入
MSHA 控制台,支持 HTTP、数据库访问流量的统一管控、统一切换,操作收敛在一站式管控平台,方便故障场景快速白屏化操作,自动化执行。同时针对业务应用 MSHA 提供了 Agent 接入方式,无需业务代码改造即可获得相关容灾切换能力。
改造内容
- 应用上云
- 选择跟自建 IDC 较近的阿里云地域,云上完全冗余的部署一套应用、中间件和数据库,以便搭建云上云下双活容灾架构。在这个 Demo 案例中,选择杭州 Region 作为容灾单元。
- 网络打通:
- 接入 CEN 云企业网,实现云上云下网络互通(详见多接入方式构建企业级混合云文档[3])。
- 接入集群部署和配置:
- 云上云下部署 MSHA 接入层集群(MSFE),上挂 SLB 用于公网接入以及 MSFE 集群的负载均衡(参见使用文档[4])。
- 录入域名、URI 和后端应用地址,从而具备云上云下分流和分钟级切流能力(参见使用文档[5])。
- 应用:
- 云上分批部署业务应用。
- JAVA 应用安装 MSHA-Agent,并使用 Nacos 作为管控命令下发通道,从而具备微服务同单元优先调用以及数据库访问连接切换能力(参见使用文档[6])。
- 中间件和数据库:
- 云上部署 MSE 托管 ZK/Nacos 注册中心、云数据库 Redis 和 RDS,建议使用跨可用区部署高可用版本,具备同城双活容灾能力。
- 若存在某应用仅 IDC 部署的情况,需要配置注册中心的服务同步(参见使用文档[7])。
- 配置云数据库 Redis/RDS 和自建 Redis/MySQL 的数据同步(参见使用文档[8])。
改造后的应用部署架构
日常场景:IDC+云上同时承担业务流量--应用双活
访问电商 Demo 首页,查看实际流量调用链:概率性的访问到北京或杭州单元,均读写北京单元内的数据库。
容灾能力
- RPO:<=1min(依赖于 DTS 同步性能)
- RTO:<=1min(依赖于 DTS 同步延迟,MSHA 组件实现秒级切换。整体 RTO<=1min)
容灾能力验证
基于 MSHA 完成应用双活架构建设后,还需验证业务容灾能力是否符合预期。接下来将制造真实的故障,来验证容灾恢复能力。
7.1 演练准备
- 进入 MSHA 控制台,在左侧菜单栏选择监控大盘。页面顶部,下拉选择切换到实际使用的命名空间。
- 查看页面中的各项监控指标。
说明:演练前,基于 MSHA 流量监控或其他监控产品,确定业务稳态的监控指标(如日常情况 RT<=200ms,错误率<1%),以便在故障发生时判断故障影响面以及在故障恢复后判断业务的实际恢复情况。
7.2 应用故障注入
这里我们使用阿里云故障演练产品,对阿里云-北京的商品应用注入故障。
- 进入 Chaos 故障演练产品控制台[9],顶部选择切换到相应地域,左侧导航栏选择我的空间。
- 在我的空间选择配置好的演练(50% 概率网络丢包),然后单击执行演练。
故障注入成功后,打开电商首页或进行下单,有概率出现访问异常,符合预期。
7.3 切流恢复
在北京单元的商品应用故障的情况下,可以通过 MSHA 切流功能,将云上入口流量切 0,快速恢复业务。
预期
100% 流量切换到杭州单元后,业务完全恢复,不受北京单元的故障影响。
切流操作
1. 进入 MSHA 控制台,在左侧导航栏选择切流>异地应用双活切流。
2. 在切流页面,对北京单元点击一键切零。
3. 单击执行预检查,在切流检查区域,单击确认,开始切流。
4. 在切流任务页面的当前状态显示切流完成,表示切流已成功。
5. 刷新电商 Demo 首页,多次访问均能正常展示,符合预期。
查看实际流量调用链:流量始终访问到杭州单元,读写北京单元内的数据库。
7.4 数据库故障注入
从上面调用链可以看出,杭州单元内的应用仍然访问的是北京单元的 Redis、MySQL 数据库。我们继续使用 Chaos 故障演练[10]产品对北京单元的 Redis、MySQL 数据库注入故障,制造数据库故障场景。
故障注入成功后,打开电商首页或进行下单始终访问异常,符合预期。
7.5 切换数据库进行恢复
在北京单元的数据库故障的情况下,可以通过 MSHA 数据库切换功能,将应用访问的 Redis/MySQL 的连接切换至杭州单元的数据库(切换过程中会等待数据同步追平,期间会短暂禁写)。
预期
应用连接的数据库切换到杭州后,业务完全恢复,不受北京单元的故障影响。
切流操作
1. 进入 MSHA 控制台,在左侧导航栏选择异地应用双活>数据层配置。
2.在数据保护规则列表中,找到商品、订单、购物车数据库,逐个点击主备切换。
3. 点击主备切换后,会进入预检查页面,确认各检查项状态正常后,点击在确认执行,则进入切换详情页,并自动执行切换流程。
4. 主备切换详情页,可以看到切换进度和切换结果,任务进度 100% 后,表示切换完成。
5. 商品、订单、购物车数据库都主备切换完成后。多次访问电商 Demo 首页或进行下单,发现均已正常,主备切换后业务功能完全恢复,符合预期。
总结
在本篇文章中,我们介绍了 MSHA 多活容灾助力企业进行混合云应用双活容灾建设的实践案例,给出了容灾架构建设实践方法,同时利用 Chaos 故障演练产品注入真实故障,来验证故障场景业务容灾能力是否符合预期。
相关阅读
[1] MSHA 云原生多活容灾解决方案
https://www.aliyun.com/product/aliware/ahas/msha
[2] DNS 解析生效时间 FAQ
https://help.aliyun.com/document_detail/39837.html
[3] 多接入方式构建企业级混合云文档
https://help.aliyun.com/document_detail/181844.html
[4] 使用文档
https://help.aliyun.com/document_detail/184980.html
[5] 使用文档
https://help.aliyun.com/document_detail/328617.html
[6] 使用文档
https://help.aliyun.com/document_detail/295852.html
[7] 使用文档
https://help.aliyun.com/document_detail/369539.html
[8] 使用文档
https://help.aliyun.com/document_detail/184971.html
[9] Chaos 故障演练产品控制台
https://common-buy.aliyun.com/?commodityCode=ahas_001#/buy
[10] Chaos 故障演练
https://common-buy.aliyun.com/?commodityCode=ahas_001#/buy
原文链接:https://developer.aliyun.com/article/858349?utm_content=g_1000319674
本文为阿里云原创内容,未经允许不得转载。
相关推荐
- MYSQL数据同步(mysql数据同步方式)
-
java开发工程师在实际的开发经常会需要实现两台不同机器上的MySQL数据库的数据同步,要解决这个问题不难,无非就是mysql数据库的数据同步问题。但要看你是一次性的数据同步需求,还是定时数据同步,亦...
- SpringBoot+Redis实现点赞收藏功能+定时同步数据库
-
由于点赞收藏都是高频率的操作,如果因此频繁地写入数据库会造成数据库压力比较大,因此采用redis来统计点赞收藏浏览量,之后定时一次性写入数据库中,缓解数据库地压力。一.大体思路设计redis中的储存结...
- 双11订单洪峰:Codis代理层如何扛住Redis集群搞不定的120万QPS?
-
双11订单洪峰下的技术挑战每年的双11购物节,都是对电商平台技术架构的极限考验。当零点钟声敲响,海量用户瞬间涌入,订单量呈指数级增长,系统需要承受每秒数十万甚至上百万次的请求。作为电商系统的核心组件之...
- 基于spring boot + MybatisPlus 商城管理系统的Java开源商城系统
-
前言Mall4j项目致力于为中小企业打造一个完整、易于维护的开源的电商系统,采用现阶段流行技术实现。后台管理系统包含商品管理、订单管理、运费模板、规格管理、会员管理、运营管理、内容管理、统计报表、权限...
- 商品券后价产品设计方案(显示券后价)
-
如何设计一套高效、准确且稳定的券后价计算系统,是电商产品设计中的关键挑战之一。本文详细介绍了商品券后价的产品设计方案,从背景目标、功能设计、系统实现逻辑到异常处理机制等多个方面进行了全面阐述。一、背景...
- 外观(门面)模式-Java实现(java 门面模式)
-
定义外观模式(FacadePattern),也叫门面模式,原始定义是:为了子系统中的一组接口提供统一的接口。定义一个更高级别的接口,使子系统更易于使用。大大降低应用程序的复杂度,提高了程序的可维护性...
- Mall - 用 SpringBoot 实现一个电商系统
-
目前最为主流的Web开发技术,包括SpringBoot、MyBatis、MongoDB、Kibina、Docker、Vue等,都是开发者十分需要掌握的技术。有没有一个全面而又实际的项目,能把这...
- 腾讯云国际站:哪些工具能实现可视化运维?
-
本文由【云老大】TG@yunlaoda360撰写开源工具Grafana:开源的可视化平台,可与Prometheus、Elasticsearch、MySQL等多种数据源集成,将复杂监控数据转化...
- 系统稳定性保障全流程实战:事前、事中、事后 Java 代码详解
-
在互联网架构中,系统稳定性是生命线。本文基于“事前预防、事中管控、事后复盘”三阶段模型,结合Java实战代码,深度解析如何构建高可用系统,让你的服务稳如磐石!一、事前:未雨绸缪,筑牢防线1.发...
- Java面试题:拆分微服务应该注意哪些地方方,如何拆分?
-
在拆分微服务时,需要综合考虑业务、技术和组织等多方面因素,以下是关键注意事项及拆分策略的详细说明:一、拆分注意事项1.业务边界清晰化单一职责原则:每个服务应专注于单一业务能力,例如订单服务仅处理订单...
- 软件性能调优全攻略:从瓶颈定位到工具应用
-
性能调优是软件测试中的重要环节,旨在提高系统的响应时间、吞吐量、并发能力、资源利用率,并降低系统崩溃或卡顿的风险。通常,性能调优涉及发现性能瓶颈、分析问题根因、优化代码和系统配置等步骤,调优之前需要先...
- Docker Compose实战,多容器协同编排的利器,让开发部署更高效!
-
开篇导读你是否有过这样的经历?启动一个项目,数据库、Redis、Web服务得一个个敲dockerrun?想让别人复现你的开发环境,却得发一堆复杂的启动命令?明明都是容器,为什么不能“一键启动”所...
- 如何设计Agent的记忆系统(agent记忆方法)
-
最近看了一张画Agent记忆分类的图我觉得分类分的还可以,但是太浅了,于是就着它的逻辑,仔细得写了一下在不同的记忆层,该如何设计和选型先从流程,作用,实力和持续时间的这4个维度来解释一下这几种记忆:1...
- 不了解业务和技术术语怎么做好产品和项目?
-
基础技术术语术语分类解释API开发技术应用程序接口,不同系统间数据交互的协议(如支付接口、地图接口)。SDK开发工具软件开发工具包,包含API、文档和示例代码,帮助快速接入服务。RESTfulAPI...
- Docker 架构详解与核心概念实战图解:一文读懂容器的前世今生
-
不懂Docker架构,你只是“用容器的人”;理解了它的底层逻辑,才能成为真正的高手!在学习Docker之前,很多同学可能会陷入一个误区:“反正我用dockerrun就能跑起服务,架构这种...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle位图索引 (63)
- oracle批量插入数据 (62)
- oracle事务隔离级别 (53)
- oracle 空为0 (50)
- oracle主从同步 (55)
- oracle 乐观锁 (51)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)