简介: 大多数业务应用只要做到同城双活,就可以避免掉大多数数据中心不可用故障。本实践就是帮助大家高效、低成本地实现自己的业务应用具备同城双活容灾能力。

前言

上云目前已经是绝大数企业首选的IT基础设施建设方案,但是云上仍然存在一些不确定因素(机房硬件故障、网络故障、断网/断电、人为操作失误),导致各大云厂商每年在不同的数据中心都会发生一些故障,所以建设具备容灾能力的业务应用是必需的。公共云上容灾解决方案涵盖同城双活、跨Region容灾和异地多活等容灾场景,对公共云上大多数中长尾客户来说,更需要的是一种对应用侵入性小甚至透明,但又能保证高可用的容灾方案,同城双活无疑是首选的容灾方案,大多数业务应用只要做到同城双活,就可以避免掉大多数数据中心不可用故障。

本实践就是帮助大家高效、低成本地实现自己的业务应用具备同城双活容灾能力。通过这篇文章可以基于EDAS高效的实现同城双活容灾,在实现这些容灾场景的同时需要其他的阿里产品配合,也会一并介绍对应的解决方案,可以参考下面架构图:

鉴于目前需要做容灾的主流架构都已经拆分为微服务架构,而且微服务架构本身也是一种具备更强容灾高可用能力的架构。微服务架构一般由网关(统一接入层)、RPC框架(Dubbo,Spring Cloud)、消息(MQ)、分布式数据库、缓存等核心软件构成,通过EDAS可以高效地实现入口流量切流、RPC路由容灾、多可用区部署等能力,参考下图:

方案主要产品介绍

EDAS

企业级分布式应用服务 EDAS(Enterprise Distributed Application Service)是应用全生命周期管理和监控的一站式 PaaS 平台,支持部署于Kubernetes/ECS,无侵入支持Java/Go/Python/PHP/.NetCore 等多语言应用的发布运行和服务治理,Java 支持 Spring Cloud、Apache Dubbo 近五年所有版本,多语言应用一键开启 Service Mesh。

云解析DNS

云解析 DNS(Domain Name System,简称DNS) 一种安全、快速、稳定、可靠的权威DNS解析管理服务。 云解析DNS为企业和开发者将易于管理识别的域名转换为计算机用于互连通信的数字IP地址,从而将用户的访问路由到相应的网站或应用服务器。

负载均衡 SLB

负载均衡SLB(Server Load Balancer)是一种对流量进行按需分发的服务,通过将流量分发到不同的后端服务来扩展应用系统的服务吞吐能力,并且可以消除系统中的单点故障,提升应用系统的可用性。

云数据库 RDS

阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务。基于阿里云分布式文件系统和SSD盘高性能存储,RDS支持MySQL、SQL Server、PostgreSQL等引擎,并且提供了容灾、备份、恢复、监控、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。

同城容灾各层解决方案

应用的多可用区部署

利用EDAS部署应用,可以快速实现将应用节点部署到不同可用区。下面分别从ECS 和K8S两种托管资源方式进行介绍。

ECS集群部署

将不同可用区的ECS导入到EDAS,放到同一个集群中,在应用列表中选择创建应用:

点击下一步选择倒入集群中的不同可用区的ECS节点,完成应用的创建, 既可以完成应用不同可用区节点部署的能力。

K8s集群部署

将创建好的K8s集群(node 多可用区)导入到EDAS中, 创建应用的时候,在应用高级设置,选择多可用区部署,完成应用的创建, 即可以完成应用不同可用区节点部署的能力。

流量接入层高可用

EDAS部署的应用可以直接挂载多个SLB满足容灾的需求,完全不依赖SLB自身的容灾机制(SLB切换逻辑只发生在只有当主可用区整体不可用时,如机房整体断电、机房出口光缆中断等,负载均衡才会切换到备可用区),做到用户可控制,在一个地域内的多个可用区或多个地域内部署负载均衡实例和EDAS 应用节,然后使用云解析DNS对访问进行调度:

点击刚才第一步多可用区部署的应用列表,进入具体的应用总览菜单页面,通过访问方式给入口应用(网关)配置多个SLB。

