昆明网站建设方案策划,曲麻菜公司网站建设,wordpress 分享后可见,南京 微网站 建站目录
1 背景介绍
2 CDC的实现原理
3 DRS的CDC实现方式
4 DRS的CDC使用介绍
5 总结 1
背景介绍 随着国内各大行业数字化转型的加速#xff0c;客户的数据同步需求越来越复杂。特别是当需要将一个源数据库的数据同时迁移到不同的目标库场景时#xff0c;华为云通常会创建…目录
1 背景介绍
2 CDC的实现原理
3 DRS的CDC实现方式
4 DRS的CDC使用介绍
5 总结 1
背景介绍 随着国内各大行业数字化转型的加速客户的数据同步需求越来越复杂。特别是当需要将一个源数据库的数据同时迁移到不同的目标库场景时华为云通常会创建一个或多个DRSData Replication Service任务来进行数据同步。
但是随着源库数据量的增大DRS任务数量也越来越多会造成源库性能下降甚至影响源库正常业务。
为了解决这一问题华为云采用了DRS支持CDCChange Data Capture变更数据捕获的数据迁移方案。本文将详细介绍其实现原理、实现方式及使用方法。
2
CDC的实现原理 CDC的核心思想是监测并捕获数据库的变动包括插入、更新和删除操作并将这些变更按发生的顺序完整记录下来以供其他服务进行订阅及消费。
CDC主流的实现机制有2种基于查询和基于日志。 第一种基于查询
实现方式通过SQL语句查询数据库中的变更记录。
优点实现简单。通过简单SQL命令即可完成数据查询无需额外适配。
缺点
1高延迟依赖查询效率。
2影响源库性能。 第二种基于日志
实现方式通过解析日志获取数据库的变动记录。
优点
1低时延。数据变化快速记录到日志中解析识别速度快。
2高保真。日志中包含完整的DDL和DML变更可以精确捕捉源库的各种变动。
3不会增加源库压力。
缺点灵活性有限。各个引擎的日志机制不同需要深入了解后适配开发。
3
DRS的CDC实现方式 DRS的CDC功能主要借鉴了CDC的思想采用基于日志的方式并提出了1N的架构创新如图1所示。该架构通过一个CDC任务连接源库进行日志抽取和解析而下游的多个DRS任务则直接通过CDC获取数据进行增量同步不再连接源库。因此也不会对源库产生压力。 图1 DRS的CDC实现架构
图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所示一个线程可以管理多个网络连接。 图2 典型NIO模型的处理方式
回到我们业务本身CDC(RFS-Server)和DRS(RFS-Client)进行数据传递时我们采用多路复用IO模型交互方式如图3所示 图3 CDC和DRS组件交互
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 文件异常快速识别
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任务直连源库对源库性能的影响。针对源库数据量级大需要拆分任务迁移一对多场景以及对源库性能敏感客户优先推荐使用该方案。