同城多活架构实践

简介: 多活容灾MSHA(Multi-Site High Availability)是一个云原生的多活容灾架构解决⽅案。本文介绍同城多活容灾架构的建设原则和难点,并通过一个电商业务案例,介绍如何基于MSHA来快速、无侵入的帮助业务实现同城多活容灾架构。

多活容灾MSHA(Multi-Site High Availability)是一个云原生的多活容灾架构解决⽅案。本文介绍同城多活容灾架构的建设原则和难点,并通过一个电商业务案例,介绍如何基于MSHA来快速、无侵入的帮助业务实现同城多活容灾架构。

同城多活架构介绍

同城多活(DB主备)的架构图如下:

同城多活架构1.png

同城多活架构包含以下主要特征:

  • 应用可用区级多活。
  • 数据库跨可用区主备。
  • RPO:分钟级(AZ级故障)。
  • RTO:分钟级(AZ级故障)。

应用场景:

  • 针对可用区级的故障、灾难,期望业务具备分钟级恢复能力的场景。
  • 应用多可用区部署的情况下,期望RPC调用可用区内封闭,以避免跨可用区网络请求带来的RT增长。

建设原则:

  • 保证冗余。
  • 保持对等。
  • 保持封闭。

建设难点:

  • 流量管理难度高。
    • 当发生可用区级故障、灾难时:
      • 需具备HTTP、HTTPS流量的可用区级动态调配分流能力。
      • 需具备对故障AZ的RPC、MQ、任务调度流量切零能力。
    • 如果业务RT敏感,需具备可用区内流量封闭的能力以避免跨可用区的网络传输带来的RT增长。
  • 统一管控难度大。
    • 需对接支持众多的云产品和开源框架。
    • 切零规则、流量可用区内封闭规则、环境隔离规则、甚至异地多活路由规则共存的情况下,需保证规则的优先级、兼容性和冲突解决策略。
  • 业务无侵入难度大:要实现HTTP、RPC、MQ、任务调度等流量管控能力,通常需要业务应用配合改造,对业务代码侵入大。

业务背景信息

电商业务.png

本示例的电商业务包含以下应用:

  • frontend:入口Web应用,负责和用户交互。
  • cartservice:购物车应用。记录用户的购物车数据,使用自建的Redis。
  • productservice:商品应用。提供商品、库存服务,使用RDS MySQL。

技术栈:

  • SpringBoot。
  • RPC框架:SpringCloud,注册中心使用自建的Eureka。

案例背景:一次故障的发生

本示例的电商业务已自行进行了同城容灾能力建设,在杭州的多个可用区进行应用的对等部署,并自行实现了可用区级粒度的入口流量控制。但因为一次线上可用区级故障,才发现将故障可用区的HTTP流量切换到其他可用区后,下游的RPC、MQ调用仍然有概率访问到故障可用区内的机器,业务仍然无法使用,导致电商页面长时间无法访问,甚至电商业务瘫痪。

虽然故障最终得以解决,但故障导致的客户流失和企业口碑影响,对快速发展的业务造成不小的打击,迫使企业开始重视同城多活容灾能力的建设,以及定期做故障演练确保故障恢复能力的有效性。

同城多活架构改造

基于MSHA多活容灾解决方案,您可以快速地对业务进行同城多活容灾架构建设。

多活改造和MSHA接入包括以下方面:

  1. 开通并配置MSHA需要启用的多活模块。具体操作,请参见开通并配置MSHA
  2. 创建同城多活的命名空间,选择容灾架构类型为同城多活,将应用部署所在的2个可用区定义为2个单元格。具体操作,请参见新建命名空间
  3. 安装MSHA探针。具体操作,请参见为Java应用手动安装探针
  4. 配置接入层MSFE。具体操作,请参见配置MSFE
    改造后的应用架构如下图所示: 同城多活架构改造后.png

复现故障

