多节点任务框架设计之数据库设计解决方案

多个节点在获取数据库中的任务时,会存在多个节点的同步获取而导致的任务多次处理情况。

因此,如果想要避免重复执行任务,必须找到合适的解决方案。
          下面,主要介绍项目中用到的解决方案:

  1. 第一,假设存在一个任务uploadFileTask线程,专门用于上传文件,而文件路径及其信息存放在tb_upload_file_task表中。
  2. 第二,为了实现一个任务只被一个节点获取到,为任务表加入node_key字段,用于区别那个节点获取到当前的任务。
  3. 第三,每当一个任务节点获取到这个任务时,均更新任务表中的node_key.上面为任务表的设计(保证数据库支持行级锁),下面为避免多节点同时获取同一条任务的解决方案:
  4.  解决方案:加入一个中间表tb_persmtic_lock(专门用于获取任务时,被锁住的一个中间表),包含class_name,node_key等两个关键字段(这个表需要在每次新增任务时,新增UploadFileTask的class_name为UploadFileTask,node_key为空).
  5.  在获取任务时,同一个事务中,需要根据当前任务对象的class_name获取tb_persmtic_lock对应行的锁,并将node_key更新进去,这样如果node_key不为空时(另外一个相同的任务不会获取到这个锁),同时在任务表中获取一批任务数据,并更新这批数据的状态flag=1表示正在处理(假设任务只获取flag=0)的任务,获取完成后,将被锁的tb_persmtic_lock中的这个行释放掉锁,并更新node_key为空。即完成了多个节点同时获取一批任务的同步问题。
下面为流程图:




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值