云原生时代,企业多活容灾体系构建思路与最佳实践

简介: 对于云原生的概念解读,大家经常会听到微服务、容器这些,那么这些技术跟企业容灾到底有什么样的关系?其实容灾的需求各行各业都有,比如金融行业对于容灾也有强烈的需求。但是怎么把容灾和多活能力构建起来,其实是每家企业都需要好好思考的。这篇分享希望能给大家提供一些相关思路。

对于云原生的概念解读,大家经常会听到微服务、容器这些,那么这些技术跟企业容灾到底有什么样的关系?其实容灾的需求各行各业都有,比如金融行业对于容灾也有强烈的需求。但是怎么把容灾和多活能力构建起来,其实是每家企业都需要好好思考的。这篇分享希望能给大家提供一些相关思路。

容灾系统职能演进

今天讲的多活,其实是容灾体系里面的一块,大家可以看一下整个容灾体系架构的演进:

容灾 1.0:在原有应用系统的构建过程中,业务系统是基于传统架构部署在机房里面,那么相关的应急措施或者故障处理的办法呢?这个时期只考虑到了数据备份,主要以冷备的方式。除了提供业务的机房,另外可能会考虑到灾难场景做额外的机房。从系统建设的角度,可能会选择用单独的机房把数据同步到另外的机房做冷备,在出现问题的时候切换。但在实际情况中,平时一般不会选择切换机房,哪怕是每年做灾备系统例行演练的金融行业,在生产过程中遇到系统出了问题的时候都不太敢切换。

容灾 2.0:更多地考虑到了应用。比如云原生,或者再往上层应用在传统的 IOE 体系中,切换不仅仅是简单地切过去,把原来冷备的数据加载出来,而是希望切过去的时候可以很快速地把应用在另外的机房拉起来。为了实现数据层上的复制不会有太大延时,我们通常会有双活的要求。但是一般做双活会有一些要求,比如距离要求一定范围以内才可以做同城双活。双活更多会应用在 AQ 模式,即在生产这边做全业务,在另外机房做别的业务。

容灾 3.0:希望做成异地多活。多是什么?意思是不再局限两个机房,更希望是三个或者更多的机房。比如阿里的业务分布在多个机房,怎么同时对外提供业务的支撑,这是需要对应技术支持的。而异地多活的意思就是不局限于距离,比如 200 公里或者同城,因为如今的机房部署在全国各地。

业务连续性以及容灾概述

对于业务连续性来说其实有体系化的方法,指在容灾系统建设上多年积累下来的规范和指导,这其中有几个维度:

1、多活业务并不是跟原来的容灾一样,把对等在另外一个机房一样的业务直接拉过去,而是选择有价值的业务。因为在容灾系统建设中,要把所有的业务实现多活,在成本和技术实现上是非常困难的。

2、实时性运行的保障,需要保证核心业务不会因为机房断电等各种原因停止服务。

3、M 代表保障体系。如今各行各业,可能都有自己不同的手段和管理的方式,而阿里提供的是将这一部分的东西转变为技术、工具和产品,让大家未来在构建多活能力的时候,可以很快速地基于这套方法和产品构建业务的多活。

BCM 体系和 IT 容灾恢复能力是一个偏实践的指导性框架。从完整性来讲,顶部的业务连续性是目标,下面是各种实现方式。在底部可以看到例如 IT 计划,业务连续性出现特殊问题处理故障的计划等,这些在原来做容灾的时候是会考虑到的,而我们是从多活的角度把这些东西考虑在产品体系里面。
这里提到的几个容灾方式,其实是比较常见的:从冷备到同城双活、同城双活加异地冷备(两地三中心),这些在业内相对来说都是比较规范的方式。而异地多活就好比在两地三中心的三个机房里面同时提供多活的能力,在以前的基础上,又跟原来传统的容灾有一些区别。多活在建设成本上与传统也有区别,比如构建异地多活的能力,在建设成本上比传统(例如同城双活和两地三中心)会有更多的投入。

