定时任务:不用多说,就是系统自动到点执行某个任务或代码。应用场景很多,例如:定时扣款,定时同步数据等等,当然运维人员指定的定时执行脚本程序会更多。
我的工作场景:定时扣款应用较多。
目前实现方式:一个接口系统,功能是接收或转发内部系统与外部系统的消息。后来在上面加了定时任务,由于是Spring项目,使用了quartz,做了一个配置文件,以这样的方式随这个web系统一起执行。
痛点:在一个系统中,即有业务代码又有定时任务,某一个功能升级或改动都得重启进程。其中所有的未升级内容也会中断。
随定时任务的增加,导致难以维护。
解决方案:系统拆分+分布式
具体:
(1)将定时任务系统拆分出来,单独一个系统。该系统可以实现定时任务的CURD,以图形化界面的方式操作比配置文件强太多。这样可以自由查看当前定时任务数量,名称,执行时间等详细内容,还可以查看执行结果等。操作简单,方便。
(2)具体的任务执行代码可以以两种方式实现
1,调用WEB的服务,即API方式。这种方式方便开发及部署,但是要想某一个任务升级不中断其它任务的执行。需要实现多机部署,当升级代码时,将一台机器上的流量切到领外的机器,等这台机器正在执行的代码执行完成后。再切另外的机器。
2,调用本地的脚本,可以是JAR,python脚本,shell脚本等。这种方式开发维护相对复杂。但是可以独立部署升级,某一个脚本代表一个任务,这样任务调用系统单独调用脚本不涉及到其它脚本的中断执行。而且一台机器部署即可。