Beanstalkd

  1. 特点
  2. 任务(job)
  3. 使用案例
    1. 秒杀未支付的订单取消
    2. 短信的批量发送
  4. 协议
  5. FAQ
  6. 使用
    1. 源代码
    2. 安装包
  7. 客户端

Beanstalkd实现队列最精妙的功能,而又简单快速。

拥有基于TCP协议通用的接口,最初设计用于通过异步运行耗时的任务来减少大容量Web应用接口请求的延迟。

本播基于Beanstalkd做了解读与应用实践,欢迎参考:

特点 描述
轻松安装 快速安装,无需编辑文件,无需调整设置
速度 每秒处理数千个job
客户端支持 客户端库超过21种语言
支持根据需要自动创建多个工作队列
可靠 Beanstalk的储备,工作,删除周期确保可靠的处理
调度 延迟以指定时间间隔投放任务,以便稍后处理
优先级 重要的工作去排在队列前面,得到更早的处理
持久性 为了速度,任务存储在内存中,但也可以记录到磁盘以保证安全
可扩展性 客户端联合提供轻松的水平可扩展性
错误处理 埋葬(bury)任何导致错误的作业,供以后的调试和检查
简单调试 直接通过telnet直接与beanstalkd服务器通信,以获取应用程序的句柄
效率 每个beanstalkd进程都可以处理数万个开放连接
内存使用情况 使用内置的ulimit操作系统功能来限制beanstalkd的内存消耗

任务(job)

Beanstalkd中的任务,就是被客户端投放其中,并包含主要信息的元信息。每一个任务通过一个管道进入队列,之后被取出并处理。典型的任务生命周期如下:

put            reserve               delete
  -----> [READY] ---------> [RESERVED] --------> *poof*

一个任务在任何时候都处于ready,relayed,buried这三种状态的一种:

状态 描述
ready 在被客户端投放进一个队列后,等待被取出,并消费
delayed 在指定的延迟(投放指定)后,变为ready状态
buried 等待被踢出,一般是因为任务处理失败导致的。

另外,还有几种行为可以影响给出的任务:

job可能的状态迁移

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

使用案例

使用过的场景 – 凡是问题,皆有众多解决方案。

秒杀未支付的订单取消

秒杀订单需要用户在限定时间内完成支付,在期间为支付的订单,将会被取消,将该商品的库存购买机会让位于下一位用户。实现方案有很多,比如例行任务计划的方式读取未支付的秒杀订单,对比当前时间与创建时间的关系,取消他。比较优雅的方式可以在订单创建之初,就将该类型的订单放一份到队列中,利用其延时投放的特性,在指定时间消费该消息。

短信的批量发送

不能过于依赖下游服务方的服务请求响应长耗时处理自我业务。短信发送过程,不将短信服务方的返回作为继续进行的依据。

交易状态的更新、指定活动的推送等

协议

FAQ

使用

源代码

Beanstalkd发行基于 MIT 证书。 最新的发布版本为beanstalkd-1.10.tar.gz

安装包

Debian/Ubuntu

sudo apt-get install beanstalkd

Homebrew OS X

brew install beanstalkd

客户端

因不同语言爱好者开发支持的客户端而不再显得小众。

script>