介绍
小心地声明应用程序部署的每一个元素的职责都带来了很多好处,包括问题发生时的更简单的诊断,快速扩展的能力,以及涉及的组件的更清晰的管理范围。
在当今的Web服务工程世界中,实现上述场景的关键组件包括使用消息和工作(或任务)队列。 这些通常具有弹性和灵活性的应用程序易于实施和设置。 它们非常适合在应用程序包的不同部分之间拆分业务逻辑。
在这种DigitalOcean文章,继续我们的应用程序级通信解决方案系列中,我们将寻找Beanstalkd创造这种分离件。
Beanstalkd
Beanstalkd最初是为了解决流行的Web应用程序的需求而开发的(Facebook上的原因)。 目前,它是一个绝对可靠,易于安装的消息服务,是完美的开始使用和使用。
如前所述,Beanstalkd的主要用例是通过工作队列和消息来管理应用程序部署的不同部分和工作程序之间的工作流,类似于其他常见解决方案(如RabbitMQ)。 然而,Beanstalkd被创建工作的方式设置它从其余。
从其诞生以来,与其他解决方案不同,Beanstalkd旨在成为一个工作队列,而不是一个涵盖许多需求的伞形工具。 为了实现这个目的,它被构建为一个基于C编程语言的轻量级和快速运行的应用程序。 它的精简架构也允许它被安装和使用非常简单,使其完美的大多数用例。
特征
能够监视具有返回ID的作业,在创建时返回,这只是Beanstalkd的一个特性,它使它与其他的不同。 其他一些有趣的功能包括:
持久性 - Beanstalkd运行内存,但提供持久的支持。
优先性 -不像大多数的替代品,Beanstalkd提供优先次序时,他们需要不同的任务来处理紧急的事情。
分布 -不同的服务器实例同样可以分配到Memcached的是如何工作。
葬 -这是可能掩埋它无限期推迟工作(即任务)。
第三方工具 - Beanstalkd配备了各种第三方工具,包括CLI和基于Web的管理控制台。
到期 -作业可以设置为过期和经销商的队列后(TTR -的时间来运行)。
Beanstalkd用例示例
Banstalkd的一些示例性用例是:
允许Web服务器快速响应请求,而不是强制在现场执行资源匮乏的过程
以特定间隔执行某些作业(即爬网)
将作业分发给多个工作人员进行处理
使离线客户端(例如,断开连接的用户)稍后提取数据,而不是使其通过工作者永久丢失
向后端系统引入完全异步的功能
订购和优先级任务
平衡不同工作者之间的应用负载
大大提高应用程序的可靠性和正常运行时间
稍后处理CPU密集型作业(视频,图像等)
将电子邮件发送到您的列表
和更多。
Beanstalkd元素
就像大多数的应用程序,Beanstalkd本身自带的术语来解释它的零件。
管/队列
Beanstalkd管转换为从其他消息应用程序队列 。 他们通过工作(或消息)转移到消费者(即工人)。
作业/消息
由于Beanstalkd是一个“工作队列”,什么是通过管道传输的称为工作-这是类似发送消息。
生产者/发送者
生产者,类似于高级消息队列协议的定义,是创建和发送作业(或消息)的应用程序。 它们是由消费者使用。
消费者/接收者
接收机从该管获得工作 ,由用于处理的生产者在不同的应用。
在Ubuntu 13上安装Beanstalkd
它可以非常简单地通过包管理器获得Beanstalkd aptitude
和上手。 但是,在几个命令中,您也可以下载并从源代码安装它。
注意:我们将执行我们的设施和执行上的新鲜和新创建的Droplet因各种原因在这里列出的操作。 如果您正在积极地为客户提供服务,并且可能已经修改了您的系统,为了不打破任何有效的工作,并且不会遇到问题,强烈建议您在新系统上尝试以下说明。
使用aptitude安装
运行以下命令下载并安装Beanstalkd:
aptitude install -y beanstalkd
编辑使用默认配置nano
为在系统引导启动:
nano /etc/default/beanstalkd
打开文件后,向下滚动至底部,并找到行#START=yes
。 将其更改为:
START=yes
按CTRL + X,并用Y确认保存并退出。
要开始使用应用程序,请跳到下一节或按照以下步骤查看如何从源代码安装Beanstalkd。
从源安装
我们需要一个从源代码 - Git安装过程的关键工具。
运行以下命令在你的Droplet上获取Git:
aptitude install -y git
下载基本开发工具包:
aptitude install -y build-essential
使用Git让我们克隆(下载)官方仓库:
git clone https://github.com/kr/beanstalkd
输入下载的目录:
cd beanstalkd
从源代码构建应用程序:
make
安装:
make install
使用Beanstalkd
安装后,您可以开始使用Beanstalkd服务器。 以下是运行守护程序的选项:
-b DIR wal directory
-f MS fsync at most once every MS milliseconds (use -f0 for "always fsync")
-F never fsync (default)
-l ADDR listen on address (default is 0.0.0.0)
-p PORT listen on port (default is 11300)
-u USER become user and group
-z BYTES set the maximum job size in bytes (default is 65535)
-s BYTES set the size of each wal file (default is 10485760)
(will be rounded up to a multiple of 512 bytes)
-c compact the binlog (default)
-n do not compact the binlog
-v show version information
-V increase verbosity
-h show this help
示例用法:
# Usage: beanstalkd -l [ip address] -p [port #]
# For local only access:
beanstalkd -l 127.0.0.1 -p 11301 &
管理服务:
如果通过软件包管理器(即aptitude)安装,您将能够将Beanstalkd守护程序作为服务来管理。
# To start the service:
service beanstalkd start
# To stop the service:
service beanstalkd stop
# To restart the service:
service beanstalkd restart
# To check the status:
service beanstalkd status
获取Beanstalkd客户端库
Beanstalkd附带了一大批支持客户端库,可以与许多不同的应用程序部署一起使用。 和框架 - -支持语言的这份名单包括:
python
Django
走
Java
Node.js
Perl
PHP
Ruby
和更多。
对于支持语言和安装说明,为您最喜爱的完整列表,请查看客户端库页Github上的Beanstalkd。
使用Beanstalkd
在本节中 - 在完成文章之前,让我们快速浏览一下Beanstalkd的基本用法。 beanstalkc -在我们的例子中,我们将使用Python语言和Beanstald的Python绑定合作。
要安装beanstalkc,请运行以下命令:
pip install pyyaml
pip install beanstalkc
基本操作
在您正在考虑使用Beanstalkd的所有Python文件中,您需要导入beanstalkc并连接:
import beanstalkc
# Connection
beanstalk = beanstalkc.Connection(host='localhost', port=11301)
要加入工作:
beanstalk.put('job_one')
接收作业:
job = beanstalk.reserve()
# job.body == 'job_one'
在处理作业之后删除作业:
job.delete()
要使用特定的管(即队列/列表):
beanstalk.use('tube_a')
列出所有可用的管:
beanstalk.tubes()
# ['default', 'tube_a']
最后一个例子( nano btc_ex.py
):
import beanstalkc
# Connect
beanstalk = beanstalkc.Connection(host='localhost', port=11301)
# See all tubes:
beanstalk.tubes()
# Switch to the default (tube):
beanstalk.use('default')
# To enqueue a job:
beanstalk.put('job_one')
# To receive a job:
job = beanstalk.reserve()
# Work with the job:
print job.body
# Delete the job:
job.delete()
按CTRL + X,并用Y确认保存并退出。
当你运行上面的脚本,你应该看到打印的作业的正文:
python btc_ex.py
# job_one
要了解更多关于beanstalkd(和beanstalkc)操作,检查出其入门教程。