在构建多活能力的时候,其实也会考虑到业务的实际情况。比如不同的行业,或者比如在多活方面只要求实现两边的读,那么不同情况下,建设成本以及对业务切换的时间是有区别的。异地多活能力从横向时间轴来看的话可以做到分钟级切换,但如果基于冷备的话可能需要以天来切换。

阿里为什么做多活

在阿里的业务模式下,为什么要做多活的原因跟前面提到的类似。前面讲到的同城加冷备,如果不采用多活就要建另外一个机房,成本非常高,因为那个机房只是用作平时的数据同步,并不处在运行状态,在这期间还需要不间断地更新生产系统对应的版本和灾备系统的版本。但实际情况下,原来的冷备或者两地三中心出现故障的时候不敢去切换,因为很有可能切换后就无法切回来。

而做多活主要有三个主要的诉求:

1、资源。随着今天业务高速发展,单地资源容量受限。我们知道云原生、云计算提供高可用、容灾的能力,但是云计算部署在不同的机房里面,跨地域多活的能力本身需要底层的基础设施来支持,我们希望把业务扩展到不受限于物理机房的限制,还达到多个机房同时接业务;

2、业务有多元化的需求,需要就地或异地部署的要求;

3、针对容灾事件。比如光缆挖断,或者天气原因机房供电散热的问题,这些都会导致单机房的故障。如今的需求希望不受限于某个机房,而是有多个机房部署在全国各地处于不同的形态,根据业务模式可以灵活调控。

因为这些诉求对多活的能力要求比较迫切,所以阿里根据自己的业务需求和技术上的能力做了多活的方案和产品。

多活架构的拆解

多活架构的拆解

1、异地互备:今天大家讲云原生有多好,云计算有多好,没有多活能力这些技术其实就是闲置的状态。冷备状态时不工作,而在什么状态下要切到冷备大多要靠人的决策。由于层层上报对业务影响比较大,比较成熟的客户会有一些预案,比如什么样的影响和故障需要做这种切换,但实际上基于冷备模式的话一般不敢去做切换。

2、同城双活:有一定的距离限制,常见的双活模式在上层应用这一层,比如像云原生的 PaaS 层两面机房都可以分发。在数据这一层因为是同城可以用贮备的方式,主机房出现问题数据库方面切到备机房,但是这个好处是两边机房的机器、资源都属于活动的状态。另外,机房处于活动的状态就不用担心生产的版本跟备机房的版本有区分,不会不敢切。

3、两地三中心:除了考虑同城提供这个问题,对于故障应对能力会更强,在异地建一个冷备的机房,这个跟冷备第一个方案有类似,冷备的机房平时是不用的,可能会做一些其他的同步,只有在故障发生的时候做切换。

4、异地多活:有多个数据中心同时对外提供业务的能力。由于距离的局限,在数据层面的复制可能会受限于网络,导致延时的问题是一定会存在的。这其中有很多技术问题要解决,比如怎么做到可以很快速从北京机房切换到上海,底层的数据受物理限制情况下没有完全同步怎么去切。我们操作模式不像原来容灾的方式切换,而是要做一堆准备工作和后续数据的补偿流程。我们将这套东西融合到产品体系中,物理极限没有办法突破我们就用架构的模式来优化。

递进式多活容灾架构

对于关键核心业务,其实在做多活系统或者项目的时候,对业务会做一些梳理,今天讲的是单元化的梳理。
递进式多活容灾架构

双读、两地三中心,一般情况下两个机房最多一半一半去分,这是最简单的。按照这种模式能找出业务切分的规则,比如可以按照用户号码,就像银行可能按照卡号或者用户所属地分成一半一半的业务。而在多活里面我们希望可以灵活去配,比如机房的处理能力多大,碰到的故障是什么样子,流量可以调成 50%、60% 或者其他比例。在多个机房也一样,可以统一分配流量接入的情况。

