DM 源码阅读系列文章(三)数据同步处理单元介绍

2019-04-11 12:12:07 +08:00
 PingCAP

作者:lan

本文为 DM 源码阅读系列文章的第三篇,上篇文章 介绍了 DM 的整体架构,DM 组件 DM-master 和 DM-worker 的入口代码,以及两者之间的数据交互模型。本篇文章详细地介绍 DM 数据同步处理单元( DM-worker 内部用来同步数据的逻辑单元),包括数据同步处理单元实现了什么功能,数据同步流程、运行逻辑,以及数据同步处理单元的 interface 设计。

数据同步处理单元

从上图可以了解到目前 DM 包含 relay log、dump、load、binlog replication ( sync ) 4 个数据同步处理单元,涵盖了以下数据同步处理的功能:

数据同步流程

Task 数据同步流程初始化操作步骤:

  1. DM-master 接收到 task,将 task 拆分成 subtask分发给对应的各个 DM-worker

  2. DM-worker 接收到 subtask 后 创建一个 subtask 对象,然后 初始化数据同步流程

初始化数据同步流程 的代码中我们可以看到,根据 task 配置项 task-mode 的不同,DM-worker 会初始化不同的数据同步流程:

运行逻辑

DM 数据同步处理单元 interface 定义在 dm/unit,relay log、dump、load、binlog replication ( sync )都实现了该 interface (golang interface 介绍)。

实际上 DM-worker 中的数据同步处理单元分为两类:

两类数据同步处理单元的使用逻辑不同,这篇文档会着重讲一下 subtask 独享的数据同步处理单元的使用逻辑,不会囊括更多的 relay log 相关的内容,后面会有单独一篇文章详细介绍它。

relay log 相关使用代码在 dm/worker/relay.go 、具体功能实现代码在 relay/relay.go,有兴趣的同学也可以先行阅读一下相关代码,relay log 的代码注释也是比较丰富,并且简单易懂。

subtask 独享数据同步处理单元使用逻辑相关代码在 dm/worker/subtask.go。subtask 对象包含的主要属性有:

主要的逻辑有:

小结

本篇文章主要介绍了数据同步处理单元实现了什么功能,数据同步流程、运行逻辑,以及数据同步处理单元的 interface 设计。后续会分三篇文章详细地介绍数据同步处理单元的实现,包括:

973 次点击
所在节点    推广
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/554031

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX