作者:中西(github @zhongxig),AppActive 负责人,来自阿里云云原生高可用架构团队,从事容灾架构和故障快恢的研发和开源工作。

1 月 11 日,在上海的云原生实战峰会上,阿里云智能研究员丁宇发布了“应用多活技术白皮书”,同时为了推动业界容灾的发展,建立云原生业务容灾标准,阿里云对外开源“应用多活”中间件:AppActive。

什么是 AppActive

“业务大规模扩展机房资源不可用怎么办?机房挂了怎么办?业务突然奔溃怎么办?台风地震导致断电怎么办?”

2013 年,当时淘宝完成去 O 没多久,双十一的规模较上年进一步飞增。阿里的工程师正面临着上述的这一系列问题,一方面是机房资源非常紧张,容量不足,另一方面是杭州出现罕见的高温天气,机房面临断电的风险。异地多活架构在这个背景下孵化出来,它的载体是集团版本的 UnitRouter&UnitBrain 。

随着淘宝的业务规模演进,异地多活也从近距离同城双机房到远距离异地双活,再到三地四单元、多地多活,沉淀了丰富的机房级应用多活经验。

2019 年,阿里巴巴系统全面上云,异地多活架构也跟着上云的节奏孵化出阿里云云产品 AHAS-MSHA,服务集团和云上客户

2022 年 1 月 11 日,AHAS-MSHA 代码正式开源,命名为 AppActive 。

AppActive 是一个面向业务应用构建云原生高可用多活容灾架构的开源中间件,它的主要价值:

  • 分钟级 RTO。 恢复时间快,阿里内部生产级别恢复时间平均在 30s 以内,外部客户生产系统恢复时间平均在 1 分钟。
  • 资源充分利用。 资源不存在闲置的问题,多机房多资源充分利用,避免资源浪费。
  • 切换成功率高。 依托于成熟的多活技术架构和可视化运维平台,相较于现有容灾架构,切换成功率高,阿里内部年切流数千次的成功率高达 99.9% 以上。
  • 流量精准控制。 应用多活支持流量自顶到底封闭,依托精准引流能力将特定业务流量打入对应机房,企业可基于此优势能力孵化全域灰度、重点流量保障等特性。

为什么开源

通过服务阿里集团近 9 年实战经验及服务云上客户 2 年多的商业化迭代积累,AHAS-MSHA 已经在涵盖阿里的十余家大型企业的容灾场景中落地,使用量在持续增长,代码的稳定性和功能特性也经过充分的检验。

2021 年,国内外多家知名公司、云平台出现较严重服务中断、宕机事件。这也为企业敲响警钟,越来越多的企业把容灾建设提上日程。在解决容灾问题的同时,为了保持对成本的控制、支撑未来的多云架构演进和灾难容灾的确定性,许多企业选择以多活容灾的方式进行尝试。

但是业内对于多活没有统一的认知,对于“多活”这个词不同企业有不同的定义,很多企业往往以为已经实现了“多活”,可当故障来临的时候,才发现当前系统的故障逃逸能力非常弱,业务恢复和故障定位无法解耦,拖累了企业生产,造成了外部舆情、资金损失等问题;另外,有的企业在了解“多活”之后,下意识想要企业内部先投入资源进行技术预演,但由于缺少经验,往往会造成人力物力等资源的重复浪费。随着云原生技术发展,越来越多的客户采用云原生技术进行系统构建。如何在云原生上构建稳定高可用的系统,是一个核心挑战。“多活”的认知偏差会加剧企业在基础设施成本、应用改造成本、运维成本等成本面的投入,但存在效率低下、错用甚至无用或者不用的问题,从而享受不到“多活”带来的稳定性红利。因此“多活”需要一个相对统一的标准与认知,加深使用者对它的理解和使用,从而提高业务系统的稳定性。

在当前云原生发展的现状和市场认知下,AppActive 的项目负责人中西表示,应用多活的开源和解读,可以初步定义“多活”的标准和实现,帮助开发者形成统一的“多活”认知。在企业构建多活架构时,基于应用多活共享已有的成熟经验,避免多余的资源浪费。同时,不同的企业具备不同的业务场景和优势,反向推动应用多活进一步完善和演进成熟的多活形态及能力。希望依靠社区的力量,让“多活”成为一项事实意义的普惠技术,而不是望而却步的部分人可用技术,帮助更多的企业和个人构建生产级别的高可用架构。

开源的内容

AppActive 标准介绍