在技术方面,像异地互备就是单向的数据复制,异地的双活是双向的,双向的意思是这两个机房某一个机房任何一个都有可能出问题,可以互相切换。这其中很重要的是技术上的实现,在数字这一层要想办法去避免循环复制的问题,不能在把数据同步之后,另外一个机房认为是新增的数据又复制回来。而在多个机房的情况下,传统方式是在数据库内用序列号,在多活里面序列号需要规则生成具有全局唯一性,并且不是基于某一个单机房而是基于整个集群,我们需要考虑多个机房生成的序列号不能有重复,这就需要产品具备一些规则来解决这个问题。

多活容灾方案

多活产品方案的架构图

1、接入层:在多活里面第一个要解决的是非常重要的流量接入层。接入层可以很精细控制接入的规则,按照业务分片的规则,要精确到要映射到下层每一个机房,流量进来以后需要判断流量用户应该在哪个机房提供服务。这在实际情况中具体是如何实现的呢?

传统的方式是域名切换。例如前端的域名有两个机房,切换的时候把域名的地址切了,那么整个业务原来是接到机房 A 的,通过域名可以切换到另一个机房 B 。这个方法的问题在于会影响正在做的业务。举个例子,某一个机房出现问题后需要快速把业务切到另一个机房,通过域名切换的话,最底层正在进行的业务会受到影响。除此之外,这种底层切换没办法跟整个云原生 PaaS 层做联动,上层切了下层感知不到,根本不知道前面流量已经切换到另外的机房里了,包括中间的调用可能还在原来机房单元里面,这对于业务连续性来说其实受影响比较大。在极端的情况下用这种模式可以解决一些问题,比如一个机房一点业务都做不了且有备用机房的情况下,那么把域名切过去也是一种办法。

另一个办法是用云原生微服务,可以在微服务里面对流量做打标,打标完之后在云原生的微服务技术体系里面把这个标记往下传,尽可能把请求认为在某个单元或者某个机房做,不能跳到其他机房。

2、应用层:中间这一层接入路由的规范包括服务路由的组件,是我们这个产品体系里面可以单独提供的。比如一些客户说不想用全套的方案,因为方案的中间这一层用的开源组件他可能都有,但又想实现多活的能力。那么上层可以是用我们整个多活的管控切流,精确定义出来有多少逻辑的单元,并且提供 API ,供中间调用。全局唯一的序列号、路由规则和分片规则都有前面这一层提供给他。而这其中像打标和流量识别等看似比较简单,实际上例如在多活的场景里面,一些在拆分解耦的时候会用到的分布式消息,以及在架构里用到的消息,如果在某个机房没有消费完就进行了切换,那么需要用什么方式同步到另外机房,这类问题都需要借助云原生来解决。

3、数据层:涉及到复制、写入的逻辑。我们方案中的禁写管控在数据库上会有一个逻辑,即一旦在前端发生切换会自动生成代码。比如说被切换的目标机房什么时候数据恢复了,就会自动生成带时间的代码,只有当数据恢复了才会把写入的动作重新放开。我们会通过禁写来保障对数据库的保护和数据库延时的判断。如果底层数据同步能力不够强,切换及大部分业务还可以做,但很多写入的业务不一定能做了,因为数据库受禁写规则的限制。另外数据同步的规则,在多个机房逻辑下对于复制的要求在整体规则上管控更高。
基于整套方案体系,我们提出了一个概念(如上图所示):MSHA 四个字母的缩写代表的就是今天提供云原生这一块多活产品的能力,我们希望在这四个数字上面发挥小作用:0、1、5、10 分钟的预防。

首先是 0 分钟预防,前面提到切流,可以在两个机房部署蓝绿发布的环境,这是一种方法。就算同一个机房也可以在管控台的逻辑下定义出来两个单元,很快速的在同一个机房里进行蓝绿发布。一个机房做蓝绿发布受限于技术产品的支撑,通过这个组件可以很清晰划出来,哪些资源是属于其中一个单元的,哪些资源是另外一个单元的,同时对这个单元快速去实现蓝绿发布;

