MSHA x Chaos 容灾高可用实践
mhr18 2024-11-28 08:53 19 浏览 0 评论
前言
由于外部环境的复杂以及硬件的不可靠,互联网服务的高可用面临着巨大的挑战,由于断网、断电等事故导致的各大互联网公司服务不可用的案例也不在少数。业务不可用,小到带来经济损失影响企业口碑,大到微信、支付宝这些国民级应用,影响国计民生。面对难以避免的天灾人祸,容灾架构的建设就成为了数字化企业的迫切诉求。
2020 年 12 月份,阿里云应用高可用产品 AHAS(Application High Availability Service)发布了新的功能模块 AHAS-MSHA,它是在阿?巴巴电商业务环境演进出来的多活容灾架构解决?案。本篇文章我们首先介绍容灾领域的几个重要概念,然后将结合一个的电商微服务案例,分享一下如何基于 AHAS 的异地多活能力(AHAS-MSHA)和混沌工程能力(AHAS-Chaos)帮助业务实现容灾架构的高可用实践。
容灾与评价指标
1. 什么是容灾?
容灾(Disaster Tolerance)是指在相隔较远的异地,建立两套或多套功能相同的系统,系统之间可以相互进行健康状态监视和功能切换,当一处系统因意外(如火灾、洪水、地震、人为蓄意破坏等)停止工作时,整个应用系统可以切换到另一处,使得该系统功能可以继续正常工作。
2. 容灾能力如何评估?
容灾系统主要为了在灾难发生时业务不发生中断,那么容灾能力如何评估和量化呢?这里需要介绍一下业界通常采用的容灾能力评价指标:
- RPO(Recovery Point Objective)
即数据恢复点目标,以时间为单位,即在灾难发生时,系统和数据必须恢复的时间点要求。RPO 标志系统能够容忍的最大数据丢失量,系统容忍丢失的数据量越小,RPO 的值越小。
- RTO(Recovery Time Objective)
即恢复时间目标,以时间为单位,即在灾难发生后,信息系统或业务功能从停止到必须恢复的时间要求。RTO 标志系统能够容忍的服务停止的最长时间,系统服务的紧迫性要求越高,RTO 的值越小。
AHAS-MSHA
1. 介绍
MSHA(Multi-Site High Availability)是一个多活容灾架构解决?案(解决方案=技术产品+咨询服务+生态伙伴),可以将业务恢复和故障恢复解耦,支持故障场景下业务的快速恢复,助?企业的容灾稳定性建设。
1)产品架构
MSHA 采用异地多活的容灾架构,核心思想是 “隔离的冗余”,我们将各个冗余的逻辑数据中心称为单元,MSHA 做到了业务流量在单元内封闭,单元之间隔离,把故障爆炸半径控制在一个单元内,不仅能解决容灾问题,提升业务连续性,并且能实现容量的扩展。
2)主流容灾架构对比
2. 功能特性
- 故障快速恢复
秉承先恢复,再定位的原则,MSHA 提供了容灾切流能力,在数据保护的前提下让业务恢复时间和故障恢复时间解耦合,保障业务连续性。
- 容量异地扩展
业务?速发展,受限于单地有限资源,也存在数据库瓶颈等问题。使用 MSHA 可以在其它地域、机房快速扩建业务单元,实现快速水平扩容的目的。
- 流量分配与纠错
MSHA 提供了从接入层到应用层的层层流量纠错和校验,将不符合流量路由规则的调用重新转发,将故障爆炸半径可控制在一个单元内。
- 数据防脏写
多单元写数据可能造成脏写覆盖的问题,MSHA 提供流量打入错误单元时的禁写保护,以及切流数据同步延时期间的禁写/禁更新保护。
3. 应用场景
MSHA 可适用于以下典型业务场景的多活容灾架构建设:
- 读多写少型业务业务场景:典型的业务场景就是资讯、导购类服务(如商品浏览、新闻资讯)。数据特点:读多写少型业务,核心是读业务,能够接受写业务的暂时不可用。
- 流水单据型业务业务场景:典型的业务场景就是电商交易、账单流水类服务(如订单、通话记录等)。数据特点:数据可以按一定的维度进行分片且能接受数据的最终一致。
业务容灾实践
下面我们通过一个电商微服务案例,来介绍不同场景的容灾架构建设案例。
1. 电商业务背景
1)业务应用
- frontend,入口 WEB 应用,负责和用户交互
- cartservice,购物车应用。记录用户的购物车数据,使用自建的 Redis
- productservice,商品应用。提供商品、库存服务,使用 RDS MySQL
- checkoutservice,下单应用。将购物车中的商品生成购买订单,使用 RDS MySQL
2)技术栈
- SpringBoot
- RPC 框架:SpringCloud,注册中心使用自建的 Eureka
3)电商应用架构 1.0
电商业务初期,跟很多互联网企业一样,没有考虑容灾问题,只在单地域进行了部署。
2. 案例一:读多写少型业务容灾案例
1)一次故障的发生
电商业务初期发展迅速,小而美的单地域部署方式也一直没有变化,直到一次商品应用故障的发生,导致电商业务瘫痪,页面长时间无法访问。故障最终得以解决,但故障导致的客户流失和企业口碑影响,对快速发展的业务造成不小的打击,迫使我们开始考虑高可用能力的建设。
电商业务主要分为导购、购物车、交易等业务场景,首当其冲的就是导购。它是典型的读多写少型业务场景,核心是导购页面的展示(读链路),通常可以接受发布、上架商品服务的暂时不可用(写链路)。结合自身容灾诉求,我们先定下一个改进的小目标--“异地多读”。
2)异地多读容灾架构改造
基于 MSHA 将导购业务改造为“异地多读”。
多活改造 & MSHA 接入:
- 分区维度:使用 userId 来作分流标识。
- 改造范围:将导购链路相关的入口 WEB 应用 、 商品应用 进行两地域部署。
- 管控配置:进入 MSHA 控制台进行各层多活资源的配置。
3)故障复现
容灾架构改造完成后,并没有结束,还需验证容灾能力是否符合预期。接下来我们将历史故障进行复现,通过制造真实的故障来验证容灾恢复能力。
【演练准备】
业务监控指标:基于 MSHA 流量监控或其他监控能力,确定业务稳态监控指标,以便在故障发生时判断故障影响面以及在故障恢复后判断业务的实际恢复情况。
演练预期:
- 导购链路对购物车应用是弱依赖(导购页会展示用户放入购物车的商品数量),弱依赖故障不影响业务。
- 导购链路对商品应用是强依赖,强依赖故障将导致业务不可用,故障的爆炸半径应该控制在单元内。
【故障演练】
利用 AHAS-Chaos 故障演练功能,能够方便的进行多种故障场景的演练。
第一阶段:弱依赖故障演练
- 故障注入:对购物车应用进行故障注入预期:导购业务不受影响结果:导购页能正常打开,符合预期
第二阶段:强依赖故障演练
演练前配置的路由规则如下(userId%10000 后根据如下路由范围规则进行匹配):
- 故障注入:对北京单元的商品应用进行故障注入预期:userId=6000 的用户路由到北京单元,会受故障的影响结果:导购页访问异常,符合预期
- 爆炸半径验证:验证保障半径是否控制在故障单元内预期:userId=50 的用户路由到杭州单元,不受北京单元故障的影响结果:导购页访问正常,符合预期
4)切流恢复
故障场景下,使用 MSHA 切流功能,验证容灾恢复能力。
- 容灾切换验证:将 userId=6000 切流到杭州单元预期:切流后该用户将路由到杭州单元,不受北京单元故障的影响。结果:导购页访问正常(导购请求的实际调用链参见下面动图),容灾恢复能力符合预期。
后续:故障撤销
- 故障注入终止
- 演练结果反馈,记录演练识别到的风险问题
- 流量回切
- 查看稳态业务指标是否恢复
3. 案例二:流水单据型业务容灾案例
1)新的故障
经过上述的改造,导购业务已经具备抵御地域级故障的能力。而订单应用大面积故障,成为了压死订单业务的最后一根稻草。于是,下单业务的高可用架构建设,也提上了议程。
下单是典型的流水单据型业务场景,相比导购,是更为复杂的读写结合业务,结合业务场景和业务容灾诉求,我们选取了适合业务的容灾建设方案--“异地多活”。
2)异地多活容灾架构改造
基于 MSHA 将订单业务改造为“异地多活”。
注:下单链路强依赖购物车应用,完整的多活容灾建设,后续还应将购物车应用也改造为“异地多活”。
多活改造 & MSHA 接入:
- 改造范围:下单应用和订单数据库进行两地域部署。
- MSHA 接入:将下单链路的应用安装上 Agent,从而无侵入的实现 SpringCloud RPC 跨单元路由功能和数据防脏写功能。
- 管控配置:
3)故障复现
容灾架构改造完成后,接下来我们将历史故障进行复现,通过制造真实的故障来验证容灾恢复能力。
【演练准备】
业务监控指标:基于 MSHA 流量监控或其他监控能力,确定业务稳态监控指标。
演练预期:下单链路对订单应用是强依赖,强依赖故障影响业务不可用,且故障爆炸半径控制在单元内。
【故障演练】
演练前配置的路由规则如下(userId%10000 后根据如下路由范围规则进行匹配):
- 故障注入:对北京单元的订单应用进行故障注入预期:userId=6000 的用户路由到北京单元,会受到故障影响结果:下单异常,符合预期
- 爆炸半径验证:验证保障半径是否控制在故障单元内预期:userId=50的用户路由到杭州单元,不受北京单元故障的影响结果:下单正常,符合预期
4)切流恢复
使用 MSHA 切流功能,验证故障场景下的容灾切换能力。
- 容灾切换验证:将 userId=6000 切流到杭州单元预期:切流后该用户将路由到杭州单元,不受北京单元故障的影响结果:下单正常(下单请求的实际调用链参见下面动图),容灾恢复能力符合预期。
总结
在本篇文章中,我们介绍了 AHAS 为业务容灾提供的一大利器:MSHA 多活容灾解决方案,并结合一个电商业务,介绍了读多写少型和流水单据型 2 个典型业务场景下的容灾建设案例,给出容灾架构建设实践方法,同时结合 AHAS-Chaos 故障演练功能模拟一次真实可能发生的故障,验证容灾能力是否符合预期。
公有云 MSHA 已经开始公测,并已提供文中 2 个业务场景的电商业务 Demo 体验(无需开通即可体验),欢迎大家申请体验。
最后想跟大家说的是,容灾建设是一个系统工程,不能一蹴而就也不是一锤子买卖,需要根据业务场景、容灾诉求、技术栈、容灾预算等综合来评估和制定合适的容灾架构建设方案,欢迎大家针对自身的容灾诉求和场景进行咨询和交流。
作者:远跖、瀚阑
本文为阿里云原创内容,未经允许不得转载。
- 上一篇:2023年最新Java学习路线
- 下一篇:京东商城交易系统的演进
相关推荐
- 【推荐】一个开源免费、AI 驱动的智能数据管理系统,支持多数据库
-
如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!.前言在当今数据驱动的时代,高效、智能地管理数据已成为企业和个人不可或缺的能力。为了满足这一需求,我们推出了这款开...
- Pure Storage推出统一数据管理云平台及新闪存阵列
-
PureStorage公司今日推出企业数据云(EnterpriseDataCloud),称其为组织在混合环境中存储、管理和使用数据方式的全面架构升级。该公司表示,EDC使组织能够在本地、云端和混...
- 对Java学习的10条建议(对java课程的建议)
-
不少Java的初学者一开始都是信心满满准备迎接挑战,但是经过一段时间的学习之后,多少都会碰到各种挫败,以下北风网就总结一些对于初学者非常有用的建议,希望能够给他们解决现实中的问题。Java编程的准备:...
- SQLShift 重大更新:Oracle→PostgreSQL 存储过程转换功能上线!
-
官网:https://sqlshift.cn/6月,SQLShift迎来重大版本更新!作为国内首个支持Oracle->OceanBase存储过程智能转换的工具,SQLShift在过去一...
- JDK21有没有什么稳定、简单又强势的特性?
-
佳未阿里云开发者2025年03月05日08:30浙江阿里妹导读这篇文章主要介绍了Java虚拟线程的发展及其在AJDK中的实现和优化。阅前声明:本文介绍的内容基于AJDK21.0.5[1]以及以上...
- 「松勤软件测试」网站总出现404 bug?总结8个原因,不信解决不了
-
在进行网站测试的时候,有没有碰到过网站崩溃,打不开,出现404错误等各种现象,如果你碰到了,那么恭喜你,你的网站出问题了,是什么原因导致网站出问题呢,根据松勤软件测试的总结如下:01数据库中的表空间不...
- Java面试题及答案最全总结(2025版)
-
大家好,我是Java面试陪考员最近很多小伙伴在忙着找工作,给大家整理了一份非常全面的Java面试题及答案。涉及的内容非常全面,包含:Spring、MySQL、JVM、Redis、Linux、Sprin...
- 数据库日常运维工作内容(数据库日常运维 工作内容)
-
#数据库日常运维工作包括哪些内容?#数据库日常运维工作是一个涵盖多个层面的综合性任务,以下是详细的分类和内容说明:一、数据库运维核心工作监控与告警性能监控:实时监控CPU、内存、I/O、连接数、锁等待...
- 分布式之系统底层原理(上)(底层分布式技术)
-
作者:allanpan,腾讯IEG高级后台工程师导言分布式事务是分布式系统必不可少的组成部分,基本上只要实现一个分布式系统就逃不开对分布式事务的支持。本文从分布式事务这个概念切入,尝试对分布式事务...
- oracle 死锁了怎么办?kill 进程 直接上干货
-
1、查看死锁是否存在selectusername,lockwait,status,machine,programfromv$sessionwheresidin(selectsession...
- SpringBoot 各种分页查询方式详解(全网最全)
-
一、分页查询基础概念与原理1.1什么是分页查询分页查询是指将大量数据分割成多个小块(页)进行展示的技术,它是现代Web应用中必不可少的功能。想象一下你去图书馆找书,如果所有书都堆在一张桌子上,你很难...
- 《战场兄弟》全事件攻略 一般事件合同事件红装及隐藏职业攻略
-
《战场兄弟》全事件攻略,一般事件合同事件红装及隐藏职业攻略。《战场兄弟》事件奖励,事件条件。《战场兄弟》是OverhypeStudios制作发行的一款由xcom和桌游为灵感来源,以中世纪、低魔奇幻为...
- LoadRunner(loadrunner录制不到脚本)
-
一、核心组件与工作流程LoadRunner性能测试工具-并发测试-正版软件下载-使用教程-价格-官方代理商的架构围绕三大核心组件构建,形成完整测试闭环:VirtualUserGenerator(...
- Redis数据类型介绍(redis 数据类型)
-
介绍Redis支持五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)及Zset(sortedset:有序集合)。1、字符串类型概述1.1、数据类型Redis支持...
- RMAN备份监控及优化总结(rman备份原理)
-
今天主要介绍一下如何对RMAN备份监控及优化,这里就不讲rman备份的一些原理了,仅供参考。一、监控RMAN备份1、确定备份源与备份设备的最大速度从磁盘读的速度和磁带写的带度、备份的速度不可能超出这两...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- 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)