通过使用全局流量管理构建灵活的DNS解析方案,将上述创建的SLB添加到全局流量地址池中,基于健康检查结果,配置DNS容灾流量切换方案,可以做到在一个可用区不可用时,自动解析到另外一个可用的可用区SLB,做到智能化的接入层流量容灾能力处理。

RPC层面高可用

EDAS支持多种微服务RPC框架,比如Dubbo,Spring Cloud,当用户使用如上RPC框架的时候,当部署的多可用区应用发生可用区不可用的时候,可以利用EDAS微服务治理的离群摘除能力,自动将不可用可用区的节点摘除下线,等可用区网络等故障恢复以后,自动将节点加回到应用集群中,做到智能化的故障处理。

上述图中应用 A 调用的应用 B、应用 C、应用 D 均被策略控制,如果被A调用的应用对应实例返回错误率达到下限,异常实例将被摘除不再被A调用(检测恢复后重新加入被A调用)。

首先进入微服务治理选择对应的RPC框架,比如这里选择的 Spring Cloud,选择离群摘除菜单,按照以下步骤进行配置:

其中QPS下限按照EDAS应用的可观测能力,按照平常的QPS配置下限值。错误率在容灾场景下配置10%到50%区间。摘除实例<50%,保证集群的可用性,不引发上下游雪崩。恢复时间和累积探测次数都可以设置默认值,来保证可用区故障恢复后,自动将节点恢复。

除了上面提供的离群摘除功能,EDAS还为部署的Provider应用提供了开启同机房优先调用的能力,在发生可用区的故障时,如果开启同机房优先调用,不会出现跨机房调用,那么RPC层面的流量就不需要利用离群摘除等容灾能力进行重新的节点流量处理或者隔离,从而保障故障发生时刻,业务完全没感知。

微服务基础设施高可用

EDAS在部署应用的时候,背后已经默认提供对应的微服务基础设施:比如注册中心,配置中心。这些对客户不暴露的微服务组件都已经实现同城容灾,在发生可用区不可用的情况,可以继续保证服务的可用性,大大降低了客户对容灾组件的运维复杂度。

数据库层面高可用

在完成应用部署结构以及RPC层面的流量同城双活处理后,对于数据可靠性,RDS MySQL提供高可用版本实例,采用一主一备的双机热备架构,适合80%以上的用户场景。主节点故障时,主备节点秒级完成切换,整个切换过程对应用透明;备节点故障时,RDS会自动新建备节点以保障高可用。在创建实例的时候选择高可用版,部署方案选择多可用区部署:

创建多可用区实例时,备机房将创建与主机房相同规格的Replica实例,主备机房的实例数据通过专门的复制通道同步。当主机房出现电力或网络问题时,Replica实例将升级为Master实例,底层系统就会自动把请求路由到备机房,从而实现故障切换。

结束语

经过上述方案,我们可以利用阿里云EDAS 等相关产品,快速低成本的搭建具备同城双活容灾业务应用,保障线上业务在可用区发生不可用时快速实现流量数据切换,从而保证业务可持续性,该方案对公共云90%以上的用户都能满足其容灾需求。

作者:神鱼,阿里云解决方案架构师

原文链接

本文为阿里云原创内容,未经允许不得转载

