数据分发服务
服务简码
HDTT
默认端口
8180
默认路由
/hdtt/**
组件编码
hzero-transfer
数据分发服务提供了将基础数据变更从源服务同步分发至其他目标服务的基础能力, 同时提供了数据审计、操作审计等基础能力。
功能特性
初始化
- 初始化时自动同步表结构
- 仅初始化表结构
- 单库历史数据初始化
同步类型
- 单表变更同步
- 单表批量变更同步
- 主表+多语言表变更同步
同步维度
- 整张表维度同步
- 租户维度同步
前提条件
- 该服务需要提前部署RocketMQ作为消息队列组件
- 源服务需要安装客户端组件
安装
# mvn spring-boot:run
使用
源服务端
- 源服务依赖数据分发客户端
<dependency>
<groupId>org.hzero.boot</groupId>
<artifactId>hzero-boot-transfer</artifactId>
<version>${hzero.boot.version}</version>
</dependency>
- 配置客户端启用数据分发
# application.yml
hzero:
transfer:
monitor:
enabled: true # 是否启用数据变更监控功能
dataTransfer:
enabled: true # 是否启用数据变更分发功能
dataAudit:
enabled: true # 是否启用数据变更审计功能
- 初始化数据分发需要的表结构
- 生产事件表: hdtt_producer_event, 数据变更消息首先保存至本地事件表
- 生产事件归档表: hdtt_producer_event_arch, 变更数据同步至服务器端之后的归档
目标服务端
- 初始化目标服务表结构
- 消费事件表: hdtt_consumer_event, 数据变更消费前首先同步保存至本地消费事件表
- 消费事件归档表: hdtt_consumer_event_arch, 数据消费成功后归档
服务器端
- 运行RocketMQ
- 运行本服务, 提供数据分发服务器端支持
- 配置数据分发基础设置 包括数据分发服务、表、初始化DB信息; 数据消费服务、DB信息、租户信息等。同时, 需要首先做初始化, 初始化后自动启用数据变更消费。
过程
术语: 生产DB、消费DB、主表(正式表)、多语言表(正式表)、临时表、备份表
DB维度初始化
- 首先清除消费DB
临时表
数据(如果表结构不存在则创建) - 生产DB
主表、多语言表
数据迁移至消费DB主表、多语言表对应的临时表
- 迁移成功后, 消费DB将
临时表
更名为正式表
(首先备份已有正式表) - 过程中异常时, 消费DB从
备份表
恢复正式表
(整张表反向更名)
租户维度初始化
- 主表:
消费DB
提前清除主表对应的临时表
对应租户数据, 然后主表对应租户的数据迁移至临时表进行备份
, 最后清除主表对应租户数据
(备份); 临时表: 清除消费DB多语言表对应的临时表
- 生产DB
主表
对应租户的数据直接迁移至消费DB主表(不经过临时表)
; 生产DB多语言表
全表数据(目前无法定位租户的多语言数据-无法拿到主键)迁移至消费DB多语言表对应的临时表
- 迁移成功后, 消费DB
主表
数据不作处理;多语言临时表
更名为正式表
(首先备份已有正式表) - 过程中异常时, 消费DB
主表
对应租户的数据从临时表
恢复(数据反向复制),多语言表
数据从备份表
恢复(整张表反向更名)
其他场景
- 如果消费DB变更, 则需要删除原来消费DB配置, 然后重新配置新的消费DB; 租户维度也是一样的
约束限制
- 不支持历史数据初始化来源于多个数据库
- 不支持表结构同步, 目前除了初始化, 之后的表结构变更, 均需要手工分别调整来源、目标数据库表结构
- 如果客户化Mapper增删改, 那么, 增删改操作的目标对象必须为Mapper对应的Entity实体, 否则无法识别变更, 例如, ApplicationMapper中只能更新Application实体, 而不能更新Interface, Interface需要在InterfaceMapper中更新
- 仅支持通过Mapper在应用层做的增删改操作同步, 不支持后台DB的DataFix变更同步
- 不支持复杂的类似Insert … Select, Insert … Values (xxx, xxx), (xxx, xxx)语法的变更
- 拦截器顺序:与数据权限拦截器的相对位置,暂时未考虑
- 数据权限拦截器不允许增删改操作中不允许跨库条件(已知)
- 直接增加本库本表的查询条件呢?
远景规划
- 能够脱离RocketMQ消息队列的强绑定, 统一抽象接口
- 表结构变更同步
- 数据核对报表
- 数据DataFix
- 支持复杂的类似Insert … Select, Insert … Values (xxx, xxx), (xxx, xxx)语法的变更
版本更新日志
后端
版本 0.10.0.RELEASE [2019-07-20]
- 初始发布
版本 0.11.0.RELEASE [2019-08-07]
- 添加了表结构变更同步功能
- 添加了数据核对功能
- 优化了多语言初始化逻辑
前端
版本 0.10.0 [2019-07-20]
- 初始发布
版本 0.11.0 [2019-08-07]
- 新加表结构变更同步页面
- 新加数据核对页面