【GaussDB迁移攻略】DRS支持CDC,解决大规模数据迁移挑战

目录

1 背景介绍

2 CDC的实现原理

3 DRS的CDC实现方式

4 DRS的CDC使用介绍

5 总结


1

背景介绍

随着国内各大行业数字化转型的加速,客户的数据同步需求越来越复杂。特别是当需要将一个源数据库的数据同时迁移到不同的目标库场景时,华为云通常会创建一个或多个DRS(Data Replication Service)任务来进行数据同步。

但是,随着源库数据量的增大,DRS任务数量也越来越多,会造成源库性能下降,甚至影响源库正常业务。

为了解决这一问题,华为云采用了DRS支持CDC(Change Data Capture,变更数据捕获)的数据迁移方案。本文将详细介绍其实现原理、实现方式及使用方法。

2

CDC的实现原理

CDC的核心思想是监测并捕获数据库的变动(包括插入、更新和删除操作),并将这些变更按发生的顺序完整记录下来,以供其他服务进行订阅及消费。

CDC主流的实现机制有2种:基于查询和基于日志

  • 第一种,基于查询

实现方式:通过SQL语句查询数据库中的变更记录。

优点:实现简单。通过简单SQL命令,即可完成数据查询,无需额外适配。

缺点

1)高延迟,依赖查询效率。

2)影响源库性能。

  • 第二种,基于日志

实现方式:通过解析日志,获取数据库的变动记录。

优点

1)低时延。数据变化快速记录到日志中,解析识别速度快。

2)高保真。日志中包含完整的DDL和DML变更,可以精确捕捉源库的各种变动。

3)不会增加源库压力。

缺点:灵活性有限。各个引擎的日志机制不同,需要深入了解后适配开发。

3

DRS的CDC实现方式

DRS的CDC功能主要借鉴了CDC的思想,采用基于日志的方式,并提出了1+N的架构创新,如图1所示。该架构通过一个CDC任务连接源库进行日志抽取和解析,而下游的多个DRS任务则直接通过CDC获取数据进行增量同步,不再连接源库。因此也不会对源库产生压力。

图片

1 DRSCDC实现架构

图1中,CDC负责日志下载、日志解析和增量数据的发布;DRS负责全量迁移、日志下载、日志解析(过滤)和增量数据回放。

在新架构中,需要2个任务来完成数据迁移,相对于单任务完成迁移操作,低时延和高可靠成为该架构的主要技术挑战。

3.1 低时延

3.1.1 NIO网络通信

为了保证低时延,需要CDC和DRS任务之间的数据高效传输。NIO技术成为华为云的优选,这种面向缓冲区、基于通道的I/O处理方式,能够高效地处理大量数据和高并发请求。

NIO的核心组件:

缓冲区(Buffer)

用于存储和处理CDC和DRS任务各自的数据,确保数据传输的高效性。

通道 (Channel)

实现CDC和DRS任务之间的数据传输,支持双向和异步操作,提高数据传输的效率和可靠性。

选择器(Selector)

管理多个通道的IO事件,确保一个线程可以同时监控多个通道的IO操作,实现非阻塞IO,提高系统的并发处理能力。

典型NIO模型的处理方式,如图2所示,一个线程可以管理多个网络连接。

图片

典型NIO模型的处理方式

回到我们业务本身CDC(RFS-Server)和DRS(RFS-Client)进行数据传递时,我们采用多路复用IO模型,交互方式如图3所示:

图片

3 CDCDRS组件交互

SocketListener线程:实时监听来自RFS-Client发送的连接请求;

SocketReader线程:负责校验请求是否有效,读取下游任务发送的命令,并进行分发处理;

RequestProcesser线程:执行具体操作,如读取文件长度、读取文件属性等。

传输性能测试结果:

测试项(客户端数量)

平均速度(MB/s)

最小(MB/s)

最大(MB/s)

1

268.2

129.1

622.9

5

112.9

29.1

