-
Notifications
You must be signed in to change notification settings - Fork 413
1.0_DataLink总体架构
elevenqq edited this page Sep 30, 2018
·
2 revisions
下面是对DataLink架构模型重点模块的概要介绍:
- Manager是整个DataLink集群的大脑
- Manager有三个核心功能
- 担任整个集群的负载均衡协调器:当集群出现状态变更时,第一时间进行Re-Balance
- 负责整个集群的配置管理:提供管理后台,配置发生变更时进行事件通知、缓存刷新等操作,保证系统能够获取到最新的变更
- 监控整个集群的健康状况,主要有:同步是否出现延迟、同步是否出现异常、数据同步TPS、数据同步吞吐量、机器健康状况检查等等
- 分组是DataLink的一个核心概念,Worker和Task在运行之前必须先知道自己属于哪个分组
- 分组的目的是:实现组内自治、组间隔离,不同分组会有不同的参数配置、运行策略、高可用级别等等
- Worker必须归属于某个分组
- Worker的核心功能是管理Task的生命周期,并配合Manager进行Re-Balance
- Worker运行哪些Task受Manager的分配
- Task的核心功能是进行数据同步
- 一个Task由一个TaskReader和多个TaskWriter组成,Reader和Writer使用独立的Classloader
- Task必须归属于某个分组
- (Re-)Balance的定义:通过一定的负载均衡策略,使Task在Worker节点上均衡的分布
- (Re-)Balance的单位是Group,一个分组发生(Re-)Balance不会影响其它分组的正常运行
- 发生(Re-)Balance的时机
- Manager发生主备切换
- 新的Worker加入分组
- 某个Worker离开分组
- 新增Task
- 删除Task
- 插件模型最大的意义在于解耦和复用,只需要提供一套基础框架,开发一系列同步插件,通过配置组合便可以支持"无限多"的同步场景
- 插件划分为两种:Reader插件和Writer插件,插件之间通过Task串联起来
- Task运行时,每个插件都有自己独立的Classloader,保证插件之间的jar包隔离
- DataLink的运行需要依赖各种配置信息,这些配置信息统一保存到Mysql中
- DataLink在运行过程中会动态产生监控和统计数据,这些数据也统一保存到Mysql中
- 存储的配置信息主要有: 同步任务信息、工作节点信息、分组信息、数据源配置信息、映射规则信息、监控信息、角色权限信息等
- Manager的高可用需要依赖于zookeeper,通过抢占和监听"/datalink/managers/active"节点,实现秒级switch
注:Worker的高可用并不依赖zookeeper,只要manager能够保证高可用,worker就是高可用的 - Task会将运行时信息注册到zookeeper,注册信息主要有两类
- Task的状态信息(运行、暂停还是出错),通过状态信息可以监控task的健康状况
- Task的position信息,通过postion信息可以查看当前的同步进度,也可以实现故障恢复
- Manager使用Netty提供Tcp服务,用来监听Worker端发送的Coordinator信息(注:Netty只用来做高可用和负载均衡)
- Manager使用Jetty提供Http服务,主要用来提供web管理功能和接收Worker发送的监控和统计数据
- Worker使用Jetty提供Http服务,主要用来接收Manager发送的管理指令
- DataLink套用了kafka的(Re-)balance协议
- 在Worker端和Manager端分别定义了各自的Coordinate模块,这些模块都需要依赖kafka的client包