taskpool-基于MySQL的分布式任务池

简介

taskpool是一个任务池,它提供了一种类库的方式来实现分布式的任务队列。相比于一些消息队列框架,taskpool的目标不是高吞吐量的消息生产和消费场景,而是提供一种分布式的任务池“对象”,它更像是一个数据结构封装类。

应用场景

taskpool适用于对性能要求不高,需要保证事务的应用场景。比如
- 异步任务,保证不重复执行

API说明

  • put 把任务放入任务池
  • get 从任务池获取任务
  • update(token) 更新任务执行进度
  • commit(token) 提交任务修改结果

一致性保证

一致性主要是任务抢占的一致性和任务提交的一致性。

任务抢占的一致性

taskpool通过状态status和可用时间avail_time来判断任务是否可用。如果avail_time小于当前时间而且status为可用状态,那么taskpool会尝试更新这条任务,通过数据库的乐观锁来保证并发一致性,抢占成功之后,taskpool会更新avail_time和holder两个字段。

任务提交的一致性

当任务消费者成功抢占到任务之后,会获得一个token信息,包含了任务的id和holder,消费者在任务完成之后提交的时候,taskpool会检查id对应的任务holder是否被抢占。

如果holder不变,则把status置为1,并且把结果更新进去。

与用户线程隔离

taskpool的所有任务操作都是在独立的线程池里执行的,距离来说,put操作

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值