做者 | 远跖、瀚阑
来源|阿里巴巴云原生公众号html
因为外部环境的复杂以及硬件的不可靠,互联网服务的高可用面临着巨大的挑战,因为断网、断电等事故致使的各大互联网公司服务不可用的案例也不在少数。业务不可用,小到带来经济损失影响企业口碑,大到微信、支付宝这些国民级应用,影响国计民生。面对难以免的天灾人祸,容灾架构的建设就成为了数字化企业的迫切诉求。数据库
2020 年 12 月份,阿里云应用高可用产品 AHAS(Application High Availability Service)发布了新的功能模块 AHAS-MSHA,它是在阿⾥巴巴电商业务环境演进出来的多活容灾架构解决⽅案。本篇文章咱们首先介绍容灾领域的几个重要概念,而后将结合一个的电商微服务案例,分享一下如何基于 AHAS 的异地多活能力(AHAS-MSHA)和混沌工程能力(AHAS-Chaos)帮助业务实现容灾架构的高可用实践。微信
容灾(Disaster Tolerance)是指在相隔较远的异地,创建两套或多套功能相同的系统,系统之间能够相互进行健康状态监视和功能切换,当一处系统因意外(如火灾、洪水、地震、人为蓄意破坏等)中止工做时,整个应用系统能够切换到另外一处,使得该系统功能能够继续正常工做。架构
容灾系统主要为了在灾难发生时业务不发生中断,那么容灾能力如何评估和量化呢?这里须要介绍一下业界一般采用的容灾能力评价指标:框架
即数据恢复点目标,以时间为单位,即在灾难发生时,系统和数据必须恢复的时间点要求。RPO 标志系统可以容忍的最大数据丢失量,系统容忍丢失的数据量越小,RPO 的值越小。frontend
即恢复时间目标,以时间为单位,即在灾难发生后,信息系统或业务功能从中止到必须恢复的时间要求。RTO 标志系统可以容忍的服务中止的最长时间,系统服务的紧迫性要求越高,RTO 的值越小。ide
MSHA(Multi-Site High Availability)是一个多活容灾架构解决⽅案(解决方案=技术产品+咨询服务+生态伙伴),能够将业务恢复和故障恢复解耦,支持故障场景下业务的快速恢复,助⼒企业的容灾稳定性建设。微服务
MSHA 采用异地多活的容灾架构,核心思想是 “隔离的冗余”,咱们将各个冗余的逻辑数据中心称为单元,MSHA 作到了业务流量在单元内封闭,单元之间隔离,把故障爆炸半径控制在一个单元内,不只能解决容灾问题,提高业务连续性,而且能实现容量的扩展。大数据
秉承先恢复,再定位的原则,MSHA 提供了容灾切流能力,在数据保护的前提下让业务恢复时间和故障恢复时间解耦合,保障业务连续性。阿里云
业务⾼速发展,受限于单地有限资源,也存在数据库瓶颈等问题。使用 MSHA 能够在其它地域、机房快速扩建业务单元,实现快速水平扩容的目的。
MSHA 提供了从接入层到应用层的层层流量纠错和校验,将不符合流量路由规则的调用从新转发,将故障爆炸半径可控制在一个单元内。
多单元写数据可能形成脏写覆盖的问题,MSHA 提供流量打入错误单元时的禁写保护,以及切流数据同步延时期间的禁写/禁更新保护。
MSHA 可适用于如下典型业务场景的多活容灾架构建设:
读多写少型业务
下面咱们经过一个电商微服务案例,来介绍不一样场景的容灾架构建设案例。
电商业务初期,跟不少互联网企业同样,没有考虑容灾问题,只在单地域进行了部署。
电商业务初期发展迅速,小而美的单地域部署方式也一直没有变化,直到一次商品应用故障的发生,致使电商业务瘫痪,页面长时间没法访问。故障最终得以解决,但故障致使的客户流失和企业口碑影响,对快速发展的业务形成不小的打击,迫使咱们开始考虑高可用能力的建设。
电商业务主要分为导购、购物车、交易等业务场景,首当其冲的就是导购。它是典型的读多写少型业务场景,核心是导购页面的展现(读链路),一般能够接受发布、上架商品服务的暂时不可用(写链路)。结合自身容灾诉求,咱们先定下一个改进的小目标--“异地多读”。
基于 MSHA 将导购业务改造为“异地多读”。
多活改造 & MSHA 接入:
分区维度:使用 userId 来做分流标识。
改造范围:将导购链路相关的入口 WEB 应用 、 商品应用 进行两地域部署。
容灾架构改造完成后,并无结束,还需验证容灾能力是否符合预期。接下来咱们将历史故障进行复现,经过制造真实的故障来验证容灾恢复能力。
业务监控指标:基于 MSHA 流量监控或其余监控能力,肯定业务稳态监控指标,以便在故障发生时判断故障影响面以及在故障恢复后判断业务的实际恢复状况。
演练预期:
导购链路对购物车应用是弱依赖(导购页会展现用户放入购物车的商品数量),弱依赖故障不影响业务。
利用 AHAS-Chaos 故障演练功能,可以方便的进行多种故障场景的演练。
演练前配置的路由规则以下(userId%10000 后根据以下路由范围规则进行匹配):
故障场景下,使用 MSHA 切流功能,验证容灾恢复能力。
后续:故障撤销
通过上述的改造,导购业务已经具有抵御地域级故障的能力。而订单应用大面积故障,成为了压死订单业务的最后一根稻草。因而,下单业务的高可用架构建设,也提上了议程。
下单是典型的流水单据型业务场景,相比导购,是更为复杂的读写结合业务,结合业务场景和业务容灾诉求,咱们选取了适合业务的容灾建设方案--“异地多活”。
基于 MSHA 将订单业务改造为“异地多活”。
注:下单链路强依赖购物车应用,完整的多活容灾建设,后续还应将购物车应用也改造为“异地多活”。
多活改造 & MSHA 接入:
改造范围:下单应用和订单数据库进行两地域部署。
MSHA 接入:将下单链路的应用安装上 Agent,从而无侵入的实现 SpringCloud RPC 跨单元路由功能和数据防脏写功能。
容灾架构改造完成后,接下来咱们将历史故障进行复现,经过制造真实的故障来验证容灾恢复能力。
业务监控指标:基于 MSHA 流量监控或其余监控能力,肯定业务稳态监控指标。
演练预期:下单链路对订单应用是强依赖,强依赖故障影响业务不可用,且故障爆炸半径控制在单元内。
演练前配置的路由规则以下(userId%10000 后根据以下路由范围规则进行匹配):
使用 MSHA 切流功能,验证故障场景下的容灾切换能力。
在本篇文章中,咱们介绍了 AHAS 为业务容灾提供的一大利器:MSHA 多活容灾解决方案,并结合一个电商业务,介绍了读多写少型和流水单据型 2 个典型业务场景下的容灾建设案例,给出容灾架构建设实践方法,同时结合 AHAS-Chaos 故障演练功能模拟一次真实可能发生的故障,验证容灾能力是否符合预期。
公有云 MSHA 已经开始公测,并已提供文中 2 个业务场景的电商业务 Demo 体验(无需开通便可体验),欢迎你们申请体验。
最后想跟你们说的是,容灾建设是一个系统工程,不能一蹴而就也不是一锤子买卖,须要根据业务场景、容灾诉求、技术栈、容灾预算等综合来评估和制定合适的容灾架构建设方案,欢迎你们针对自身的容灾诉求和场景进行咨询和交流。
AHAS-MSHA 多活容灾解决方案官方文档:https://help.aliyun.com/document_detail/181717.html
AHAS-Chaos 故障演练官方文档:https://help.aliyun.com/document_detail/90327.html
电商业务多活实践:https://help.aliyun.com/document_detail/184984.html