工作原理

发布时间: 更新时间: 总字数:918 阅读时间:2m 作者: IP上海 分享 网址

Beanstalkd 工作原理

主要组成

  1. job: 一个需要异步处理的任务,需要放在一个tube中。
  2. tube: 一个有名的任务队列,用来存储统一类型的job,是producer和consumer操作的对象。
  3. producer: job的生产者,通过put命令来将一个job放到一个tube中。
  4. consumer: job的消费者,通过reserve、release、bury、delete命令来获取job或改变job的状态。

工作机制

  • Beanstalk支持任务优先级(priority)、延时(delay)、超时重发(time-to-run)和预留(buried),能够很好的支持分布式的后台任务和定时任务处理。
  • Beanstalk的一个job的生命周期有READY、RESERVED、DELAYED、BURIED四种。
  • 工作机制
  • 当producer直接put一个job时,job就是READY状态,等待consumer来处理。
  • 如果选择延迟put,job就先到DELAYED状态,到指定时间再READY。
  • consumer获取了READY的job,此状态就为RESERVED。
  • 这样其他consumer不能再操作此job。当consumer完成该job后,可以选择delete、release或者bury。
  • delete之后,job不能再获取。
  • release的job可以重新迁移或延迟迁移回READY。
  • bury的job可以被休眠,需要的时候再READY或者delete掉。

特点

  • 优先级:支持0到2**32的优先级,值越小,优先级越高,默认优先级为1024。
  • 持久化:可以通过binlog将job及其状态记录到文件里面,在Beanstalkd下次启动时可以通过读取binlog来恢复之前的job及状态。
  • 分布式容错:分布式设计和Memcached类似,beanstalkd各个server之间并不知道彼此的存在,都是通过client来实现分布式以及根据tube名称去特定server获取job。
  • 超时控制:为了防止某个consumer长时间占用任务但不能处理的情况,Beanstalkd为reserve操作设置了timeout时间,如果该consumer不能在指定时间内完成job,job将被迁移回READY状态,供其他consumer执行。
Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数