目前quartz实现分布式任务调度用的是库表行级锁机制,其原理是利用qrtz_locks表保证某个节点只能有一个任务线程获得该行级锁,如果有其他节点想执行同样的任务需要等之前线程释放锁,否则处于等待状态。
也就是说,quartz的分布式集群原理是利用数据库锁来保证操作的顺序性,但是这里有个致命的问题:如果程序中有大量的短周期任务(比如订单处理、库存处理等)需要频繁处理,就会存在各节点的线程抢占数据库锁,从而导致大量线程处于等待状态, 其任务调度的性能将大大受限于业务。
目前quartz实现分布式任务调度用的是库表行级锁机制,其原理是利用qrtz_locks表保证某个节点只能有一个任务线程获得该行级锁,如果有其他节点想执行同样的任务需要等之前线程释放锁,否则处于等待状态。
也就是说,quartz的分布式集群原理是利用数据库锁来保证操作的顺序性,但是这里有个致命的问题:如果程序中有大量的短周期任务(比如订单处理、库存处理等)需要频繁处理,就会存在各节点的线程抢占数据库锁,从而导致大量线程处于等待状态, 其任务调度的性能将大大受限于业务。