背景

在此之前已经有官方很多关于 DM 的优秀文章了,比如

这些文章从原理方面非常详尽地介绍了 DM 的相关功能,是非常好的学习资料。但是

而外部的文章则大部分集中在 DM 的使用上而不是实现上。

基于此,我想开一个坑《DM 数据旅程系列》,每一篇文章将以一个个小功能为线索,带大家理解 DM 中的各种实现。如果要讲的功能太大,也会拆分成小模块放出。每一步都会尽量放出 GitHub 地址,方便大家跟踪学习~

数据旅程出自于龙少 PPT 中提到的用户旅程和数据旅程,指我们可以通过数据(字节)传输的途径。在看一段代码时,我们可以思考这个字节是从哪里来的,到哪里去,作用是什么,通过理解数据旅程来理解整个产品它的深层原理,并且可以通过改变数据规模(提升/降低数据数量级)和场景(不同的时间不同的位置)来理解产品的缺点(bug)。

以上都是个人拙见(废话),欢迎提意见~

当然,现在的 DM 正在飞速的发展迭代中,本系列的内容也可能马上就会过时,现在是 2021 年 10 月 31 日,本系列文章预计将会覆盖 DM v5.3.0-vx.x.x 的代码逻辑。

如果认为文章中有任何可以改进的地方, 欢迎大家提出自己的想法。同样地,因为 DM 还在快速迭代,还有很多地方都有改进的地方,如果大家对代码实现有任何疑问,也都可以去 repo 中直接提 issue。

读者要求

  • 能看懂 Golang 语法
  • 了解 grpc、etcd
  • 计划章节
  • Start task
  • Stop task
  • Pause task
  • Resume task
  • Full mode(dumpling)
  • Incremental mode(syncer)
  • Block-allow list
  • Binlog-filter
  • Enable relay log
  • Permistic sharding ddl
  • Optimistic sharding ddl
  • 。。。