一种分布式数据交换平台
2017-09-29王剑冰
王剑冰
摘要 不同系统间有时需要进行大量的数据转换和传输,传统方法一般采用单机作为数据传输接口机来处理,常会遇到性能以及单点故障问题,本文设计了一种分布式的数据交换平台,通过主机节点集群并发处理提升数据传输性能,并避免任一节点的单点故障,同时数据交换的过程可以得到统一的监控。
关键词 分布式:数据交换
中图分类号 TP3 文献标识码 A 文章编号 2095—6363(2016)13—0055—02
数据的转换和传输在不同系统间的交互中比较常见,由于系统的数据存储形式和格式都不一样,故而需要做转换。一般传统方式下,做这种数据转换和传输,会使用一台接口机来处理,但是当传输量较大时,单台接口机的性能会成为瓶颈,而且存在单点故障,当接口机出现故障时,整个数据交换中断。
为解决单机处理数据交换的缺点,需要设计一个分布式数据交换平台,实现数据交换任务并发且负载均衡地处理,消除单点故障问题,并且所有数据交换任务都可以得到有效的监控。
1分布式数据交换平台的设计
1.1总体架构
平台的总体架构如图1所示。
图1各模块功能说明:1)配置及任务管理数据库。采用Mysql或现有Oracle,存放各类配置数据、任务分配、处理状态信息;2)数据交换集群。获取任务并发执行数据导入导出任务,并反馈任务处理状态,任务流量控制。集群每个节点部署基于开源DataX改造的单机数据交换模块;3)消息服务器。采用自主研发分布式消息平台,任务传输与通知、中断任务重新分配;4)管理服务器。配置源、目标数据对象,集群主机,DataX进程内并发规则,任务分片规则,产生定时任务,手工生成任务,提供任务监控服务;5)ZK集群。监控主机状态和正在执行的任务状态①。
1.2处理逻辑
逻辑处理示意图如图2所示。
1)任务分配。用户通过管理平台配置源数据库表、目标数据库表,不同的数据库在DataX中处理使用的读并发和写并发参数,并配置任务的分片方式,配置子任务的执行方式(周期性,单次),并将子任务写到消息队列。
2)管理进程。读取本机可启动的最大DataX进程数配置,根据当前正在运行的DataX进程数和当前主机的资源使用情况进行综合评定,当前队列中是否有待处理消息启动DataX进程,并控制适当的进程数(包括接收管理平台发送来的指令杀死进程)。定时更新管理进程状态表的最新状态时间字段以表示管理进程存活,如长时间未更新,则管理平台产生告警。实时接收命令队列中的指令,如调整参数、杀死某DataX进程、启动应急处理任务等等,并将执行结果发送到执行响应队列。
3)DataX进程。需对原生的DataX进行入口和出口部分的源码改造:(1)入口:读取命令行参数替换为读取消息,并使用消息中的参数执行,没有消息时进行阻塞等待;(2)初始化处理:读取到消息后在到數据库中查询任务是否曾经执行过的任务,并在ZK集群上判断任务状态是否为正在处理,如果该子任务的状态是:数据库中为正在执行但当前ZK上无此任务,则先将该任务对应的目标数据库表的数据根据分片条件进行清除;数据库中为正在执行且当前ZK上有此任务,不做处理直接退出;数据库中为执行失败的任务,则先将该任务对应的目标数据库表的数据根据分片条件进行清除;数据库中状态为成功的,不做处理直接退出;(3)出口:命令执行完更新子任务状态表,删除ZK上任务记录,如成功则签收消息,如失败则将消息回退至队列或直接退出。子任务执行成功后查询该总任务的其他子任务是否都完成,如果是则将总任务状态更新为完成。
1.3负载均衡
由于管理进程控制整个主机DataX进程的数量,在资源不满时且未达最高设置的阀值时启动新的DataX进程,资源满负荷(CPU、内存等使用率超过设定阀值)时不再获启动,而DataX为主动获取任务模式,所以不同主机问将自然达到负载均衡。且不同主机的性能不同可以为不同的主机配置不同DataX最大并发进程数。
1.4高可用
1)配置与任务管理数据库。采用主从或双写方式保障高可用。
2)消息平台。在单节点发生故障产生主从切换时,会造成任务消息全部退回并被重新分配,由于DataX初始化处理时会先到数据库及ZK判断任务状态,故可保证任务不被2个或以上的进程同时执行。
3)数据交换集群。(1)DataX进程异常。会和消息服务器断开连接,它所取走的消息因未签收会自动回退到队列中(消息平台保障),并能将次消息重新分配给其中一台主机上的DataX;(2)管理进程异常。不会再启动新的DataX,在管理重新启动前,DataX的所有进程最终都会处理完任务而退出,等于该主机失去处理能力,整个集群仍然可以处理任务,只是处理的性能降低;(3)主机宕机。所有DataX进程和消息平台连接断开,此时该机上正在处理的子任务消息因未签收全部自动回退到队列中(消息平台保障),并能将次消息重新分配给其他主机。(4)处理机网络异常。DataX的进程会失败并退出,任务消息退回队列,并和ZK断开连接,任务从ZK上消失,由于DataX初始化处理时会判断ZK上任务状态,故可保证任务被重新分配和执行。
综上所述,系统不存在任何模块的单点故障,也不会产生任务被2个进程同时处理的情况。
2结论
传统的数据交换系统存在单机不可扩展、并发性不高、单点故障等问题。采用分布式数据交换平台后,采用集群化的架构使得数据交换任务可以并发进行,并可以不断扩展,而且消除了单独故障问题,任何一台主机出现故障不影响正常处理,并且整个处理过程均能得到较好的监控。endprint