在应用多活的标准定义里有 LRA(同城多活)、UDA(异地多活)、HCA(混合云多活)和 BFA(业务流量多活),详细见《应用多活技术白皮书》。在 AppActive v0.1 版本中,我们优先实现 BFA 和 UDA 的基础能力,在后续版本中完善 BFA 和 UDA 的同时,新增 LRA、HCA 能力。本文重点介绍 BFA、UDA。

1. 业务流量多活(BFABusiness Flow Active)

BFA,指的是应用多活的最终呈现是业务,多活容灾系统具备按照业务特征进行生产流量的精细化调配。

AppActive 在 BFA 指标中,支持流量自动纠偏,强路由到指定机房自闭环,属于流量的精细化调配。

在非法流量打入机房时,机房的各层插件均会依托于统一的调度规则进行处理:

  • 接入层识别错误流量,自动纠错到正确的机房。
  • 服务层识别错误流量,自动纠错到正确的机房。
  • 数据层识别错误流量,为保证数据质量,抛出异常,写入失败。

2. 异地多活(UDA,Ultra Distance Active)

UDA,指的是在超远距离(机房间距超过 300 公里)时,业务系统仍具备较好的访问性能。进入容灾态时,RTO、RPO 在分钟级。

AppActive 在 UDA 指标中,支持访问性能良好。

在接入层支持流量解析,将请求流量进行解析,将流量打入机房的应用机器。基于 应用侧 Servlet 插件、Dubbo 插件、MySQL 插件的能力,业务流量请求在单一机房里面自闭环,最终读写到本机房的数据库。

在超远距离场景下,由于流量封闭在机房内部,因此业务系统仍旧具备较好的访问性能。

进入容灾态的 RPO 由开源数据同步组件或商业化同步工具进行保障,RTO 在 AppActive 0.1 版本中仅提供初级的流量切换能力,后续版本会演进到生产级别 RTO 保障工具。

AppActive 模块介绍

AppActive 属于应用多活的一种定义和实现,它有数据平面和管控平面的整体实现。数据平面分为 4 部分,均支持在不变更原有企业使用技术组件基础上,以插件的形式增加能力:

  • 接入网关。接入网关作为业务流量打入机房的第一跳,负责应用多活入口流量的识别和分发,具备机房路由和应用路由两个核心能力。
  • 服务层。业务流量在机房内部和跨机房的同步调用方式,一般有 Consumer、Provider、注册中心等角色,具备流量路由、流量保护、故障隔离三个核心能力,避免调用错误导致的数据脏写,加速切流期间的业务恢复。
  • 消息层。业务流量在机房内部和跨机房的异步调用方式,基于消息削峰填谷,一般有 Producer、Consumer、Broker 等角色,具备流量路由、流量保护、故障隔离三个核心能力,避免消息错投导致的数据脏写,保护切流期间消息不丢。
  • 数据层:涵盖业务应用数据读写、数据存储和数据同步,其具备流量路由、数据一致性保护、数据同步三个核心能力。

管控平面核心涵盖多活容灾规则的日常运维和灾难场景的流量切换。

当前 AppActive 处于 v0.1 版本,开源:

  • 上述的数据平面所有层的定义基础实现。
  • 接入层网关的 Nginx 插件实现。
  • 服务层 Dubbo2.x 插件实现。
  • 数据层开源 MySQL 插件实现。
  • 管控平面流量切换的基础能力。

开发者可基于 v0.1 的能力,进行 应用多活的基本功能运行和验证。

AppActive 后续规划

  1. 丰富接入层、服务层、数据层插件,支持更多技术组件到 AppActive 支持的列表中。
  2. 增加消息层的插件实现,支持消息应用多活能力。
  3. 增加其他层在应用多活的标准和实现。
  4. 支持 Web 白屏化,follow 应用多活 UDA 的标准,提升 RTO。
  5. 遵循应用多活 HCA 标准支持混合云多活形态。
  6. 遵循应用多活 LRA 标准支持同城多活形态

起点

“异地多活”和“单元化”源于阿里,也受到了业界的认可。阿里也一直希望应用多活的产品生态可以做到标准和开放,对业界做出贡献。

基于应用多活的标准技术,业务应用在不同的云厂商之间,不同的基础设施之间,不同的芯片之间都可以实现互通互联。业务应用在资源充分利用的同时,达到分钟级甚至秒级的 RTO 指标,真正意义的做到不惧故障。

今天,AppActive 开源的第一个版本只是应用多活领域的一个起点,欢迎大家参与进来一起共建应用多活生态。想要了解更多 AppActive,钉钉搜索群号:34222602,加入 AppActive 开源讨论群参与讨论吧!

点击​此处​,立即前往下载《应用多活技术白皮书》。

03-05 22:49