EDAS微服务应用同城容灾最佳实践
简介: 大多数业务应用只要做到同城双活,就可以避免掉大多数数据中心不可用故障。本实践就是帮助大家高效、低成本地实现自己的业务应用具备同城双活容灾能力。
前言
上云目前已经是绝大数企业首选的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微服务应用同城容灾最佳实践的更多相关文章
- 阿里云OSS同城冗余存储正式商业化,提供云上同城容灾能力
近日,阿里云正式发布OSS同城冗余存储产品.这是国内目前提供同城多AZ冗余部署能力覆盖最广的云上对象存储产品,可以实现云存储的同城双活,满足企业级客户对于“发生机房级灾难事件时数据不丢失,业务不中断” ...
- 云原生数据库TDSQL-C 容灾的实践和探索
云原生数据库TDSQL-C作为腾讯云架构平台部核心数据库产品之一,致力于为云上ToB用户和公司自研业务提供集高性能.低成本.大存储.低延迟.秒级扩缩容.极速回档.Serverless化七大特性于一体的 ...
- 高性能高可用的微服务框架TarsGo的腾讯实践
conference/2.3 高性能高可用的微服务框架TarsGo的腾讯实践 - 陈明杰.pdf at master · gopherchina/conferencehttps://github.co ...
- 吴太银:华为消费者云服务Cassandra使用场景与最佳实践
大家好,我是华为消费者云的吴太银. 我今天分享的主要是华为消费者云服务使用Cassandra的应用场景和最佳实践.我这个可能跟其他嘉宾分享的不太一样,因为前几个嘉宾讲的实际上对Cassandra原生的 ...
- 第七模块 :微服务监控告警Prometheus架构和实践
119.监控模式分类~1.mp4 logging:日志监控,Logging 的特点是,它描述一些离散的(不连续的)事件. 例如:应用通过一个滚动的文件输出 Debug 或 Error 信息,并通过日志 ...
- 分布式链路追踪Jaeger + 微服务Pig在Rainbond上的实践分享
随着微服务架构的流行,客户端发起的一次请求可能需要涉及到多个或 N 个服务,致使我们对服务之间的监控和排查变得更加复杂. 举个例子: 某条业务线的某个接口调用服务端时快时慢,这时就需要排查各个服务的日 ...
- 鹅长微服务发现与治理巨作PolarisMesh实践-上
@ 目录 概述 定义 核心功能 组件和生态 特色亮点 解决哪些问题 官方性能数据 架构原理 资源模型 服务治理 基本原理 服务注册 服务发现 安装 部署架构 集群安装 SpringCloud应用接入 ...
- 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践
1. 概述 数据服务(https://ds-cn-shanghai.data.aliyun.com) 是DataWorks产品家族的一员,提供了快速将数据表生成API的能力,通过可视化的向导,一分钟“ ...
- Spring RESTful服务接收和返回JSON最佳实践
http://blog.csdn.net/prince_hua/article/details/12103501
- B站在微服务治理中的探索与实践
https://mp.weixin.qq.com/s/_iFe8DO1e-QcYG-CJDTHpg
随机推荐
- ubuntu重启网卡
1.关闭接口:sudo ifconfig eth0 down 2.然后打开:sudo ifconfig eth0 up
- 关于全景(360)图片拼接的方法(Opencv3.0 Stitcher)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- Android 开发Day2
我的是小刺猬版本,算是比较新的版本了,还有火烈鸟和蜻蜓版啥的 新建项目(project)点击加号新建就行了.这时我们会选择一个模板作为开发的辅助起点,看上哪个就选哪个就行了.推荐新手选空项目(Empt ...
- CAD和实时渲染之间的差距
建筑师如何将他们喜爱的CAD工具与虚幻引擎和Twinmotion 等快速实时渲染工具结合使用 每个建筑师都有自己喜欢的设计工具.从Revit的粉丝到阿奇卡德的狂热用户,AEC专业人员通常首选CAD和B ...
- 使用Servlet实现单文件上传
一位朋友最近在学习JavaWeb开发,开始学习单文件上传操作,他自己尝试着去网上看一些博客教程,能明白其中大概的思路, 还是让我和他说说,如何实现单文单件上传功能.我和他说了一下大致的思路与操作步骤, ...
- 三维模型OBJ格式轻量化压缩处理效率提高的技术方法探讨
三维模型OBJ格式轻量化压缩处理效率提高的技术方法探讨 要提高三维模型OBJ格式轻量化压缩处理的效率,可以采取以下方法: 1.优化算法选择:选择合适的优化算法对模型进行轻量化处理.不同的优化算法有不同 ...
- 记录--开发uniapp nvue App+微信小程序,我踩过的坑( 纯干货 )
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 最近接了个项目,采用uniapp的nvue开发安卓和ios端+小程序端,第一次开发nvue,对于css布局这块,还是踩了很多坑.以及一些u ...
- FFmpeg开发笔记(十)Linux环境给FFmpeg集成vorbis和amr
FFmpeg内置了aac音频格式,在<FFmpeg开发实战:从零基础到短视频上线>一书的"5.2.2 Linux环境集成mp3lame"又介绍了如何给FFmpeg集 ...
- C++原子操作与内存序 1
问题 #include<iostream> #include<thread> int main() { int sum = 0; auto f = [&sum]() { ...
- STAR法则是什么(如何把一件事表达清楚)
STAR法则,即为Situation Task Action Result的缩写,具体含义是: Situation: 事情是在什么情况下发生 Task: 你是如何明确你的任务的 Action: 针对这 ...