一个通用数据巡检框架的设计
背景
在实际项目中, 有许多业务场景, 会存在多张表数据不一致或者脏数据残留的问题,
需要定期执行一些SQL来进行数据一致性的巡检与订正, 以实现数据的最终一致性.
例如下表, 需要定期查询&统计出’deleted’状态的用户数量, 报警, 并清理这些数据.
-- user表
user_id| age| status|
1| 18| deleted|
初步方案:
方案1: 可以针对每个需求, 单独写SQL->DAO->Service等, 但带来的问题是:
- 开发量大, 每次新的需求, 都需要撸一遍, 重复工作量大.
- SQL->Service整体功能分散, 不便于维护.
方案2: 可以基于此, 抽象出一个面向SQL的通用巡检框架, 便于统一接入与维护.
架构设计思考
从用户角度, 可以:
定时任务框架:
- 创建巡检任务, 与输入自定义的SQL绑定
- 定义巡检周期
- 手动触发运行(便于首次配置之后调试)
- 查看运行记录(便于)
报警与订正框架:
- 定义任务结果筛选与报警条件
- 定义任务结果执行的订正Action
第一部分: 定时任务框架
核心就是一个面向SQL的分布式定时任务框架, 调研现有的任务框架实现(例如Quartz):
- 任务核心:
- 任务描述与定义(即数据源支持哪些? SQL支持哪些?)
- 定时任务的调度与执行
- 历史任务运行情况
- 耗时
- WorkerIp
- 执行状态
- 运维后台:
- 手工触发
- 指定
- 任务
- 手工触发
第二部分: 数据订正报警框架
详细设计
任务分为 “全量巡检” 与 “增量巡检” 两类.
全量巡检: 即每次执行SQL, 对报警结果全量输出.
增量巡检: 即每次执行SQL, 只输出与上次执行有差异的(新增的)数据报警.