Beanstalk 使用简介

2018-01-21 linux software

这是 FaceBook 实现的一个消息队列,其协议是基于 ASCII 的,上报的数据可以通过 binlog 进行持久化,其高可用类似于 Memcached 的方式,也就是各个进程之间不知道相互的存在。

支持优先级、延时、超时重发、预留等机制,支持分布式的后台任务和定时任务处理。

这里简单介绍其使用方法。

beanstalk logo

Beanstalk

简单介绍其常用概念:

  • JOB 一个需要异步处理的任务,作为基本单元,属于其中的某个 Tube ;
  • Tube 任务队列,类似于 Kafka 的 Topic,用于存储同一类型的任务,每个 Tube 由一个就绪队列和延迟队列组成,每个 Job 的所有状态迁移在对应的 Tube 中完成。

Tube 会按需求创建,当其变为空 (No ready/delayed/buried jobs) 且没有任何客户端引用是,将会被自动删除。

任务的生命周期

----- 正常生命周期
   put            reserve               delete
  -----> [READY] ---------> [RESERVED] --------> *poof*


   put with delay               release with delay
  ----------------> [DELAYED] <------------.
                        |                   |
                 kick   | (time passes)     |
                        |                   |
   put                  v     reserve       |       delete
  -----------------> [READY] ---------> [RESERVED] --------> *poof*
                       ^  ^                |  |
                       |   \  release      |  |
                       |    `-------------'   |
                       |                      |
                       | kick                 |
                       |                      |
                       |       bury           |
                    [BURIED] <---------------'
                       |
                       |  delete
                        `--------> *poof*

Tubes

一个服务器有一个或者多个 tubes,用来储存统一类型的 job 。

常用命令

----- 链接到DB
$ telnet 127.0.0.1 11300

----- 查看tubes
$ list-tubes
$ list-tube-used
$ list-tubes-watched

参考

官网 beanstalkd 及其中文协议的结合 Beanstalkd中文协议