基于MSHA完成同城多活架构建设后,还需验证容灾能力是否符合预期。接下来将历史故障进行复现,通过制造真实的故障来验证容灾恢复能力。

  1. 演练准备。
    1. 登录AHAS控制台
    2. 在控制台左侧导航栏单击多活容灾
    3. 在左侧导航栏单击监控大盘,在顶部菜单栏,选择命名空间官方示例命名空间
    4. 同城多活区域,查看业务监控指标。
      说明 基于MSHA流量监控或其他监控能力,确定业务稳态的监控指标,以便在故障发生时判断故障影响面以及在故障恢复后判断业务的实际恢复情况。
      监控大盘.png

      演练预期:电商首页展示的查询链路对商品应用是强依赖,强依赖故障将导致业务不可用,且故障的爆炸半径应该控制在单元格内。

    5. 创建故障演练。

      创建杭州单元格B下的商品应用故障演练(例如网络丢包)。具体操作,请参见创建演练

  2. 故障注入。
    1. 在多活容灾的监控大盘页面同城多活区域,查看故障演练前配置的路由规则。

      本示例中杭州地域的各个单元格流量比例为50%。

      路由规则1.png

      示例的MSHA商城商品应用链路如下图所示,UserID为1000的用户路由到单元格B。

      查看链路1.png
    2. 对杭州域单元格B下的商品应用注入故障。
      1. AHAS控制台的左侧导航栏选择故障演练 > 我的空间
      2. 我的空间单击演练准备中创建的演练,然后单击演练
      3. 开始执行演练对话框中,单击确认故障注入2.png

        若故障注入成功,打开电商首页,有概率出现访问异常,符合预期。

        访问失败.png

切流恢复

接下来将验证故障场景下的容灾恢复能力。在杭州单元格B的商品应用发生故障的情况下,可使用MSHA切流功能将流量全部切换到另外的单元格,进行快速业务恢复(这里区别于传统的思路,不是去排查、处理和修复故障,而是立即使用切流进行恢复,将业务恢复和故障恢复解耦)。

容灾切换预期:将100%的流量比例都切换到单元格I,切流后业务完全恢复,不受单元格B的故障影响。

  1. 登录AHAS控制台
  2. 在控制台左侧导航栏中选择多活容灾
  3. 在左侧导航栏选择基础配置 > 命名空间,在顶部菜单栏选择官方示例命名空间
  4. 在多活容灾的左侧导航栏选择切流 > 同城多活切流
  5. 同城多活切流页面,单击切流
  6. 切流详情页面的规则调整区域,选择切流方式比例切流,从单元下拉列表中选择杭州中心单元,单击杭州中心单元-单元格B的一键切零
    同城切流.png
  7. 单击确定。在切流检查区域检查完成后,单击切流
  8. 切流任务页面,查看工单状态切流完成。表示切流已成功。
    切流完成.png
    验证结果
    1. 刷新MSHA商城首页,多次访问均能正常展示,符合预期。
    2. 通过查看实际调用链路,首页的流量始终访问到杭州单元格I中,不受单元格B故障的影响,符合预期。查看链路2.png

功能演示

故障注入和切流恢复的功能演示如下。

后续步骤

您还需要进行以下操作:

  • 终止注入故障。具体操作,请参见停止演练
  • 反馈演练结果,记录演练识别到的风险问题。具体操作,请参见反馈演练结果
  • 回切流量,将单元格B和单元格I的流量比例,通过再次切流恢复到各50%(演练前的状态)。具体操作,请参见同城多活切流
  • 在控制台的监控大盘,查看业务的稳态指标已恢复。
