介绍
仔细宣布应用部署堆栈的每个元素的职责带来了许多好处,包括在出现问题时更简单地诊断问题,快速扩展的能力,以及涉及组件的更清晰的管理范围。
在当今的Web服务工程世界中,实现上述场景的关键组成部分是使用消息传递和工作(或任务)排队,这些通常具有弹性和灵活性的应用程序易于部署和设置,非常适合在生产方面分割应用程序包的不同部分之间的业务逻辑。
在这篇DigitalOcean文章中,我们将继续我们关于应用级通信解决方案的系列,我们将研究 Beanstalkd 来创建这种部件的分离。
Beanstalkd最初是为了解决一个流行的Web应用程序(Facebook上的原因)的需求而开发的,目前,它是一个绝对可靠的,易于安装的消息传递服务,是完美的开始和使用。
如前所述,Beanstalkd的主要用例是通过工作队列和消息来管理应用程序部署堆栈的不同部分和工人之间的工作流程,类似于其他流行的解决方案,如RabbitMQ。
自成立以来,与其他解决方案不同,Beanstalkd旨在成为一个工作队列,而不是一个覆盖许多需求的伞工具。为了实现这一目的,它被构建为基于C编程语言的轻量级和快速运作的应用程序。
特色
能够使用返回的ID监控工作,在创建时返回,只是Beanstalkd的其中一个功能,使其与其他功能不同。
- 持久性 - Beanstalkd在内存中运行,但也提供持久性支持。
- 优先级 - 与大多数替代方案不同,Beanstalkd提供不同任务的优先级,以便在需要时处理紧急事项。
- 分布 - 不同的服务器实例可以以类似的方式分布
- ** Burying** - 可以无限期地推迟一项工作(即一项任务)通过埋葬它。
使用案例示例
Banstalkd的一些典型的用例是:
- 允许 Web 服务器快速响应请求,而不是被迫在 spot 上执行资源沉重的程序* 通过 worker
- 通过 worker
- 通过 worker
- 通过 worker
- 永久失去某些工作(即扫描网络)* 将工作分配给多个工人处理
- 让离线客户端(例如断开连接的用户)在后期获取数据* 非常增加您的应用程序的可靠性和可持续时间* 处理CPU密集型工作(视频,图像等)。
包装元素
就像大多数应用一样,Beanstalkd 提供自己的 jargon 来解释其部分。
尾巴 / 尾巴
Beanstalkd 管从其他消息应用程序翻译为 _queues。
工作 / 信息
由于 Beanstalkd 是一个工作队列
,通过 tubes 传输的信息被称为工作 - 类似于发送的消息。
制作人 / 广播
生产者,类似于高级消息排队协议的定义,是创建和发送工作(或消息)的应用程序。
消费者 / 受益者
接收器是堆栈中的不同应用程序,从 tube 获取一个 job,由生产者创建用于处理。
在 Ubuntu 13 上安装 Beanstalkd
可以很容易地通过包管理器aptitude
获取Beanstalkd并开始使用它,但是,通过几个命令,您也可以从源头下载并安装它。
** 注意:** 我们将执行我们的安装和执行列出的行动在新鲜和新创建的滴滴出于各种原因. 如果你正在积极服务客户,并可能已经修改了你的系统,不打破任何工作和不跑到问题,你是强烈建议尝试下面的指示在一个新的系统。
使用aptitude 安装
运行以下命令来下载和安装 Beanstalkd:
1aptitude install -y beanstalkd
使用nano
编辑默认配置,在系统启动时启动:
1nano /etc/default/beanstalkd
打开文件后,向下滚动,找到字符串 # START=yes
. 将其更改为:
1START=yes
按 CTRL + X 并用 Y 确认保存和退出。
要开始使用该应用程序,请跳过到下一个部分,或随后查看如何从源头安装 Beanstalkd。
从源头安装
我们将需要从源头进行安装的关键工具 - Git。
运行以下操作来获取Git在您的滴子上:
1aptitude install -y git
下载基本开发工具包:
1aptitude install -y build-essential
使用Git来克隆(下载)官方存储库:
1git clone https://github.com/kr/beanstalkd
进入下载的目录:
1cd beanstalkd
从源头构建应用程序:
1make
安装:
1make install
使用 Beanstalkd
安装后,您可以开始使用 Beanstalkd 服务器工作. 以下是运行 DAEMON 的选项:
1-b DIR wal directory
2 -f MS fsync at most once every MS milliseconds (use -f0 for "always fsync")
3 -F never fsync (default)
4 -l ADDR listen on address (default is 0.0.0.0)
5 -p PORT listen on port (default is 11300)
6 -u USER become user and group
7 -z BYTES set the maximum job size in bytes (default is 65535)
8 -s BYTES set the size of each wal file (default is 10485760)
9 (will be rounded up to a multiple of 512 bytes)
10 -c compact the binlog (default)
11 -n do not compact the binlog
12 -v show version information
13 -V increase verbosity
14 -h show this help
使用例子:
1# Usage: beanstalkd -l [ip address] -p [port #]
2# For local only access:
3beanstalkd -l 127.0.0.1 -p 11301 &
管理服务:
如果通过包管理器(即aptitude)安装,您将能够作为服务管理Beanstalkd Daemon。
1# To start the service:
2service beanstalkd start
3
4# To stop the service:
5service beanstalkd stop
6
7# To restart the service:
8service beanstalkd restart
9
10# To check the status:
11service beanstalkd status
获取 Beanstalkd 客户库
Beanstalkd 配备了支持客户端库的长列表,可与许多不同的应用部署一起工作. 支持语言 - and frameworks 列表包括:
- Python
- Django
- Go
- Java
- Node.js
- Perl
- PHP
- Ruby
- 和更多。
有关您最喜欢的支持语言和安装说明的完整列表,请参阅 Github for Beanstalkd 的 客户端库页面。
与Beanstalkd合作
在本节中 - 在完成文章之前 - 让我们快速讨论 Beanstalkd 的基本用途. 在我们的例子中,我们将使用 Python 语言和 Beanstald 的 Python 绑定 - beanstalkc 。
要安装 beanstalkc,请运行以下命令:
1pip install pyyaml
2pip install beanstalkc
基本操作
在您正在考虑使用 Beanstalkd 的所有 Python 文件中,您需要导入 beanstalkc 并连接:
1import beanstalkc
2
3# Connection
4beanstalk = beanstalkc.Connection(host='localhost', port=11301)
找一份工作:
1beanstalk.put('job_one')
要得到一份工作:
1job = beanstalk.reserve()
2# job.body == 'job_one'
处理工作后删除工作:
1job.delete()
要使用特定管道(即队列 / 列表):
1beanstalk.use('tube_a')
列出所有可用的管道:
1beanstalk.tubes()
2# ['default', 'tube_a']
最后一个例子(nano btc_ex.py
):
1import beanstalkc
2
3# Connect
4beanstalk = beanstalkc.Connection(host='localhost', port=11301)
5
6# See all tubes:
7beanstalk.tubes()
8
9# Switch to the default (tube):
10beanstalk.use('default')
11
12# To enqueue a job:
13beanstalk.put('job_one')
14
15# To receive a job:
16job = beanstalk.reserve()
17
18# Work with the job:
19print job.body
20
21# Delete the job:
22job.delete()
按 CTRL + X 并用 Y 确认保存和退出。
当您运行上述脚本时,您应该看到工作体被打印:
1python btc_ex.py
2# job_one
要了解更多关于beanstalkd(和beanstalkc)操作的信息,请参阅其 Getting Started教程。