瑶池数据库容灾体系:助力数据业务持续在线
内容介绍:
一、迅雷集团RDS异地多活实践
二、瑶池数据库容灾体系
主要分享关于瑶池数据库整体容灾体系的构建以及在业务上的最佳实践,在过去几年,一些国内外的云厂商以及保有机房的知名的企业基本都经历过像机房故障、数据安全等风险问题,物理层面的硬件故障或者运维层面的操作不当,这些风险问题都可以通过流程尽量避免,但很难做到100%的一个杜绝。数据库作为最为核心的存储组件在如何进行容灾来应对在故障出现的时候快速进行切换、支撑业务的持续可用以及数据的不丢失,持续可靠性就显得至关重要。
一、迅雷集团RDS异地多活实践
陈震宇先生分享迅雷集团的业务及瑶池数据库所构建的容灾体系,主要讲述使用阿里云RDS在迅雷进行异地多活和容灾方面的一些实践和演进。
1、迅雷简介
迅雷是全球领先的去中心化服务商,该公司愿景是构建全球最大的去中心化存储与传输网络,公司的产品目前有迅雷客户端、迅雷会员、迅雷影音和迅雷直播等。
2、迅雷容灾多活体系
介绍迅雷容灾多活体系的演进过程。最早使用的是异地冷备的方式,存在冷备中心不工作,关键时候不敢切换,成本严重浪费的问题。基于这些问题演进成同城双活的架构,但依然有一些问题,本质上数据仍然是单点写,有写的瓶颈并且资源扩充有局限,也没办法预防地区级的灾难。最后在阿里云RDS产品的帮助下,基于最早的这两个方案,实现了一个两地三中心的容灾多活体系架构。
3、异地多活设计思考
核心业务单元包含最核心的业务,比如账号应该进行封闭调用。共享业务单元主要是被核心业务高频调用的一些业务,比如支付。共享业务单元跟核心业务单元部署在一起,统称叫一个单元。全局单元是非核心的一些应用和数据。
4、不同的服务类型的多活实践
总共有三种服务类型。首先是单元化服务,单元内必须封闭调用,不依赖于其他单元,在中心和单元都实现双写双读,然后再通过RDS做一个双向同步,单元化服务是多活主要面向的服务类型。然后是中心化服务仅中心提供服务,各单元读写请求均路由到中心。最后普通服务就是不做任何改造,就近访问本地,单元里面只做一个读的操作,读写全是在中心。
5、迅雷数据库层的多活架构
业务部署在不同的两个region,通过DNS同时去写reign A的RDS MySQL,reign A的RDS MySQL包括一个同城双活的架构,然后再通过DTS同步到reign B的RDS。通过这个架构实现数据的实时容灾、一键储备切换以及数据的保护,这个两地三中心的架构,在RDS跟DTS的支持下,实现了迅雷异地多活的容灾。
二、瑶池数据库容灾体系
1、瑶池数据库容灾体系概览
(1)业界容灾体系分级
在业界的整个通史里,通常将容灾分成三个层级。第一个层级是数据级容灾,以数据为中心构建同城或者是跨地域的数据备份,出现故障可以基于这些备份文件来进行恢复,主要保障数据的可靠性。第二个层级是应用级容灾,在数据级容灾的基础之上构建了一套对等冗余的应用系统,应用与应用之间通过数据同步或者是异步复制的方式来进行数据的一个对等保障。在这套架构之下,出现故障可以快速进行应用切换来保障应用的可用性。第三个层级也就是最高的一个层级,叫业务级容灾,完全以业务为中心,在应用的基础之上,考虑到了业务整体恢复所需要的包括人员、场地、设施等冗余架构。通常它多为单元化或者是异地多活的一套部署架构,业务级容灾的目标是出现故障的时候,所有使用业务的终端客户可以近乎无感的继续使用业务。
(2)瑶池数据库容灾体系
为支撑企业构建一套多层级的容灾架构,整个瑶池数据库孵化了一套完备的容灾体系,既包括基础的数据备份容灾,也包括实地级别的同城以及异地容灾,甚至包括数据的多点铁路全球多活的架构,都可以在瑶池数据库的控制台上面一键搭建出来,从而支撑企业在应对机器、机房乃至是整个地域级故障出现的时候,都可以快速地进行逃逸,保障业务的持续可用,保障数据的持续可靠。
2、瑶池数据库容灾方案
(1)备份容灾
对每一个实例的全量数据定期做一个完整的数据备份,同时会对增量的数据或者是日志文件进行实时的备份上传,每一个备份文件都会以多副本的形式存储在同一个地域的多个不同的机房内,当某个机房出现故障的时候,可以从同地或者是异地的备份文件里面拿出数据来进行恢复。相应的在整个恢复的效率上面,也进行了改进以及提升,基于copy management的技术,在云上实现了一套CDN的快照恢复能力,可以将传统的物理备份文件以及增量的binlog日志文件实时合成一个快照文件。在出现故障的时候,可以通过快照的秒级挂载将这一个实例挂载在一个全新的实例上,在最少部分的一个binlog实现比较快速的一个prtr的按时间点恢复的能力。相比于传统的物理备份以及恢复的效率,可以提升近20倍,可以大幅度的去降低企业在故障发生之后进行数据恢复的效率。
(2)城双机房容灾
第二个层级的容灾在于实地的一个同城双机房容灾,这套架构在可用性以及成本上的相对均衡,是目前整个瑶池数据库使用最多的一个架构。这里面作为典型的RDS以及polar DB的实例为例啊,储备的两个节点会分别部署在两个不同的机房内,当故障发生的时候会在几秒钟的时间内,最长不超过30秒完成一次自动的HA的高可用切换,保障数据库业务的持续可用,为了降低整个数据库切换过程当中对应用的影响,在应用与数据库之间构建了一套???,可以直接进行连接的持续保持,进一步降低整个切换对应用的影响。在整个这个切换的故障发生之后的应急切换属于fillover,整套高可用系统会实时对数据库所依赖的这些上下游组件进行实时的事件监测,既包括服务器的事件,也包括操纵系统层面的事件,这些事件在进入事件处之后会进行自动的分析,如果识别是一个高风险的事件,就会在故障发生之前提前触发切换,不仅可以去降低在故障突发的情况下集体切换的一个拥堵,还将一次不可预知的切换变成了可预知的切换,进一步去降低对整个应用系统的影响。这样架构的实现,RDS以及polarDB都可以对外提供超过4个9的soa保障。
(3)同城三机房容灾
机房更为充沛的地域提供了更高层级的容灾体系,即同城三机房的架构。RDS以及polarDB的每一个数据库的节点都会部署在三个以上的不同机房。同时底下基于??的分布式写入算法,确保每一次数据都为多数的写入。在这套架构之下,除了能够实现自动的HA切换之外,还可以保障每次切换完成之后数据的不丢失,真正做到rpo=0。这套架构会更适合企业应用在一些核心的业务产品上面,尤其是像金融保险等核心产业上面更为实用。
(4)异地容灾(两地多中心)
在整个这个同城容灾的基础之上,在瑶池数据库层面上面构建了一套完备的异地容灾体系,每一个rds或者是polardb的实例都可以部署在不同的两个地域上面。地与地之间通过我们的数据传输服务dts或者是原生的一个数据库同步的方式来进行数据的传输以及复制。当某一个地域出现不可避免的全地域级的故障,或者是说企业有一些跨地域的容灾演练需求的时候,可以通过瑶池的控制台或者是open epi来进行一键的切换。对整个异地容灾体系做了一次全面的升级,数据与数据之间传输的同步电路进行了全面的service化的改造,这条传输电路会根据传输数据量的大小自动进行规格的弹升以及弹降,进一步降低在构建这个异地两地多中心架构的时候的成本支出。
(5)IDC到瑶池数据库容灾
越来越多的客户打通了IDC到瑶池数据库的网络体系,构建了两个不同环境下的容灾系统,在这套架构之下,除了可以使用上述的数据传输dts服务来进行两个节点之间的数据同步以及打通之外,RDS也全面开放了内核权限的支持,机房内开源的MySQL或者??通过原生注入向全体master这样的一个命令。直接与云上的RDS进行打通,从而可以进行更为灵活以及统一的拓扑管理。
(6)全球多活数据库
在整个同城以及异地容灾的基础之上,构建了一套全球多活的数据库,既包括缓存层的数据库也包括持久化成的数据库RDS买polarDB MySQL,可以在全球阿里云所支持的这个地域范围内进行多点的数据节点的建立,并且在每一个数据节点之间都通过数据传输的电路进行节点与节点之间的数据同步,确保数据的最终一致性。在这套架构之下,内置了多种数据冲突的解决方案,同时也支持到了防循环的复制以及秒级的一键切换,可以支撑企业去快速进行的单元化以及全球化系统的改造以及构建。如游戏行业里面的全球多活以及在电商行业里面的一个跨境交易的场景都可以基于瑶池数据库的全球多活数据库来进行快速的一个构建。
3、最佳实践案例
整个瑶池数据库从数据备份到同城到异地,再到全球多活的能力构建。支撑了迅雷在内的多家企业的整个容灾体系的建设,分享三个比较典型的不同行业的案例。
(1)微财:IDC到瑶池数据库实时容灾解决方案
第1个案例来自于金融行业,微财科技在上云的阶段打通了整个IDC到阿里云的一个网络环境,其非核心的这个业务数据通过DBS服务,实时备份到云上,当故障出现的时候,可以快速的基于上述的CDN的技术恢复到RDS上面来进行数据的访问,而其所有的核心业务数据则直接通过DTS加网络专线的方式实时同步到RDS的service节点。在平时没有故障的时候,service节点作为容灾节点以0.5个seo极小的规格运行,而当整个机房出现故障之后,可以将流量直接切到阿里云上面,service节点会在3到5秒的时间之内进行一个快速的抬升,支撑其企业整个流量的洪峰,基于这样一套数据容灾与应用容灾相结合的方式,同时基于在应用容灾上面使用的RDS MySQL的一个service节点,不仅帮助整个微财业务消除了IDC机房的单点故障,同时也大幅度的降低为采取构建这套容灾系统所进行的成本花费。
(2)云数据库RDS支撑巴黎奥运会异地容灾系统
第2个案例来自巴黎奥运会,巴黎奥组委的所有核心的赛事分发系统基于RDS实地在欧洲的法兰克福以及英国构建了一套核心的两地四中心容灾架构。地与地之间通过原生数据传输的方式来保持数据的实时同步,在这套架构之下,在所有预期范围内的切换始终保障了一个ipo=0,rpo<60s的一个保障,那么即使在一个最为恶劣的情况下,假设法兰克福所有的机房全坏了,在非预期情况下的切换依然可以实现分终极的rpo以及ipo的保障。在最为恶劣的情况下,巴黎奥运会整个赛事的分发系统依然可以在几分钟的时间之内重新恢复运转,去支撑整体的一个全球赛事的转播。
(3)小鹏汽车基于RDS+DTS构建双活系
最后一个案例来自于新能源行业的小鹏汽车,小鹏汽车基于RDS+DTS构建了一套在中国内的双活系统。所有的核心业务数据都可以直接就近进行读写访问,大幅度的降低了访问的延迟,同时通过DTS内置的一个防循环写路以及数据的断点续传等能力,保障了整个系统数据的最终一致性。通过RDS在同城范围内的高可用自动切换以及异地的一键容灾切换,保证了在极端故障场景下,依然可以实现分钟级的ipo以及rpo的能力。
瑶池数据库容灾能力得以在像小鹏汽车、巴黎奥运会等核心新业务使用并得到提升,我们始终希望通过瑶池数据库等一系列产品能力以及容灾能力的构建可以帮助更多的客户以及企业数据业务永远在线,数据价值不断放大的使命。