写点什么

抢占式批任务分配设计

作者:
  • 2023-12-27
    天津
  • 本文字数:658 字

    阅读完需:约 2 分钟

摘要

对原先任务分配给某节点后,该节点宕机,这个节点的作业得不到处理问题进行改进,提出每个节点抢占式任务分配方式,避免因某节点宕机导致某些任务得不到处理的方案。

背景

目前批处理作业分为三个节点集群处理。

  1. 将作业分为三批,每个节点一批,分别标上节点 ip

  2. 每个节点根据自己 ip 查询到属于自己的作业,进行处理。

弊端:当某个节点宕机后,这个节点的作业得不到处理。


改进

需要添加字段:

  • 历史执行 ip 列表

  • 分配状态:null|已分配|已运行|已结束

  • 分配失效时间:timestamp,预计任务务必完成时间。这个时间后如果‘分配状态’!=‘已结束’,此任务将被其他节点再次抢占执行。

  • 结果状态:成功|失败

节点要增加的服务(http 接口):

  • 节点存活,判断此节点是否存活。如果不存活,其他节点可抢占此节点‘分配失效时间’到期后未完成之任务。

抢占式任务分配

所以,改用节点抢占式任务分配方式,避免将任务分配给宕机的节点。

每个节点抢占一批作业并执行:

  1. 获取不存活 ip 列表

  2. 抢超时未完成的不存活节点的作业:update 作业 set 执行ip=<自己节点ip>, 历史执行ip+=原执行ip where 执行ip in (不存活ip列表) and 分配失效时间>当前时间 and 分配状态!=‘已结束’

  3. 抢未分配的作业:update 作业 set 执行ip=<自己节点ip> where 分配状态=null

  4. 自己的作业: select from 作业 where 执行ip=<自己节点ip>(就是上面 2 个步骤抢的作业)

  5. 开始执行,并修改状态=已运行

  6. 执行完毕,修改状态=已结束,结果状态=成功|失败

  7. 若执行中宕机,等待达到‘失效时间’后,其他节点会抢占过来执行。

  8. 要做好,作业运行一半宕机,其他节点接过执行的正确逻辑。


用户头像

关注

还未添加个人签名 2018-12-27 加入

多年金融行业开发经验,擅长软件故障分析和性能调优。 目前关注代码生成和分布式数据库中间件

评论

发布
暂无评论
抢占式批任务分配设计_军_InfoQ写作社区