EDAS微服务应用同城容灾最佳实践的更多相关文章

  1. 阿里云OSS同城冗余存储正式商业化,提供云上同城容灾能力

    近日,阿里云正式发布OSS同城冗余存储产品.这是国内目前提供同城多AZ冗余部署能力覆盖最广的云上对象存储产品,可以实现云存储的同城双活,满足企业级客户对于“发生机房级灾难事件时数据不丢失,业务不中断” ...

  2. 云原生数据库TDSQL-C 容灾的实践和探索

    云原生数据库TDSQL-C作为腾讯云架构平台部核心数据库产品之一,致力于为云上ToB用户和公司自研业务提供集高性能.低成本.大存储.低延迟.秒级扩缩容.极速回档.Serverless化七大特性于一体的 ...

  3. 高性能高可用的微服务框架TarsGo的腾讯实践

    conference/2.3 高性能高可用的微服务框架TarsGo的腾讯实践 - 陈明杰.pdf at master · gopherchina/conferencehttps://github.co ...

  4. 吴太银:华为消费者云服务Cassandra使用场景与最佳实践

    大家好,我是华为消费者云的吴太银. 我今天分享的主要是华为消费者云服务使用Cassandra的应用场景和最佳实践.我这个可能跟其他嘉宾分享的不太一样,因为前几个嘉宾讲的实际上对Cassandra原生的 ...

  5. 第七模块 :微服务监控告警Prometheus架构和实践

    119.监控模式分类~1.mp4 logging:日志监控,Logging 的特点是,它描述一些离散的(不连续的)事件. 例如:应用通过一个滚动的文件输出 Debug 或 Error 信息,并通过日志 ...

  6. 分布式链路追踪Jaeger + 微服务Pig在Rainbond上的实践分享

    随着微服务架构的流行,客户端发起的一次请求可能需要涉及到多个或 N 个服务,致使我们对服务之间的监控和排查变得更加复杂. 举个例子: 某条业务线的某个接口调用服务端时快时慢,这时就需要排查各个服务的日 ...

  7. 鹅长微服务发现与治理巨作PolarisMesh实践-上

    @ 目录 概述 定义 核心功能 组件和生态 特色亮点 解决哪些问题 官方性能数据 架构原理 资源模型 服务治理 基本原理 服务注册 服务发现 安装 部署架构 集群安装 SpringCloud应用接入 ...

  8. 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践

    1. 概述 数据服务(https://ds-cn-shanghai.data.aliyun.com) 是DataWorks产品家族的一员,提供了快速将数据表生成API的能力,通过可视化的向导,一分钟“ ...

  9. Spring RESTful服务接收和返回JSON最佳实践

    http://blog.csdn.net/prince_hua/article/details/12103501

  10. B站在微服务治理中的探索与实践

    https://mp.weixin.qq.com/s/_iFe8DO1e-QcYG-CJDTHpg

随机推荐

  1. 前后端分离之Ajax入门

    前后端分离之Ajax入门 一.概念 Ajax(Asynchronous Javascript And XML),即是异步的JavaScript和XML,Ajax其实就是浏览器与服务器之间的一种异步通信 ...

  2. 精通 Grails: 测试 Grails 应用程序

    排除 bug,构建可执行文档 Grails 可以轻松确保您的应用程序从始至终都远离 bug.这还有另一个好处,您可以利用测试代码生成一组通常是最新的可执行文档.本月 Grails 专家 Scott D ...

  3. csproj技巧,以及使用其他类库冲突,以及引入第三方UI方式

    1.在项目中我们经常写 string? Message{get;set;} 明明是引用类型,它底下还是会出现波浪线,我们可以打开csproj 找到Nullable将它改为disable,或者删除,它默 ...

  4. 记录--卸下if-else 侠的皮衣!- 策略模式

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 当我是if-else侠的时候 怕出错 给我一个功能,我总是要写很多if-else,虽然能跑,但是维护起来确实很难受,每次都要在一个方法里面 ...

  5. 记录--axios和loading不得不说的故事

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 loading的展示和取消可以说是每个前端对接口的时候都要关心的一个问题.这篇文章将要帮你解决的就是如何结合axios更加简洁的处理loa ...

  6. 记录--前端实现电子签名(web、移动端)通用

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 在现在的时代发展中,从以前的手写签名,逐渐衍生出了电子签名.电子签名和纸质手写签名一样具有法律效应.电子签名目前主要还是在需要个人确 ...

  7. Clang Preprocessor 类的创建

    参考: Create a working compiler with the LLVM framework, Part 2 How to parse C programs with Clang: A ...

  8. AI实用指南:5分钟搭建你自己的LLM聊天应用

    今天,我们将迅速着手搭建一个高效且富有创意的混元聊天应用,其核心理念可以用一个字来概括--快.在这个快节奏的时代,构建一个基础的LLM(Large Language Model,大型语言模型)聊天应用 ...

  9. vue中$forceUpdate()的使用

    刷新数组的作用 this.$forceUpdate(); 具体请看:vue中$forceUpdate()的使用 - 简书 (jianshu.com)

  10. BeanUtils.copyProperties() 详解

    BeanUtils.copyProperties会进行类型转换:BeanUtils.copyProperties方法简单来说就是将两个字段相同的对象进行属性值的复制. 如果 两个对象之间存在名称不相同 ...