EDAS微服务应用同城容灾最佳实践

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 大多数业务应用只要做到同城双活,就可以避免掉大多数数据中心不可用故障。本实践就是帮助大家高效、低成本地实现自己的业务应用具备同城双活容灾能力。

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

前言


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


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


image.png


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


image.png


方案主要产品介绍


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,放到同一个集群中,在应用列表中选择创建应用:


image.png


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


image.png

 

K8s集群部署

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


image.png


流量接入层高可用

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


image.png


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


网络异常,图片无法展示
|

 

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

RPC层面高可用

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


image.png


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


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

 

image.png

 

image.png

 

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


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

微服务基础设施高可用

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

数据库层面高可用

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


image.png


备注: 如果现有高可用版本实例为单可用区,可以参考迁移可用区,将单可用区转移成高可用区。


如果对数据可靠性有更强的业务场景,RDS提供异地灾备实例,帮助用户提升数据可靠性,该方案依赖数据传输服务产品(DTS)实现主实例和异地灾备实例之间的实时同步,同时需要新购灾备实例,采用该方案,需要一定的成本,具体操作步骤参考异地灾备实例


image.png


主实例和灾备实例均搭建主备高可用架构,当主实例所在区域发生突发性自然灾害等状况,主实例(Master)和备实例(Slave)均无法连接时,可将异地灾备实例切换为主实例,可以借助应用配置管理产品 将数据库连接地址推送给应用端,通过EDAS 重启相关应用,即可快速恢复应用的业务访问。

缓存层面高可用

本方案讨论的最佳实践以应用场景最为广泛的云数据库Redis为主,云数据库Redis产品创建的时候已经默认提供跨双机房的同城容灾架构,在创建云数据库 Redis版实例时,选择支持同城容灾的可用区,如下图:


image.png


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

结束语

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


除了同城双活容灾,阿里云还提供了阿里巴巴电商环境演进出来的多活容灾架构解决⽅案,基于灵活的规则调度、跨域跨云管控、数据保护等能力,保障故障场景下的业务快速恢复,满足对高可用稳定性有更苛刻要求的客户,有该需求的客户可以参考官方文档多活容灾介绍


扫码了解更多技术内容与客户案例:

网络异常,图片无法展示
|

 

相关实践学习
使用DAS实现数据库自动SQL优化
本场景介绍如何使用DAS实现数据库自动SQL优化。
SpringMVC框架入门
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts2等。 相关的阿里云产品企业级分布式应用服务 EDAS:企业级分布式应用服务 EDAS(Enterprise Distributed Application Service)是一个应用托管和微服务管理的 PaaS 平台,提供应用开发、部署、监控、运维等全栈式解决方案,同时支持 Spring Cloud、Apache Dubbo(以下简称 Dubbo )等微服务运行环境,助力您的各类应用轻松上云。产品详情: https://www.aliyun.com/product/edas&nbsp;
相关文章
|
16天前
|
运维 持续交付 开发工具
深入浅出:GitOps在微服务架构中的应用
【10月更文挑战第26天】本文深入探讨了GitOps在微服务架构中的应用,介绍了其核心理念、自动化部署流程和增强的可观测性。通过实例展示了GitOps如何简化服务部署、配置管理和故障恢复,并推荐了一些实用工具和开发技巧。
|
8天前
|
监控 Go API
Go语言在微服务架构中的应用实践
在微服务架构的浪潮中,Go语言以其简洁、高效和并发处理能力脱颖而出,成为构建微服务的理想选择。本文将探讨Go语言在微服务架构中的应用实践,包括Go语言的特性如何适应微服务架构的需求,以及在实际开发中如何利用Go语言的特性来提高服务的性能和可维护性。我们将通过一个具体的案例分析,展示Go语言在微服务开发中的优势,并讨论在实际应用中可能遇到的挑战和解决方案。
|
9天前
|
Go 数据处理 API
Go语言在微服务架构中的应用与优势
本文摘要采用问答形式,以期提供更直接的信息获取方式。 Q1: 为什么选择Go语言进行微服务开发? A1: Go语言的并发模型、简洁的语法和高效的编译速度使其成为微服务架构的理想选择。 Q2: Go语言在微服务架构中有哪些优势? A2: 主要优势包括高性能、高并发处理能力、简洁的代码和强大的标准库。 Q3: 文章将如何展示Go语言在微服务中的应用? A3: 通过对比其他语言和展示Go语言在实际项目中的应用案例,来说明其在微服务架构中的优势。
|
7天前
|
监控 持续交付 Docker
Docker 容器化部署在微服务架构中的应用有哪些?
Docker 容器化部署在微服务架构中的应用有哪些?
|
7天前
|
监控 持续交付 Docker
Docker容器化部署在微服务架构中的应用
Docker容器化部署在微服务架构中的应用
|
15天前
|
JavaScript 持续交付 Docker
解锁新技能:Docker容器化部署在微服务架构中的应用
【10月更文挑战第29天】在数字化转型中,微服务架构因灵活性和可扩展性成为企业首选。Docker容器化技术为微服务的部署和管理带来革命性变化。本文探讨Docker在微服务架构中的应用,包括隔离性、可移植性、扩展性、版本控制等方面,并提供代码示例。
52 1
|
26天前
|
存储 Kubernetes 监控
深度解析Kubernetes在微服务架构中的应用与优化
【10月更文挑战第18天】深度解析Kubernetes在微服务架构中的应用与优化
97 0
|
11月前
|
监控 应用服务中间件
如下请问EDAS的这个问题怎么解决? 应用id:2b0e6935-47fb-40ec-a11d-7dac320aecc1 集群中的节点内存是足够的,部署跑不起来 可以帮忙看看吗,以前集群下应用发布都是正常的,最近集群下应用部署基本都报错跑不起来,提示节点不可用
如下请问EDAS的这个问题怎么解决? 应用id:2b0e6935-47fb-40ec-a11d-7dac320aecc1 集群中的节点内存是足够的,部署跑不起来 可以帮忙看看吗,以前集群下应用发布都是正常的,最近集群下应用部署基本都报错跑不起来,提示节点不可用
130 2
|
Kubernetes 负载均衡 Serverless
通过EDAS部署并访问应用
本实验旨在通过使用分布式应用服务EDAS纳管容器服务ASK,掌握微服务应用的部署和访问。
|
Kubernetes Serverless 应用服务中间件
通过EDAS实现K8s微服务应用的金丝雀发布
本实验旨在通过使用分布式应用服务EDAS纳管容器服务ASK,体验微服务应用的部署、访问和高级发布能力。