ITPub博客

首页 > 数据库 > 国内数据库 > 干货分享 | GBase 8c 分布式核心技术初揭秘—CDC数据同步

干货分享 | GBase 8c 分布式核心技术初揭秘—CDC数据同步

原创 国内数据库 作者:GBASE南大通用 时间:2022-11-01 17:24:16 0 删除 编辑

数据库系统作为企业 IT 基础设施中的重要组件,其稳定性与可用性是上层系统运行的必要基础。并且随着数字化发展,大量的核心业务对于城市级别容灾提出了更高的要求。作为一款分布式数据库, GBase 8c 可轻松实现例如两地三中心架构的集群异地灾备。 GBase 8c 异地灾备集群间的不同节点采用各自对应的高可用部署方式,两地间采用同步或者异步复制的备份方式。可以抵御硬件级别故障、机房级别和城市级别灾难,两地之间距离可以大于 1000 千米。

除此之外, GBase 8c 还支持多集群部署,集群间进行数据双向同步来提供异地多活的架构,以满足对高可用有严苛要求的业务需求。 GBase 8c 实现异地多活的关键,则是其中的数据同步机制,而 CDC 正是实现数据同步机制的核心技术。

下面将主要介绍 GBase 8c 数据库中 CDC 技术的架构及其实现原理。

CDC 技术原理

GBase 8c 中的 CDC (Change Data Capture) ,中文名称为变更数据捕获,是一种通过解析 GBase 8c 的 WAL 增量日志,获取表级别的所有数据变化,并将其转换为可以复制到同构或者异构系统格式的机制。

作为一款多模多态分布式数据库, GBase 8c 的 CDC 实现机制及执行流程上可分为主备式及分布式两大类:

主备式

基于逻辑复制的发布订阅功能是实现 CDC 技术的核心机制,在 GBase 8c 的主备式架构中,数据同步的发布订阅主要执行流程如下:

 

主备式 CDC 执行流程示意图

本地 GBase 8c ,可以指定单个表,也可以指定某个数据库中的所有表,作为逻辑复制的发布端。异地 GBase 8c 为逻辑复制的订阅端,连接本地 GBase 8c 的服务端口。本地 GBase 8c 启动一个 WalSender 线程来读取 WAL 日志进行解码,并输出特定格式的消息发送给异地 GBase 8c 的 ApplyWorker 线程, ApplyWorker 识别特定格式的消息后直接执行相应的 INSERT\UPDATE\DELETE 等语句来完成数据的回放。其中本地的主机通过复制槽( Repliaction Slot )机制来保存消费者偏移量,跟踪订阅者进度。

分布式

不同于主备式架构,分布式架构中 DN 分布在多台服务器中,本地集群的一个事务可能涉及到多个服务器上的 DN 节点。因此,异地集群在进行数据同步及回放时,根据不同的事务处理策略,存在两种不同的执行方式。

1. 基于分片的分布式订阅流程

第一种就是基于分片的分布式订阅,此同步方式的核心机制与主备式相同,也是基于逻辑复制功能。不同的地方在于异地集群在进行订阅时,是以本地 GBase 8c 的 DN 为基准,启动多个订阅任务,分别连接每个 DN 节点。此时异地集群在 CN 中会启动多个 ApplyWorker 线程,每个线程复制一个 DN 节点的逻辑日志。本地集群的每个 DN 启动一个 WalSender 线程来读取本 DN 节点 WAL 日志进行解码,并输出特定格式的消息发送给异地 GBase 8c 的 ApplyWorker 线程进行数据回放。

 

基于分片的分布式订阅流程示意图

此种同步方式,虽然是以 DN 节点个数为并行度进行并行同步,同步效率高,但因为没有有效的机制保证本地集群的分布式事务在异地集群回放的全局有序性,所以也就无法保证回放事务的原子性与全局事务一致性,只能保证数据的最终一致性。

2.CDC 发布订阅操作执行流程

为了解决基于分片的分布式订阅无法保证数据回放的全局事务一致性问题,在分布式架构场景下的第二种同步方式中, GBase 8c 新增了 CDC 节点,通过对所有 DN 上的分布式事务进行合并和排序,来保证异地集群上的事务能够全局有序性的回放,实现数据的强一致,保证分布式事务的原子性。

CDC 节点整体的架构如下图所示:

 

CDC 架构图

CDC 节点采用和 CN 类似的无状态设计,只存储本地集群的元数据信息,当 CDC 节点异常宕掉后,重新拉起实例或使用备用节点即可继续服务。按功能不同, CDC 内部主要由 3 个角色组成:

1. Dumper

Dumper 通过逻辑复制的方式从 DN 上拉取逻辑解码后的 WAL 增量日志,将事务信息输出给 Joiner 进行排序合并。

2. Joiner

Joiner 负责接受各个 Dumper 发送过来的事务信息,将具有相同的 csn 事务进行合并后按照 csn 顺序进行排序,以构建完整的全局事务输出给 Output 线程。

3. Output

Output 负责将完整的事务流输出给异地集群,输出的格式支持 json 、 sql 、 internaloutput (类似于 pgoutput 格式)。当异地集群是 GBase 8c 数据库时,使用 internaloutput 格式进行 replay 性能最优。

该 CDC 同步机制的发布订阅流程具体如下:

 

CDC 执行流程示意图

此时异地 GBase 8c 集群将连接本地 GBase 8c 集群的 CDC 节点来进行订阅任务的创建。本地集群的 CDC 节点启动 n 个 Dumper 线程,并开始接收多个 WalSender 线程输出的逻辑解码增量日志。随后 CDC 的 Joiner 线程通过将增量日志消息进行事务合并和排序操作,构建出完整有序的全局事务信息,并最终由 Output 线程对外进行输出。最后异地集群 CN 节点启动 ApplyWorker 线程,对 Output 线程发来的特定格式信息进行逻辑日志解析及回放操作,完成数据同步。此种数据同步方式保证了异地集群上的事务回放的全局有序性,实现了数据的强一致。

关于 GBase 8c

GBase 8c 是基于 openGauss3.0 构建的一款多模多态的分布式数据库,支持行存、列存、内存等多种存储模式和单机、主备式、分布式等多种部署形态。 GBase 8c 具备高性能、高可用、弹性伸缩、高安全性等特性,可以部署在物理机、虚拟机、容器、私有云和公有云,为关键行业核心系统、互联网业务系统和政企业务系统提供安全、稳定、可靠的数据存储和管理服务。

 


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69979120/viewspace-2921381/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
GBASE南大通用,致力于成为用户最信赖的数据库产品供应商!

注册时间:2020-07-16

  • 博文量
    1329
  • 访问量
    1318640