作者:吕海龙爱可生 DTLE 团队成员,负责 DTLE 开发 ,日常问题处理以及相关问题的排查。本文来源:原创投稿*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 从 job 文件到源端目标端的数据传输,dtle 到底是如何实现的?传输过程中的高可用,又是由谁实现呢? 下面,我们就简单的介绍一下,job 实现的大体流程。 结构 如上图所示,在 job 被传入服务器中,为了将 job 中的任务映射到客户端,job 会形成两个 allocation,task,以及 driver,而 job 实现期间的服务器分配,则是通过 evaluation 来实现。evaluation:评估是 dtle 做出调度决策的机制。allocation:分配是作业中的任务组和客户端节点之间的映射。分配由 dtle 服务端创建,作为评估期间的调度决策的一部分。task:job 中声明的 task,记录了源端,或者目标端的连接信息以及所需要复制的库表信息。driver:驱动,功能的具体实现,dtle 数据传输的具体实现,有 driver 进行用实现。 详解 evaluation评估是 dtle 做出调度决策的机制。当理想的状态(作业)或实际的状态(客户端)发生变化时,dtle 创建一个新的评估,以确定是否必须采取任何行动。在创建一个 job 后,同样会触发一次评估。 allocationallocation,表示 job 的分配,它记录了 task 的详细的信息,同时,它是 dtle 进行高可用部分调度的一环,在 dtle 的官方文档中,我们可以通过对应的 api 接口,查看 allocation 的信息,并且从中查看到 task 的运行状态等等信息,报错信息等等,用户可以通过 allocation 的报错信息,确定问题来自于源端,或者目标端。 task通过官方文档中的 job 结构,我们可知,task 被分为了源端和目标端,他们各自记载了对应的数据库信息以及所要传输的库表信息,总体来说,task 是一个任务实现的最基本单元,他指定任务的驱动、驱动的配置、约束和所需的资源。在 task 启动之后,则会调用对应的 driver。{{ "Name":"dtle-demo", "Tasks":[ { "Type":"Src", "Config":Object{...} }, { "Type":"Dest", "Config":Object{...} } ]}} driverdriver:driver,执行任务的具体方法,driver 承担了数据传输的具体实现,从读取 binglog,到数据的回放,都由 driver 进行实现。driver 只为数据传输服务。 总结 以上,便是一个 job,从请求提交,到最终实现所经历的一个简单流程。总体来说,我们一般将 job 的实现分为两个部分,一个部分是调度,调度部分实现 job 的高可用,以及 job 转移等一系列事物。而来另外一部分,则是传输部分的具体实现,从源端目标端的连接,到数据的抽取、清洗、回放。 相关链接 dtle 官方手册:https://actiontech.github.io/dtle-docs-cn/ 分类: DTLE 数据传输组件 标签:源码解析