833.9

测试环境:

类型

规格

ECS实例

c3.xlarge.2

3.1.2 数据压缩

对已解析的日志文件进行压缩,以减少磁盘占用,降低存储成本,并进一步提高数据的读写性能。

  • 压缩算法

在数据迁移过程中,如果进行压缩,那么无损压缩算法成为我们的必选。当前选用LZ4压缩算法,尽管压缩率不是最优(接近2.0),但是压缩和解压缩速度极快。

LZ4 的主要算法思想是将重复的字符串替换为对已识别字符串的引用。具体工作原理是在数据流中使用滑动窗口识别出现在一定范围内的数据序列。找到匹配项后,算法会将第二次出现的匹配项替换为对第一次出现的引用,从而减少数据的大小。

LZ4专注于查找固定长度的序列,简化了匹配过程。同时,使用哈希表存储和快速检索固定长度序列的位置,以实现快速引用。

从源库抽取的日志文件,统一解析为THL文件。存储格式如下:

字符串:使用一个字节表示是否存在,实际内容使用UTF格式;

基本数据类型:使用固定长度。

THL文件是序列化和反序列严格对称。这种紧凑性设计,占用更少的存储空间。

  • 数据剪枝

从实际业务需求出发,在CDC任务中提供2种对象选择方式:整库和部分表选择。通过对象选择,过滤冗余的源库日志数据,减少磁盘空间占用。

3.2 高可靠

3.2.1 数据安全

在数据迁移过程中,下游的所有DRS任务都依赖CDC,从中拉取日志数据。除了性能外,如何可靠地传输数据,并保证传输过程中数据不丢失,成为衡量可靠性的关键因素。

  • 文件完整性校验

由于网络环境的复杂性,数据在传输时有可能会出错。因此,针对传输的每条数据,将校验其序列号和长度是否一致。传输完成后,再次校验文件长度,来保证文件的一致性。

  • 加密传输

针对安全极度敏感客户,可以启动SSL传输加密。SSL通过使用数字证书和加密算法建立加密连接,保证数据传输过程的机密性。然而,启用 SSL 传输会导致性能下降约三倍,建议按需使用。

  • 安全位点

CDC任务从源库拉取日志时,受限于源库日志的保留时间。如果日志被清理,则无法继续从源库拉取。对于DRS任务,从CDC拉取日志时,不再受限源库日志的清理,可以持续拉取使用。

但是,用户可以调整放大CDC任务的同步对象范围。在这种情况下,调整前产生的数据,即没有新增对象的日志数据将不再可用。故引入“安全位点”概念,确保之前的数据不再支持拉取使用,且从安全位点之后的数据都是完整有效。

3.2.2 故障恢复

DRS任务自身已具备断点续传和故障恢复等功能,针对CDC任务和DRS任务之间因为网络闪断等原因,导致通信断开时DRS任务失败,如果通信条件恢复,那么,DRS任务也需要快速恢复。

  • 文件异常快速识别

通信中断后,为了保证THL文件数据的完整性,会清理本地文件,并重新拉取。

DRS任务在生成本地THL文件时,会标记文件的UUID,通过UUID的变动,可以快速识别文件变化,如图4所示。

图片

文件异常快速识别 

4

DRS的CDC使用介绍

DRS的CDC使用介绍(以MySQL为例)

1)创建CDC任务

  • 步骤一 创建CDC实例

设置数据流动方向、源库引擎、源库实例

图片

  • 步骤二 源库配置

填写源库用户名和密码,进行测试连接。

图片

  • 步骤三 任务配置

设置同步对象的范围,支持不同库配置不同规则。

图片

  • 步骤四 预检查

检查源库是否满足迁移条件,权限、表结构、源库参数等校验。

2)创建同步任务

  • 步骤一 创建同步实例

配置数据流动方向、源库引擎、同步模式。

图片

  • 步骤二 源库及目标库

源库信息中,开启CDC开关,可以选择CDC任务,后续从CDC中拉取日志。