第二,5 分钟定位,原来同城的比如冷备容灾技术,往往做决策非常费劲,或者谁做切换要承担后果,我们更希望基于这个平台能直观看到今天故障影响的情况,相关对应出现什么问题干系人需要做什么样的动作,或者做什么操作,把应用恢复起来;在发生故障的时候快速通过这套体系发现故障的问题,比如说通过 5 分钟定位问题后,再由它来发起决策要不要做切流;

第三,10 分钟恢复,最后,我们希望通过这套模式能把整个业务重新运作起来的整个过程控制在 10 分钟内恢复

多活容灾最佳实践

下面有几个例子是阿里给外部企业应用的案例,这个多活容灾能力不只有在公有云上可以用,因为云不代表当应用部署在云上面的时候,天然所有的高可用就都是由云来提供的,用资源的时候就会发现云其实有不同的区域,同一个地区含有不同的可用区。在公有云上使用的时候是需要结合实际情况的,比如大部分客户可能在南边,那么在南边的机房可能会先开一个节点,那么当阿里机房出现了问题的时候,客户的业务也会相应收到影响,虽然客户部署在云上对应的业务,云上的产品也提供高可用,但故障的场景一旦涉及到机房,对应的业务仍旧会收到影响。所以提供的方案是多活能力除了可以部署在云上,也可以跟商业软件一样部署在机房。

案例一:同城双活

某物流的客户,其实是同城的范围内使用了多活,虽然用传统的技术问题也不大,用多活的好处体现在比如说有对应的 SDK ,可以自动识别出来,不需要业务做太多的改造,可以把打标的请求自动传递下去。容灾能力在做完之后在 RTO 这块比原来快了很多。

案例二:异地双读

异地双读的这个案例难点在于异地超过上千公里。在这个距离限制下,不管是读还是写其实都有难度,数据复制本身就存在延时,用这套产品的逻辑也是希望统一从管控、流量这一层很清晰知道,哪些是读的业务,哪一些业务导入到读的机房,复制的状态是什么样的。分钟级 RTO 比原来有很大的提升,可以在线动态地做业务的灵活切换。

案例三:异地双活

使用异地双活的这个企业客户目前是有两个机房写,将来可能会往前拓展。做这个方案落地的时候做了很多产品上适配性的开发,因为要实现读的话,原来产品的基础能力,有大量的工作在中间这一层,整个过程是从多活产品研发再往前适配应用场景,再到全面跟业务做改造。核心点是业务连续性,所以不是指所有的业务将来在机房里都采用多活,而是仅针对关键的业务。举个例子,比如说每年双十一,我们核心的业务是保证下单不能有影响,那么物流通过解耦或是其他方式,从业务连续性来讲优先级不会像下单交易类这么高。核心交易链路所涉及到的服务、产品在多活的维度以什么方式保证切换的时候不会出问题才是重点。

这个多活管控平台建议大家亲身体验一下。两个或多个单元在控制台里面定义出来后,当其中一个机房出现故障时,我们希望通过多活快速把它的应用切换到另一个机房时。切换的前提是需要定义出管控台内的点,不管是单个机房逻辑的点,还是多个物理机房的点,都要映射到多活管控平台里面。在管控台内我们会配一些规则,比如说单一化业务的接入,以什么维度去切分接入的流量,或者以 ID 的方式标记。在切流的时候动态显示哪些维度的流量到另一个机房,出现故障的时候可以快速去配,这就相对比较简单。

如今我们帮助客户部署能力,也会经常在体系里面通过控制台做一些切流和演练,来看一下这个机房是否受到一些影响,因为整个系统里面还配套其他的一些方案,比如做故障演练,配合这些故障把应用切换到另外一个机房等等。

总结

多活容灾的能力在阿里内部业务中已经实践很多年,将其演变成产品也花了很长时间,目的是希望今天这套产品和方案可以帮助企业在 30 天以内就可以构建起来自己的多活能力。特别是公有云上有很多产品部署都已经是现成的企业,其实构建起来时间耗费会更短。我们希望通过这套产品和方案多活的能力可以帮助企业快速在分钟级实现故障的切换和多活能力的构建。

