0
0
0
0
博客/.../

Flowable迁移TiDB实战:从理论到实践的全流程指南

 吴理阳_0112  发表于  2025-11-05

面对Oracle等传统数据库的高成本与扩展性瓶颈,结合国产化替代需求,将Flowable工作流引擎迁移至TiDB分布式数据库,正成为众多企业的优先选择。

一、迁移背景与价值

随着企业业务快速发展,基于Oracle等传统数据库的Flowable工作流引擎逐渐暴露出诸多问题。以平安科技为例,其核心系统日调用量超1.4亿,日业务吞吐量超过3000万,单表数据量已达260亿行,传统数据库在高并发、大数据量场景下性能瓶颈日益凸显。

迁移至TiDB能为企业带来多方面的价值:

  • 显著降低成本:平安科技实践表明,从Oracle迁移到TiDB后,整体存储占用减少近40%,整体成本降低10%-11%
  • 提升系统性能:TiDB的分布式架构可轻松应对高并发访问,联机交易延迟<60ms,系统可用性达99.99%
  • 简化分库分表:TiDB原生支持分布式架构,避免了传统MySQL分库分表的复杂性。
  • 国产化合规:满足金融、政务等行业国产化替代要求。

二、迁移前期规划

2.1 环境与资源准备

迁移全过程需要系统化的规划,大型项目通常需要4-6个月,小型项目约1-2个月

资源规划清单:

  • 硬件资源:提前申请采购足够的主机资源,TiDB集群建议至少3个节点起步
  • 人力配置:DBA、开发人员、测试人员和技术专家需明确分工
  • 工具选型:准备sqluldr2、Lightning等数据导入工具,或自研TMS工具

2.2 Flowable数据特征分析

Flowable工作流引擎包含多张核心表,需重点关注:

  • 流程定义表(ACT_RE_PROCDEF,ACT_GE_BYTEARRAY)
  • 运行时数据表(ACT_RU_EXECUTION,ACT_RU_TASK)
  • 历史数据表(ACT_HI_PROCINST,ACT_HI_ACTINST)
  • 身份管理表(ACT_ID_USER,ACT_ID_GROUP)

迁移过程中要特别注意ACT_GE_BYTEARRAY表中的二进制流程定义数据,这是流程正常运行的关键。

三、迁移实施关键技术

3.1 表结构与数据类型转换

Oracle与TiDB在数据类型和语法上存在差异,需进行针对性转换:

常见数据类型转换规则:

Oracle类型 TiDB类型 注意事项
NUMBER BIGINT或DECIMAL 未指定精度时需明确转换规则
DATE TIMESTAMP 使用CURRENT_TIMESTAMP替代SYSDATE
VARCHAR2 VARCHAR 基本兼容
CLOB TEXT 需注意大小写敏感差异

语法差异处理:

  • 空字符串处理:Oracle中''被视为NULL,而TiDB严格区分,需业务逻辑配合改写
  • 外键约束:TiDB v8.5.0 GA已支持外键,可正常使用
  • 默认值函数:将SYSDATE替换为CURRENT_TIMESTAMP

3.2 数据迁移策略

根据数据量大小采用不同的迁移方法:

小表迁移:直接使用Dumpling导出,Lightning导入的方式,简单高效。

大表迁移(超过10GB):采用拆批并发导出策略,平安科技对8张超大表使用此方法,显著提升导入效率。

静态数据迁移流程:

  1. 建立静态COW库,避免写入冲突
  2. 使用CPS或PMS同步方法
  3. 分批处理,将大表拆小解决网络传输延迟
  4. 数据校验,确保数据一致性

整个迁移过程约需两周,加上数据校验共需一个月

3.3 增量数据同步

为保证业务平滑迁移,需实现增量数据同步:

  • 使用OGGTiCDC同步机制,确保数据准确性
  • 监控同步延迟,确保数据实时性
  • 准备数据比对工具,定期验证源库与目标库的一致性

四、Flowable特定配置与优化

4.1 流程定义缓存优化

迁移后可能遇到流程定义缓存问题,错误信息如下:

text

org.flowable.common.engine.api.FlowableException: deployment 'xxxxx' didn't put process definition 'xxxxx' in the cache

