5.数据迁移模块
5.1 技术选型
跟数据订阅不同,Mysql的数据迁移五花八门,实现原理也都各不相同。
综合来看,我们选择了DataX作为数据迁移引擎。
5.2 基本原理
DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能。
我们主要使用了MySQL的数据同步,它的实现原理比较简单,就是通过
select * from table;
获取全量数据,然后写入到目标库中。
当然,这里利用了JDBC的流式查询,避免OOM。同时,datax也支持自定义限速。
5.3 部署架构与使用方式
Datax的使用方式比较简单,通过配置任务Json,执行脚本即可。
由于数据迁移使用不多,且基本是一次性使用,所以暂时是直接部署在DTS的服务中,通过Java的Process类进行相关处理。
- 创建Datax所需的conf文件,并返回地址
- 使用Runtime.getRuntime().exec()执行 Datax的python脚本
- 根据返回的Process对象,处理成功/失败、执行输出日志等
后面会考虑进一步迭代,采用独立服务器部署Datax,然后通过自定义Java服务或者使用Saltstack实现远程调用脚本。
6.数据同步模块
6.1 技术选型
数据同步的方案主要有三种
综合实施性、技术成熟度、双向同步需求的考虑,我们选择了otter作为数据同步引擎。
6.2 基本原理
基于Canal开源产品,获取数据库增量日志数据。Canal原理参考 数据订阅 的基本原理。
典型管理系统架构,manager(web管理)+node(工作节点)。
6.3 部署架构
核心组件:
- zookeeper:解决分布式状态调度的,允许多node节点之间协同工作
- manager: 运行时推送同步配置到node节点
- node: 内嵌canal,负责binlog订阅,并把事件同步到目标数据库;同时,将同步状态反馈到manager上
6.4 改造适配
1)控制台api封装
由于otter-admin的技术栈比较旧,采用webx框架实现,没有前后端分离。
因此,需要根据已有代码,重新封装独立的rpc接口,然后才能对接到DTS服务中,包装相关otter-admin的接口,实现产品化的前台接口逻辑。
2)云原生改造
改造为k8s部署,支持快速扩缩容,具体可以参考我上一篇文章 拥抱云原生,如何将开源项目用k8s部署?
7.总结与展望
从产品设计、技术调研、架构设计到最后研发上线,历时半年左右。最终功夫不负有心人,项目顺利上线,通过前台产品的简单交互与审核,就能秒级快速创建DTS任务。
目前已经支持数十个DTS任务(包括数据订阅、数据迁移、数据同步),落地了多云数据库镜像、ES索引构建、数据实时同步、业务数据订阅等多个业务场景。
未来,还需要做进一步的技术迭代,包括:
1)扩展数据传输引擎
目前已经在尝试接入Redis-shake做Redis的迁移与同步。
后面还会继续尝试HBase-replication的接入,做HBase相关的任务迁移与同步。
这些都可以通过复用 通用服务能力 和 模版流程,实现快速接入。
2)增加调度模块
后续还需要增加任务调度模块,主要实现两方面的能力:
- 根据实例负载进行任务的调度,保证资源的合理使用
- 根据业务特性、重要程度做任务调度,保证资源隔离
3)完成云原生化改造
目前只有otter引擎实现了k8s部署,后面还需要对canal-server、Datax实现k8s部署,满足快速扩缩容,提高资源使用率。