项目介绍

名称: DataLink['deitə liŋk]
译意: 数据链路,数据(自动)传输器
语言: 纯java开发(JDK1.8+)
定位: 满足各种异构数据源之间的实时增量同步,一个分布式、可扩展的数据同步系统
开源地址:https://github.com/ucarGroup/DataLink

此次开源为去除内部依赖后的版本(开源的是增量同步子系统),在集团内部datalink和阿里的datax还进行了深度集成,增量(datalink)+全量(datax)共同组成统一的数据交换平台

项目背景

随着神州优车集团业务的高速发展,各种各样的数据同步场景应运而生,原有的系统架构难以支撑复杂多变的业务需求,so,从2016年底开始,团队内部开始酝酿datalink这个产品。着眼于未来,我们的目标是打造一个新平台,满足各种异构数据源之间的实时增量同步,支撑公司业务的快速发展。在充分调研的基础之上,我们发现,没有任何一款开源产品能轻易的满足我们的目标,每个产品都有其明显的短板和局限性,所以最终的选项只有"自行设计"。但自行设计并不是凭空设计,现有的数据交换平台、已有的经验、大大小小的开源产品都是我们的设计根基,与其说是自行设计,倒不如说是站在巨人的肩膀上做了一次飞跃。由此诞生了DataLink这样一个产品,其产品特性主要如下:

  • 满足各种异构数据源之间的实时增量同步,提供抽象模型,支持高可扩展
  • 平台提供统一的基础设施(高可用、动态负载、同步任务管理、插件管理、监控报警、公用业务组件等等),让设计人员专注于同步插件开发,一次投入,长久受益
  • 吸收、整合业内经验,在架构模型、设计方法论、功能特性、可运维、易用性上进行全面的升级,在前瞻性和扩展性上下足功夫,满足公司未来5-10年内的各种同步需求

应用现状

DataLink从2016年12月开始立项,第一版于2017年5月份上线,在神州优车集团内部服役到现在,基本上满足了公司所有业务线的同步需求,目前内部的同步规模大体如下

  1. 日均数据同步量800G+
  2. 涉及272个数据库实例之间的3208个同步映射
  3. 60台Worker+2台Manager机器的集群规模

架构简介

DataLink是典型管理系统架构,Manager(Web管理)+Worker(工作节点):
 a. Manager负责Worker的负载均衡、集群的配置管理和系统监控
 b. Worker核心功能是管理Task的生命周期,并配合Manager进行Re-Balance
下面对DataLink架构模型重点模块做概要介绍:

Manager

  • Manager是整个DataLink集群的大脑
  • Manager有三个核心功能
    1)担任整个集群的负载均衡协调器:当集群出现状态变更时,第一时间进行Re-Balance
    2)负责整个集群的配置管理:提供管理后台,配置发生变更时进行事件通知、缓存刷新等操作,保证系统能够获取到最新的变更
    3)监控整个集群的健康状况,主要有:同步是否出现延迟、同步是否出现异常、数据同步TPS、数据同步吞吐量、机器健康状况检查等等

Group

  • 分组是DataLink的一个核心概念,Worker和Task在运行之前必须先知道自己属于哪个分组
  • 分组的目的是:实现组内自治、组间隔离,不同分组会有不同的参数配置、运行策略、高可用级别等等

Worker

  • Worker必须归属于某个分组
  • Worker的核心功能是管理Task的生命周期,并配合Manager进行Re-Balance
  • Worker运行哪些Task受Manager的分配

Task

  • Task的核心功能是进行数据同步
  • 一个Task由一个TaskReader和多个TaskWriter组成,Reader和Writer使用独立的Classloader
  • Task必须归属于某个分组

(Re-)Balance

  • (Re-)Balance的定义:通过一定的负载均衡策略,使Task在Worker节点上均衡的分布
  • (Re-)Balance的单位是Group,一个分组发生(Re-)Balance不会影响其它分组的正常运行
  • 发生(Re-)Balance的时机
  1. Manager发生主备切换
  2. 新的Worker加入分组
  3. 某个Worker离开分组
  4. 新增Task
  5. 删除Task

Plugin

  • 插件模型最大的意义在于解耦和复用,只需要提供一套基础框架,开发一系列同步插件,通过配置组合便可以支持"无限多"的同步场景
  • 插件划分为两种:Reader插件和Writer插件,插件之间通过Task串联起来
  • Task运行时,每个插件都有自己独立的Classloader,保证插件之间的jar包隔离

Mysql

  • DataLink的运行需要依赖各种配置信息,这些配置信息统一保存到Mysql中
  • DataLink在运行过程中会动态产生监控和统计数据,这些数据也统一保存到Mysql中
  • 存储的配置信息主要有: 同步任务信息、工作节点信息、分组信息、数据源配置信息、映射规则信息、监控信息、角色权限信息等

Zookeeper

  • Manager的高可用需要依赖于zookeeper,通过抢占和监听"/datalink/managers/active"节点,实现秒级switch
    注:Worker的高可用并不依赖zookeeper,只要manager能够保证高可用,worker就是高可用的
  • Task会将运行时信息注册到zookeeper,注册信息主要有两类
  1. Task的状态信息(运行、暂停还是出错),通过状态信息可以监控task的健康状况
  2. Task的position信息,通过postion信息可以查看当前的同步进度,也可以实现故障恢复