解决方案:

  1. 检查ACT_GE_BYTEARRAY表是否完整迁移,特别是二进制字段
  2. 清理多余的开发测试数据:

sql

DELETE FROM ACT_RE_DEPLOYMENT;
DELETE FROM ACT_RE_PROCDEF; 
DELETE FROM ACT_GE_BYTEARRAY;
  1. 重新部署流程定义,确保缓存正常加载

4.2 事务与并发控制

Flowable依赖数据库事务保证流程一致性,TiDB的分布式事务模型与Oracle存在差异:

  • 调整大事务设置:TiDB默认限制单条KV entry不超过6MB,可通过txn-entry-size-limit参数调整
  • 对于复杂业务流程,将大事务拆分为小事务
  • 必要时调整txn-total-size-limit参数(最大10GB)

4.3 历史数据清理策略

Flowable历史表随业务运行快速增长,需制定合理的数据清理策略:

  • 使用TiDB的分区表功能按时间分区
  • 基于DELETE FROM t WHERE id BETWEEN ? AND ? LIMIT 5000循环删除
  • 通过检查Affected Rows是否为0作为终止条件
  • 开启Region Merge功能优化删除后的查询性能

五、全真模拟验证与性能测试

5.1 流量回放技术

平安科技使用openresty进行生产流量镜像,具体步骤:

  1. 通过openresty进行异步处理、限流和放大倍数控制
  2. 使用挡板服务实现灵活应用
  3. 逐步增加负载,从0.1倍开始,逐步提升至全流量
  4. 比对真实与复制请求返回,验证功能一致性

5.2 性能优化实战

根据平安科技经验,复杂业务去O的SQL改写率高达80%,简单业务约30%

TiDB性能优化方案:

  • 执行计划管理:使用SPM绑定现有SQL的执行计划
  • 索引优化:优化索引选择性,避免全表扫描
  • 参数调优:调整GC与compaction filter配置,缓解MVCC性能瓶颈
  • 分布式执行:利用TiDB的Coprocessor功能提升复杂查询性能

六、业务切换与回退方案

6.1 平滑切换流程

  1. 前期准备:通过触发器限制写操作权限,仅保留数据同步用户
  2. 数据同步:等待数据一致后,关闭Oracle写入
  3. 业务切换:全量切换至TiDB,应用连接指向TiDB集群
  4. 验证监控:密切监控业务指标和数据库性能

6.2 完善回退机制

若出现异常,可快速切换回Oracle:

  1. 关闭数据同步
  2. 撤除触发器限制
  3. 连接切回Oracle
  4. 启动应用恢复业务

平安科技经验表明,回退操作相对简单,属于PV操作,但需注意如果业务逻辑本身存在问题,即使切换回Oracle,问题仍然会存在。

七、迁移后运维保障

7.1 监控与告警

  • 配置完善的监控体系,关注TiKV的CPU使用率、Region分布等关键指标
  • 设置慢查询告警,及时优化性能瓶颈
  • 监控TiCDC同步状态,确保数据一致性

7.2 高可用架构设计

推荐采用同城三机房单集群+远程容灾集群部署:

  • 同城三个数据中心,通过Raft协议实现三副本强一致性复制
  • 远程通过TiCDC建立容灾节点
  • 形成完整的"同城三副本 + 异地一副本"高可用容灾体系

八、总结与建议

Flowable迁移到TiDB是一项系统工程,需全面考虑技术架构、数据一致性和业务连续性。根据平安科技等企业的实战经验,总结以下建议:

  1. 充分测试:在全真模拟环境充分验证功能与性能
  2. 逐步迁移:采用分阶段迁移策略,先非核心业务后核心业务
  3. 完善预案:准备详细的回退方案,确保业务安全
  4. 团队培训:提前培养团队对TiDB的理解和运维能力

通过科学的规划和严谨的执行,Flowable到TiDB的迁移将显著提升系统性能和支持能力,同时降低总体成本,为企业的数字化转型提供坚实基础。

0
0
0
0

版权声明:本文为 TiDB 社区用户原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接和本声明。

评论
暂无评论