KFS支持定时计划解析和入库(含GUI)需求分析
关键字:
Kingbase FlySync、源端解析、目标端入库、java定时任务、人大金仓
需求背景
在现场项目中,客户会在存在业务繁忙时间段,在此阶段客户希望将更多机器的资源应用在自身业务中,不能因为KFS系统的数据同步等占用太多IO资源而影响自身业务,希望在对源端和目标端数据同步性要求不高的系统中,控制源端解析和目标端入库的执行时间和效率,在不人为操作开启或停止系统的情况下,使源端解析和目标端入库执行定时计划。基于此客户业务产生以下几点需求。
- 设置定时解析计划,可以自定义时间使源端定时解析,同时在不解析的时候不要占用资源;
- 设置定时解析计划,在自定义时间内,控制源端解析速度,或者用网络方式限制,最终达到少占用资源,不影响数据库使用的目标;
- 设置定时解析计划,控制目标端入库时间(一般是晚上,23:00-3:00,21:00-次日7:00),保证在业务不繁忙情况下再进行数据入库。
KFS部署形式分为两中:分离部署、集中部署。
分离部署下KFS消耗的数据库节点资源有:
- 网络IO(远程读取增量日志)
- CPU(源端KES、Logminer解析)
- 数据库内存(数据库连接、批量入库)
集中部署KFS消耗的数据库节点资源有:
- 网络IO(远程读取增量日志)
- CPU(源端KES、Logminer解析)
- 数据库内存(数据库连接、批量入库)
- 磁盘IO(KUFL写入、读取)
- 物理机内存(KFS程序占用)
上述资源中,KFS自身可控制的项只有集中部署下的物理机内存(通过JVM参数控制)。其他项均无法控制,因此需要提供手段可以控制上述资源项的使用。常见的方式有:通过系统级控制命令、程序本身暂停。
GUI功能需求分析
- 任务创建
用户可以通过在目标端或者源端创建定时任务,控制源端解析和目标端入库时间,或者控制规定时间内源端解析和目标端入库速度。
- 任务名称
- 任务节点(源端/目标端)
- 同步任务类型(停止同步,限速同步)
- 调度管理
用户新建任务后,可以通过调度管理来控制任务执行的策略。
- 调度名称
- 执行任务
- 调度策略(一次,每小时,每日,每周,每月)
- 执行日期(可选)
- 执行时长(执行开始时间-执行结束时间)
数据同步定时计划需求分析
- 定时计划节点(源端/目标端)
保证定时计划在源端和目标端都可以执行。
2、定时计划类别
- 在计划时间内停止执行
- 在计划时间内开始执行
- 在计划时间内限速执行
- 在规定时间内解析/入库固定数量的数据
- 在规定时间内解析/入库固定大小的数据
常见定时任务实现方法
- java.util.Timer和java.util.TimerTask
Timer和TimerTask是java提供的基本定时任务实现方式,Timer类用于安排以后在后再线程中执行的任务,而TimerTask是一个抽象类,允许创建一个在Timer中运行的任务。Timer方法设置定时任务,简单易用,适合设置简单的定时任务,不适合大规模或复杂的定时任务,并且对并发处理支持不足。
- SheduleExecutorService
SheduleExecutorService是java.util.concurrent包下的一个接口,用于在指定的延迟之后或以固定的时间间隔重复执行任务,它提供了更灵活的调度选项和更好的并发支持,可以控制任务的执行,取消和获取执行结果,但是应用相对复杂。
- Spring框架的@Scheduled注解
Spring框架提供了@Scheduled注解,可以用于在方法上标记定时任务的执行,需要结合Spring容器使用,适合spring项目,使用简单,但是需要spring环境,没办法在非spring项目中使用。
- Quartz框架
Quartz是一个功能强大、开源的作业调度库,允许调度任务执行,为程序提供了丰富的功能,如支持任务调度、集群支持、错过任务等,适合大规模或复杂的定时任务,但是使用相对复杂,配置繁琐。
- XXL-Job
XXL-Job是一个轻量级分布式任务调度平台,特点是平台化、易部署,开发迅速,学习简单,轻量级,易扩展。由调度中心的执行器功能完成定时任务的执行,调度中心负责统一调度,执行器负责接收调度并执行,XXL-Job适合应用于中小型项目。