Netty&Jetty

  • Manager使用Netty提供Tcp服务,用来监听Worker端发送的Coordinator信息(注:Netty只用来做高可用和负载均衡)
  • Manager使用Jetty提供Http服务,主要用来提供web管理功能和接收Worker发送的监控和统计数据
  • Worker使用Jetty提供Http服务,主要用来接收Manager发送的管理指令

Kafka-Client

  • DataLink套用了kafka的(Re-)balance协议
  • 在Worker端和Manager端分别定义了各自的Coordinate模块,这些模块都需要依赖kafka的client包

同步模型

插件体系

  • 插件体系一般由两部分组成:Framework+Plugin,DataLink中的Framework主要指【TaskRuntime】,Plugin对应的是各种类型的【TaskReader&TaskWriter】

TaskRuntime

  • 提供了Task的高层抽象、Task的运行时环境和Task的插件规范

TaskReader&TaskWriter

  • 一个个具体的数据同步插件,遵从Task插件规范,功能自治,和TaskRuntime完全解耦,理论上插件数量可无限扩充

Task

  • 一个个具体的数据同步插件,遵从Task插件规范,功能自治,和TaskRuntime完全解耦,理论上插件数量可无限扩充
  • DataLink中数据同步的基本单位是Task,一个Worker进程中可以运行一批Task,一个运行中的Task由一个TaskReader和至少一个TaskWriter组成,即有:
    1> 程序运行期,同一类型的插件在一个进程中可以有多个实例,实例个数取决于有多少个Task用到了该插件
    2> 程序运行期,插件的生命周期归属于Task,在不同的生命周期阶段,依照Task的配置信息或相关指令,进行创建、初始化、运行或销毁等操作
    3> 理论上,TaskReader和TaskWriter可动态任意组合(能否组合,主要取决于待组合的TaskWriter能否适配TaskReader的Record类型)
    4> 理论上,每新增一种插件,可支持的同步场景可以成倍数的增加(具体几倍,和插件类型和当前已有的插件数量有关系),新增一个TaskReader,可新增的同步场景数量取决于已有TaskWriter的数量,反之亦然
  • 目前,DataLink的TaskReader支持的类型有MYSQL、FLEXIBLEQ、HBASE,TaskWriter支持的类型有Rdbms、ElasticSearch、HDFS、HBASE、FLEXIBLEQ、SDDL

ClassLoader

  • Datalink-Worker进程中,每个类型的插件,都有自己独立的classloader和classpath
  • 原因很简单:class版本隔离的需要,DataLink中,可以开发任意多个插件,出现jar包冲突很正常,必须通过classloader隔离这些冲突

Contract

  • Contract是针对某种类型的数据源定义的【数据模型】,是一份契约和规范,是最高层次的抽象,和编程语言无关,和具体平台无关,和DataLink也没有必然关系
  • Contract是TaskReader和TaskWriter可任意组合的关键,TaskReader输出Contract数据,TaskWriter输入Contract数据,互不感知,但都理解Contract定义的【数据模型】
  • Contract定义的【数据模型】的主要表现形式是Record,如:RdbEventRecord,HRecord

Adapt

  • TaskReader
  • 负责输出Contract数据,适配模式很简单,一对一,直接把底层数据组装成对应的Record即可,如:MysqlTaskReader对应RdbEventRecord
  • TaskWriter
  • 负责输入Contract数据,并写入目标数据源。TaskWriter可以接收不同类型的【数据模型】,内部由不同的Handler把不同【数据模型】的数据写入目标数据源

应用场景

DataLink可以支撑的常见应用场景有:

  • ReSharding
  • BigData
  • CQRS
  • EDA
  • SearchBuild
  • 基础参数共享
  • 实时归档
  • 数据镜像
  • 数据库的迁库、拆库、合库以及灾备等等
  • 具体介绍可参见git文档:https://github.com/ucarGroup/DataLink/wiki/1.9_%E6%B7%B1%E5%85%A5%E5%9C%BA%E6%99%AF

项目未来

datalink项目借鉴了很多开源产品的思想,这里要重点感谢的产品有:canal,otter,datax,yugong,databus,kafka-connect,ersatz
站在巨人的肩膀上,我们进行了开源,一方面回馈社区,一方面抛砖引玉
展望未来,我们希望这个项目能够活跃起来,为社区做出更大的贡献,内部的各种新特性也会尽快同步到开源版本,同时也希望有更多的人参与进来
目前内部正在规划中的功能有:

  • 双机房(中心)同步
  • 通用审计功能
  • 各种同步工具

问题反馈

目前有关datalink的问题交流方式有如下几种,欢迎各位加入进行技术讨论。

  1. qq交流群: 758937055
  2. 邮件交流: tech_plat_data@ucarinc.com
  3. 报告issue:issues