图片

  • 步骤三 设置同步

在“编辑同步任务”页面,默认的同步对象是CDC中已选择的对象范围,选择后,支持映射。

图片

  • 步骤四 数据加工

针对已选择的对象,配置数据过滤,列加工等。

  • 步骤五 预检查

检验CDC任务连通性、对象选择范围是否合理等。

3) CDC任务运行

  • 发布列表

DRS任务启动后,即可再发布列表中查看下游的所有DRS任务。

图片

5

总结

DRS支持CDC的数据迁移方案,即CDC通过拉取源库日志,解析成标准的THL格式文件,进行增量数据发布。DRS直接拉取THL文件,进行解析和过滤,实现增量数据回放,有效的降低了多个DRS任务直连源库对源库性能的影响。针对源库数据量级大需要拆分任务迁移(一对多场景),以及对源库性能敏感客户优先推荐使用该方案。

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

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

相关文章

PSA Certified

Arm 推出的 PSA Certified 已成为安全芯片设计领域的黄金标准。通过对安全启动、加密服务以及更新协议等方面制定全面的要求,PSA Certified为芯片制造商提供了清晰的路线图,使其能将安全机制深植于定制芯片解决方案的基础架构中。作为对PSA Certified的补…

游戏引擎学习第286天:开始解耦实体行为