原文链接

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/513032.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MaxCompute 挑战使用SQL进行序列数据处理

简介: MaxCompute 挑战使用SQL进行序列数据处理 --而不是用MR和函数 日常编写数据加工任务,主要的方法就是使用SQL。第一是因为自己对SQL掌握的比较好(十多年数据开发经验,就这几个关键字,也不敢跟别人说自己不行&…

低代码发展专访系列之四:低代码平台会带动企业的组织变革吗?

前言:2019年开始,低代码爆火。有人认为它是第四代编程语言,有人认为它是开发模式的颠覆,也有人认为是企业管理模式的变革……有很多声音,社区讨论很热烈。CSDN随后展开低代码平台产品系列活动,包括低代码开…

esclip直接快捷键构造函数_史上最全IntelliJ IDEA mac版快捷键文档

IntelliJ IDEA 是一款功能强大的Java IDE编辑器,支持java体系的web、客户端、安卓等开发。做为一款优秀的IDE,想要提高效率,最好是记住常用的快捷键,能让你事半功倍,小编整理了IDEA所有的快捷键,让你摆脱鼠…

禁止访问 共享计算机,win7如何禁止局域网用户访问电脑

为了方便共享资源,很多人都会设置网络共享文件夹,但是有些用户觉得在局域网内共享资源是件不安全的事情,那么win7如何禁止局域网用户访问电脑?这里小编就给大家分享一下win7旗舰版32位系统设置用户禁止访问局域网的方法。win7如何禁止局域网…

基于实时深度学习的推荐系统架构设计和技术演进

简介: 整理自 5 月 29 日 阿里云开发者大会,秦江杰和刘童璇的分享,内容包括实时推荐系统的原理以及什么是实时推荐系统、整体系统的架构及如何在阿里云上面实现,以及关于深度学习的细节介绍 本文整理自 5 月 29 日阿里云开发者大会…

阿里云肖力:跳过量变过程的安全质变

简介: 作者肖力从事网络安全工作将近20年,处理过各类攻击威胁,经历了云下云上安全的建设。云计算的安全工作从10年前开始,他们搭建了阿里云平台的防护体系,帮助各行业用户在云上构建企业安全能力。云原生的出现进一步加…

echarts bar 控制大小_echarts基本配置参数

网址&#xff1a;https://www.echartsjs.com/zh/tutorial.html#5%20%E5%88%86%E9%92%9F%E4%B8%8A%E6%89%8B%20ECharts五分钟上手 基本配置1.矩形参数<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name&q…

opencv opencl加速_回放 | OpenCV Webinar 3:OpenCV深度学习应用与原理分析

OpenCV DNN模块提供了深度学习的推理&#xff0c;支持Caffe、Tensoflow、Torch、Darknet、ONNX等格式的模型&#xff0c;无需用户安装对应的深度学习框架&#xff0c;也无需进行模型格式转换&#xff0c;直接调用DNN模块接口即可创建深度学习应用。DNN模块自2017年8月3.3版本从…

云原生架构应该怎么设计?

简介&#xff1a; 阿里巴巴为大量各行各业的企业客户提供了基于阿里云服务的解决方案和最佳实践&#xff0c;以帮助企业完成数字化转型&#xff0c;并积累了大量经验和教训。阿里巴巴将企业的核心关注点、企业组织与 IT 文化、工程实施能力等多个方面与架构技术相结合&#xff…

360数科知微实验室发布反诈报告:揭秘黑灰产数据流转真相

近日&#xff0c;360数科旗下信息安全知微实验室通过反诈分析研究&#xff0c;追踪溯源网络黑灰产数据非法交易链条&#xff0c;发布系列反诈研究《黑灰产数据流转分析报告》&#xff08;以下简称“报告”&#xff09;。报告称&#xff0c;目前在网络黑产平台流转的数据主要来源…

【详谈 Delta Lake 】系列技术专题 之 Streaming(流式计算)

简介&#xff1a; 本文翻译自大数据技术公司 Databricks 针对数据湖 Delta Lake 的系列技术文章。众所周知&#xff0c;Databricks 主导着开源大数据社区 Apache Spark、Delta Lake 以及 ML Flow 等众多热门技术&#xff0c;而 Delta Lake 作为数据湖核心存储引擎方案给企业带来…

jdbc驱动程序_JDBC操作数据库的步骤

package mysql;import java.sql.Connection;import java.sql.Driver;import java.sql.DriverManager;/** JDBC操作数据库的步骤* 1.注册驱动* 告知JVM使用的是哪一个数据库驱动* 2.获得连接* 使用JDBC中的类&#xff0c;完成对Mysql数据库连接* 3.获得语句执行平台* 通过连接对…

一睹为快 | 施耐德电气全生命周期智能制造解决方案亮相线上工博

作家瓦科拉夫斯米尔在《国家繁荣为什么离不开制造业》曾说过&#xff1a;“制造业始终是技术创新的基本源泉&#xff0c;也是经济增长的原动力。” 反过来看&#xff0c;技术创新该如何推动制造业的发展&#xff0c;从而促进经济增长呢&#xff1f; 12 月 1 日&#xff0c;在…

教程系列——用模板快速生成《客户意见反馈表》

简介&#xff1a; 【开箱即用的模板使用系列教程】将会手把手教给大家如何快速启用钉钉宜搭提供各类模板。今天第二讲&#xff0c;介绍《客户意见反馈表》的模板启用。 【开箱即用的模板使用系列教程】将会手把手教给大家如何快速启用钉钉宜搭提供各类模板。今天第1讲&#xff…

重温设计模式之 Factory

简介&#xff1a; 创建型模式的核心干将&#xff0c;工厂、简单工厂、抽象工厂&#xff0c;还记得清么&#xff0c;一文回顾和对比下。 作者 | 弥高 来源 | 阿里技术公众号 前言 创建型模式的核心干将&#xff0c;工厂、简单工厂、抽象工厂&#xff0c;还记得清么&#xff0c…

云端上的字节,引擎火力全开

作者 | 贾凯强出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;十二月&#xff0c;在产业最震撼的一条消息莫过于字节跳动旗下火山引擎终于出云产品了。字节跳动的业务早已跑在云上&#xff0c;这早已是行业公开的信息。可是这朵云究竟有多大呢&#xff1f;在…

收件服务器信息,收件服务器配置信息

收件服务器配置信息 内容精选换一换SAP HANA运行在SAP HANA云服务器上。需要根据部署场景&#xff0c;创建一台或多台HANA云服务器&#xff0c;用于部署SAP HANA软件。请参见方案和数据规划相关章节&#xff0c;确定HANA云服务器数量及相关规划信息。在集群场景下创建多台HANA云…

Nacos 2.0 升级前后性能对比压测

简介&#xff1a; Nacos 2.0 通过升级通信协议和框架、数据模型的方式将性能提升了约 10 倍&#xff0c;解决继 Nacos 1.0 发布逐步暴露的性能问题。本文通过压测 Nacos 1.0&#xff0c;Nacos 1.0 升级 Nacos 2.0 过程中&#xff0c;Nacos 2.0 进行全面性能对比&#xff0c;直观…

深入浅出讲解MSE Nacos 2.0新特性

简介&#xff1a; 随着云原生时代的到来&#xff0c;微服务已经成为应用架构的主流&#xff0c;Nacos也凭借简单易用、稳定可靠、性能卓越的核心竞争力成为国内微服务领域首选的注册中心和配置中心&#xff1b;Nacos2.0更是把性能做到极致&#xff0c;让业务快速发展的用户再也…

交换机是如何对数据包打标签去标签的_条形码软件如何在标签纸上套打可变条码...

在制作商品标签时&#xff0c;通常会遇到标签纸上已经有部分内容&#xff0c;需要我再添加打印一些对应的信息(如下图)&#xff0c;那么这种情况下&#xff0c;如何比较简单的在合适位置上打印可变条码呢&#xff0c;下面我们就来详细看一下在中琅条形码软件中套打可变条码的操…