神州优车开源业界领先的增量数据同步中间件——DataLink相关推荐

  1. (神州优车)数据交换平台架构分享

    一.数据交换平台定义(百度百科) 数据交换平台是指将分散建设的若干应用信息系统进行整合,通过计算机网络构建的信息交换平台,它使若干个应用子系统进行信息/数据的传输及共享,提高信息资源的利用率,成为进行 ...

  2. 神州优车黄强元:上云之路“一波三折”,为何最终选择阿里云?

    上云之路"一波三折",为何最终选择阿里云? 作为出行的重要方式,网约车如今已被大众广泛接受.前两年,滴滴.神州.Uber.易到等各个平台的激烈竞争有目共睹.而这也是国内网约车领域快 ...

  3. 陆正耀神州优车被强制执行超10亿

    企查查APP显示,2月17日,陆正耀与神州优车股份有限公司因合同纠纷新增被执行,执行标的约10.85亿元,执行法院为厦门市中级人民法院.企查查信息显示,神州优车股份有限公司成立于2002年6月,法定代 ...

  4. 因涉嫌信披违规 神州优车被证监会立案调查

    7月21日消息,神州优车在全国中小企业股份转让系统发布公告称,因公司涉嫌信息披露违法违规等行为,根据<中华人民共和国证券法>的有关规定,中国证券监督管理委员会决定对公司立案调查. 同日,神 ...

  5. 长盛兴业入股宝沃背后:为神州优车相关方 王百因是陆正耀同学

    雷帝网 雷建平 12月29日报道 北汽福田以近40亿的价格转让所持北京宝沃67%股权引发关注,接盘方长盛兴业(厦门)企业管理咨询有限公司(简称"长盛兴业")浮出水面. 不过,长盛兴 ...

  6. 神州优车联合体斥资近40亿控股宝沃 建立联合营销工作小组

    雷帝网 雷建平 12月28日报道 知情人士今日向雷帝网证实,神州优车联手长盛兴业(简称神州优车联合体)出资39.7亿元控股了北京宝沃. 今日,神州优车还发布公告,称北汽福田汽车股份有限公司(简称&qu ...

  7. 智能无感验证实战案例:神州优车

    对于网约车平台而言,一个可预见的趋势是安全与合规将成为其发展的重要课题. 一方面,从网约车刚起步初期的伪造订单到现在的刷分服务,黑灰产便一直伴随着网约车.从乘客端到司机端,黑灰产几乎无孔不入. 例如, ...

  8. 神州优车推出智慧交通开放平台 3年将投入3亿元

    8月8日下午消息,神州优车集团今日宣布推出智慧交通开放平台UTOP,中国科学院.中国科学技术大学.天津大学.北京科技大学4家科研院所首批加入.神州优车表示,未来三年计划投入3亿元,通过与业内公司.科研 ...

  9. 云场景实践研究第33期:神州优车

    更多云场景实践研究案例,点击这里:[云场景实践研究合集]联合不是简单的加法,而是无限的生态,谁会是下一个独角兽 摘要:专注于汽车出行,汽车买卖和围绕汽车的相关金融行业的神州优车,曾一度通过自建托管的I ...

最新文章

  1. 测试电阻电容 二三极管的好帮手 晶体管测试显示模块
  2. 用PB从ORACLE导出DBF文件,PB导出规定格式DBF文件
  3. 事务消息应用场景、实现原理与项目实战
  4. eclipse中git插件配置 编辑
  5. C++STL泛型编程基础知识讲解--------2015年2月3日
  6. 软件测试系统学习流程和常见面试题
  7. load data infile mysql_mysql Load Data InFile 的用法举例
  8. java junit测试类怎么写_15.junit测试类使用及注解
  9. php 字符串长度判断_php 字符串长度判断更高效的方法
  10. 德州大学达拉斯分校计算机工程,“你的留学故事”| 德克萨斯大学达拉斯分校交换生感悟...
  11. Flutter 与 RN对比
  12. 使用虚拟机搭建Centos7
  13. adb命令重置_ADB命令手册大全
  14. Windows7 tls加密协议设置导致的邮件收发问题 WLM 0x800CCC0B、0x800CCC0F
  15. [渝粤教育] 中国地质大学 人力资源开发与管理 复习题 (2)
  16. 抖音拍摄脚本怎么写,掌握这几点快速拍摄爆款视频丨国仁网络资讯
  17. insmod: error inserting ‘./module1.ko‘: -1 Unknown symbol in module
  18. 计算机专业英语复试考点
  19. AI电脑配置及服务器双显卡安装总结
  20. Java虚拟机内存模型

热门文章

  1. 使用keep-live组件无法销毁cesium的view
  2. win8/win10微信QQ邮箱可登陆,浏览器显示无网络连接
  3. 一文入门 Spring Boot
  4. Linux:使用upower命令查看电池信息
  5. unity摄影机depth模式_Unity3d摄像机详解
  6. CSS常用英语词汇大全
  7. vue-cli创建项目,webpack运行时在 95% emitting CompressionPlugin卡住不动
  8. CSS表格与浮动定位
  9. codeforces B. Ternary Sequence
  10. Error -27796: Failed to connect to server ip地址: [10060] Connection timed out