回顾并为今天的内容定下基调 我们目前正在进入实体系统的一个新阶段,之前我们已经让实体的移动系统变得更加灵活,现在我们想把这个思路继续延伸到实体系统的更深层次。今天的重点,是重新审视我们处理实体类型(entity type&#x…

遥感图像非法采矿矿区识别分割数据集labelme格式1818张3类别

数据集格式:labelme格式(不包含mask文件,仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数):1818 标注数量(json文件个数):1818 标注类别数:3 标注类别名称:["river","illegal-mining"…

python爬虫实战训练

前言:哇,今天终于能访问豆瓣了,前几天爬太多次了,网页都不让我访问了(要登录)。 先来个小练习试试手吧! 爬取豆瓣第一页(多页同上篇文章)所有电影的排名、电影名称、星…

Go语言实现生产者-消费者问题的多种方法

Go语言实现生产者-消费者问题的多种方法 生产者-消费者问题是并发编程中的经典问题,涉及多个生产者生成数据,多个消费者消费数据,二者通过缓冲区(队列)进行协调,保证数据的正确传递和同步。本文将从简单到…

【Opencv】canny边缘检测提取中心坐标

采用opencv 对图像中的小球通过canny边缘检测的方式进行提取坐标 本文介绍了如何使用OpenCV对图像中的小球进行Canny边缘检测,并通过Zernike矩进行亚像素边缘检测,最终拟合椭圆以获取小球的精确坐标。首先,图像被转换为灰度图并进行高斯平滑…

蓝桥杯12届国B 123

题目描述 小蓝发现了一个有趣的数列,这个数列的前几项如下: 1,1,2,1,2,3,1,2,3,4,⋯ 小蓝发现,这个数列前 1 项是整数 1,接下来 2 项是整数 1 至 2,接下来 3 项是整数 1 至 3,接下来 4 项是整数 1 至 4&…

鸿蒙OSUniApp 制作动态加载的瀑布流布局#三方框架 #Uniapp

使用 UniApp 制作动态加载的瀑布流布局 前言 最近在开发一个小程序项目时,遇到了需要实现瀑布流布局的需求。众所周知,瀑布流布局在展示不规则尺寸内容(如图片、商品卡片等)时非常美观和实用。但在实际开发过程中,我…

ThinkStation图形工作站进入BIOS方法

首先视频线需要接在独立显卡上,重新开机,持续按F1,或者显示器出来lenovo的logo的时候按F1,这样就进到bios里了。联*想*坑,戴尔贵。靠。

【源码级开发】Qwen3接入MCP,企业级智能体开发实战!

Qwen3接入MCP智能体开发实战(上) 一、MCP技术与Qwen3原生MCP能力介绍 1.智能体开发核心技术—MCP 1.1 Function calling技术回顾 如何快速开发一款智能体应用,最关键的技术难点就在于如何让大模型高效稳定的接入一些外部工具。而在MCP技术…

Linux下载与安装

一、YUM 1.1 什么是YUM 在CentOS系统中,软件管理方式通常有三种方式:rpm安装、yum安装以及编译(源码)安装。 编译安装,从过程上来讲比较麻烦,包需要用户自行下载,下载的是源码包,需…

PostgreSQL中的全页写

一、概述 在PGSQL数据库中,默认的页面大小为8KB,但是磁盘buffer的大小为4KB,扇区大小为512B。这就导致在操作系统的角度看数据库的写操作,其实并不是一种原子操作。如果操作系统发生了系统级别的故障,此时正好操作系统…

WEB安全--Java安全--shiro550反序列化漏洞

一、前言 什么是shiro? shiro是一个Apache的Java安全框架 它的作用是什么? Apache Shiro 是一个强大且灵活的 Java 安全框架,用于处理身份验证、授权、密码管理以及会话管理等功能 二、shiro550反序列化原理 1、用户首次登录并勾选记住密码…

2024 睿抗机器人开发者大赛CAIP-编程技能赛-专科组(国赛)解题报告 | 珂学家

前言 题解 2024 睿抗机器人开发者大赛CAIP-编程技能赛-专科组(国赛),陈越姐姐出题。 国赛比省赛,难度增强了不少,题目就剩下4个题了。 涉及堆栈,hash表,优先队列等高阶数据结构的使用&#x…

15 C 语言字符类型详解:转义字符、格式化输出、字符类型本质、ASCII 码编程实战、最值宏汇总

1 字符类型概述 在 C 语言中,字符类型 char 用于表示单个字符,例如一个数字、一个字母或一个符号。 char 类型的字面量是用单引号括起来的单个字符,例如 A、5 或 #。 当需要表示多个字符组成的序列时,就涉及到了字符串。在 C 语言…

操作系统-锁/内存/中断/IO

文章目录 锁自旋锁互斥锁悲观锁和乐观锁 内存管理物理/虚拟内存页表段表虚拟内存布局写时复制copy on writebrk,mmap页面置换算法 中断中断分类中断流程 网络I/OI/O模型服务器处理并发请求 锁 自旋锁 自旋锁是一种基于忙等待(Busy-Waiting)…

割点与其例题

割点 定义: 若一个点在图中被去掉后,图的连通块个数增加,那么这个点就被称为“割点”。如下图所示红点。 定义说白了就是若去掉一个点,图被“断开”的点称为割点。 朴素算法: 枚举每个点 u。遍历图,如果…

图卷积神经网络(Graph Convolutional Network, GCN)

最近看论文看到了图卷积神经网络的内容,之前整理过图神经网络的内容,这里再补充一下,方便以后查阅。 图卷积神经网络(Graph Convolutional Network, GCN) 图卷积神经网络1. 什么是图卷积神经网络(GCN&#…

安装win11硬盘分区MBR还是GPT_装win11系统分区及安装教程

最近有网友问我,装win11系统分区有什么要求装win11系统硬盘分区用mbr还是GPT?我们知道现在的引导模式有uefi和legacy两种引导模式,如果采用的是uefi引导模式,分区类型对应的就是gpt分区(guid),如果引导模式采用的是legacy&#xf…

服务培训QDA 的安装调试方法,硬件模块的讲解和软件控制台使用及系统测试

#服务培训##质谱仪##软件控制##硬件模块# 以下是关于Waters QDa单杆液质质谱仪的安装调试、硬件模块讲解以及软件控制台使用培训的相关内容: 安装调试 场地准备:用户需要提前准备好实验室,确保实验室环境符合仪器的要求,如温度、…