相关文章
|
23天前
|
运维 持续交付 云计算
深入解析云计算中的微服务架构:原理、优势与实践
深入解析云计算中的微服务架构:原理、优势与实践
56 1
|
3天前
|
弹性计算 Java 关系型数据库
Web应用上云经典架构实践教学
Web应用上云经典架构实践教学
Web应用上云经典架构实践教学
|
22天前
|
弹性计算 持续交付 API
构建高效后端服务:微服务架构的深度解析与实践
在当今快速发展的软件行业中,构建高效、可扩展且易于维护的后端服务是每个技术团队的追求。本文将深入探讨微服务架构的核心概念、设计原则及其在实际项目中的应用,通过具体案例分析,展示如何利用微服务架构解决传统单体应用面临的挑战,提升系统的灵活性和响应速度。我们将从微服务的拆分策略、通信机制、服务发现、配置管理、以及持续集成/持续部署(CI/CD)等方面进行全面剖析,旨在为读者提供一套实用的微服务实施指南。
|
18天前
|
运维 监控 Java
后端开发中的微服务架构实践与挑战####
在数字化转型加速的今天,微服务架构凭借其高度的灵活性、可扩展性和可维护性,成为众多企业后端系统构建的首选方案。本文深入探讨了微服务架构的核心概念、实施步骤、关键技术考量以及面临的主要挑战,旨在为开发者提供一份实用的实践指南。通过案例分析,揭示微服务在实际项目中的应用效果,并针对常见问题提出解决策略,帮助读者更好地理解和应对微服务架构带来的复杂性与机遇。 ####
|
22天前
|
NoSQL Java 数据处理
基于Redis海量数据场景分布式ID架构实践
【11月更文挑战第30天】在现代分布式系统中,生成全局唯一的ID是一个常见且重要的需求。在微服务架构中,各个服务可能需要生成唯一标识符,如用户ID、订单ID等。传统的自增ID已经无法满足在集群环境下保持唯一性的要求,而分布式ID解决方案能够确保即使在多个实例间也能生成全局唯一的标识符。本文将深入探讨如何利用Redis实现分布式ID生成,并通过Java语言展示多个示例,同时分析每个实践方案的优缺点。
39 8
|
18天前
|
算法 NoSQL Java
微服务架构下的接口限流策略与实践#### 一、
本文旨在探讨微服务架构下,面对高并发请求时如何有效实施接口限流策略,以保障系统稳定性和服务质量。不同于传统的摘要概述,本文将从实际应用场景出发,深入剖析几种主流的限流算法(如令牌桶、漏桶及固定窗口计数器等),通过对比分析它们的优缺点,并结合具体案例,展示如何在Spring Cloud Gateway中集成自定义限流方案,实现动态限流规则调整,为读者提供一套可落地的实践指南。 #### 二、
42 3
|
21天前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
64 5
|
17天前
|
消息中间件 运维 安全
后端开发中的微服务架构实践与挑战####
在数字化转型的浪潮中,微服务架构凭借其高度的灵活性和可扩展性,成为众多企业重构后端系统的首选方案。本文将深入探讨微服务的核心概念、设计原则、关键技术选型及在实际项目实施过程中面临的挑战与解决方案,旨在为开发者提供一套实用的微服务架构落地指南。我们将从理论框架出发,逐步深入至技术细节,最终通过案例分析,揭示如何在复杂业务场景下有效应用微服务,提升系统的整体性能与稳定性。 ####
31 1
|
18天前
|
监控 安全 持续交付
构建高效微服务架构:策略与实践####
在数字化转型的浪潮中,微服务架构凭借其高度解耦、灵活扩展和易于维护的特点,成为现代企业应用开发的首选。本文深入探讨了构建高效微服务架构的关键策略与实战经验,从服务拆分的艺术到通信机制的选择,再到容器化部署与持续集成/持续部署(CI/CD)的实践,旨在为开发者提供一套全面的微服务设计与实现指南。通过具体案例分析,揭示如何避免常见陷阱,优化系统性能,确保系统的高可用性与可扩展性,助力企业在复杂多变的市场环境中保持竞争力。 ####
35 2
|
22天前
|
监控 Serverless 云计算
探索Serverless架构:开发实践与优化策略
本文深入探讨了Serverless架构的核心概念、开发实践及优化策略。Serverless让开发者无需管理服务器即可运行代码,具有成本效益、高可扩展性和提升开发效率等优势。文章还详细介绍了函数设计、安全性、监控及性能和成本优化的最佳实践。
下一篇
DataWorks