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

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

前言

上云目前已经是绝大数企业首选的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会自动新建备节点以保障高可用。在创建实例的时候选择高可用版,部署方案选择多可用区部署:

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

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

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

缓存层面高可用

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

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

结束语

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

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

原文链接:https://developer.aliyun.com/article/781642?

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

EDAS微服务应用同城容灾最佳实践相关推荐

  1. 微服务架构深度解析与最佳实践

    微服务架构深度解析与最佳实践 微服务架构的概念,现在对于大家应该都不陌生,无论使用 Apache Dubbo.还是 Spring Cloud,都可以去尝试微服务,把复杂而庞大的业务系统拆分成一些更小粒 ...

  2. 微服务架构深度解析与最佳实践-第一部分:微服务发展历程和定义

    微服务架构的概念,现在对于大家应该都不陌生,无论使用 Apache Dubbo.还是 Spring Cloud,都可以去尝试微服务,把复杂而庞大的业务系统拆分成一些更小粒度且独立部署的 Rest 服务 ...

  3. 【微服务架构】一文读懂单片到微服务架构的模式和最佳实践

    在本文中,我们将学习如何使用设计模式.原则和最佳实践来设计微服务架构.我们将使用正确的架构设计模式和技术. 在本文结束时,您将了解如何在微服务分布式架构上设计系统以实现高可用性.高可扩展性.低延迟和对 ...

  4. 微服务架构深度解析与最佳实践 - 第七部分:全文总结与引用材料

    最佳实践的总结 林林总总说了这么多的微服务架构相关的知识也好,经验也罢,不一定适合每个希望做微服务系统的技术人员的实际需求."道无常道,法无常法,君子审时度势,自可得而法".实际项 ...

  5. Serverless 时代下大规模微服务应用运维的最佳实践

    微服务架构的优点和痛点 Aliware 1 微服务架构的诞生背景 回到互联网早期时代,也就是web1.0时代,当时主要是一些门户网站,单体应用是当时的主流应用,研发团队相对较小,这时候的挑战在于技术的 ...

  6. 微服务开发的 10 个最佳实践

    作者 | Md Kamaruzzaman 译者 | 冬雨 策划 | 万佳 随着软件系统越来越复杂,大型的软件系统变得难于开发.增强.维护.现代化和规模化.为解决这一问题,人们尝试过模块化软件开发.分层 ...

  7. 微服务架构的 10个 最佳实践 !

    论如何正确实施微服务架构的10个技巧? 作者 | Md Kamaruzzaman 译者 | 苏本如,责编 | Elle 出品 | CSDN(ID:CSDNnews) 以下为译文: 微服务架构到底是什么 ...

  8. 微服务架构深度解析与最佳实践 - 第五部分:七个应对策略之性能、一致性与高可用

    七个关键问题的应对策略-续 3.关于微服务对性能的影响 大家可以先思考 2 个问题:延迟(latency)和吞吐量(throughout)有什么关系? 延迟是响应时间么? 先说一下延迟和响应时间,延迟 ...

  9. Spring Boot 微服务编码风格指南和最佳实践

    文奇摄于世界尽头州立公园 通过多年来使用 Spring Boot 微服务,我编制了一份编码风格指南和最佳实践列表.这份清单并不全面,但我希望您能找到一两点可以借鉴的地方,无论您是新手还是经验丰富的 S ...

最新文章

  1. Xilinx_ISE 14.7在Win10下选择“open project”崩溃闪退的问题
  2. 697. Degree of an Array 频率最高元素的最小覆盖子数组
  3. UNIX:描述符和文件结构
  4. python爬取股票大单历史记录_利用bs4爬取股票的历史交易数据
  5. Batoo JPA –比领先的JPA提供商快15倍
  6. mac远程redis_Linux:使用Mac远程(局域网内)访问Ubuntu主机上的Redis服务
  7. 企业实战案例02_Jenkins_连接远程GitLab拉取代码
  8. 远程计算机统考试题,2015年电大远程网络教育计算机应用基础统考模拟试题集...
  9. 计算机在思政专业的应用与探索,课程思政在计算机类课程中的探索与实践
  10. 工业机器人综合教学实训平台
  11. SPFA算法(最短路径算法)
  12. 微信朋友圈服务器缓存,怎么删微信朋友圈缓存?
  13. 【Python笔记】Scipy.stats.norm函数解析
  14. 【打印机】连接共享打印机找不到网络路径解决方案
  15. Defect Detection论文合集、代码和数据集
  16. 身份证男女识别---非线性问题01
  17. 五子棋网络对战 java实现
  18. 加密芯片的种类及优缺点
  19. 通道剪枝Channel Pruning
  20. unity 渲染层级详解

热门文章

  1. 简单实用,Python代码调试利器
  2. 如何用 Python + Scrapy 爬取视频?
  3. Python 一键导出微信阅读记录和笔记,666!
  4. 科技公司最爱的 50 款开源工具,你都用过吗?
  5. android判断银行卡号格式不正确的是什么意思,android银行卡号验证算法详解
  6. 家用电器用户行为分析与事件识别_8个步骤,教你如何开始用户行为分析
  7. tcpip路由技术卷一_减少与开发的撕战,结合容器化技术轻松重构运维平台
  8. 相机录像出现花屏_[Unity3D]花屏问题解决
  9. 目前最常用的计算机机箱类型为_常用的计算机设备
  10. 团队作业9——第二次项目冲刺2(Beta阶段)