介绍
小心翼翼地宣布每一元素的职责部署应用程序栈带来很多好处,包括简单的诊断问题时发生,规模迅速的能力,以及更清晰的管理范围涉及的组件。
在当今世界web服务的工程,一个关键的组件实现上述场景涉及利用消息队列和工作(或任务)。这些通常是弹性和灵活的应用程序很容易实现和设置。他们是完美的分裂的不同部分之间的业务逻辑应用程序包时生产。
在这篇文章中,我们的应用程序级别系列通信解决方案,我们将看看Beanstalkd创建这个片段的分离。
什么是Beanstalkd
Beanstalkd首先是解决了一个流行的web应用程序的需求(Facebook上的原因)。目前,这是一个绝对可靠,易于安装的消息传递服务,是完美的开始和使用。
如前所述,Beanstalkd的主要用例是管理不同部分和工人之间的工作流应用程序的部署通过工作队列和消息堆栈,类似于其他受欢迎的解决方案,比如RabbitMQ。然而,创建Beanstalkd使它有别于其他工作。
自成立以来,与其他解决方案,Beanstalkd旨在成为一个工作队列,而不是一把雨伞工具来满足许多需求。为了实现这一目的,它作为一种轻量级的、快速有效的应用程序基于C编程语言。精益建筑还允许它是安装和使用非常简单,使它适合大多数用例。
Features(特性)
能够监控工作返回ID,在创建返回,只有一个的特性使它有别于其他的Beanstalkd。提供一些其他有趣的功能是:
1.持久性—>Beanstalkd运行使用内存,但也提供了持久性支持。
2.优先级—>与大多数选择一样,Beanstalkd提供了不同的任务的优先级来处理紧急事情时需要。
3.分布 —->不同的服务器实例可以分布类似于Memcached是如何工作的。
4.掩盖 —-> 有可能通过掩盖它无限期延期的作业(即任务)。
5.第三方工具—>Beanstalkd附带各种第三方工具包括综合领先指标和基于web的管理控制台。
6.过期 —->工作可以设置为过期,auto-queue之后(TTR – Time To Run).
Beanstalkd使用案例
一些模范的Banstalkd用例:
允许web服务器快速响应请求,而不是被迫当场曾推高程序执行
在指定的时间间隔执行某些工作(即爬行web)
分发到多个工作人员进行处理
让离线客户端(例如一个断开连接的用户)获取数据在稍后的时间,而不是让它永久失去了通过一个工人
引入完全异步功能的后端系统
订购和优先任务
应用程序负载不同员工之间保持平衡
极大地提高应用程序的可靠性和正常运行时间
处理CPU密集型工作(视频、图片等)
发送电子邮件到您的列表和更多。
Beanstalkd元素
就像大多数应用程序,Beanstalkd附带自己的术语来解释它的部分。
Tubes / Queues
Beanstalkd管翻译从其他消息传递应用程序队列。他们是通过工作(或消息)转移到消费者(即工人)。
Jobs / Messages
由于Beanstalkd是一个工作队列,通过管称为转移工作是什么——类似于所发送的消息。
Producers / Senders
生产商,类似于高级消息队列协议的定义,是应用程序创建和发送工作(或消息)。他们正在使用的消费者。
Consumers / Receivers
接收器是不同的应用程序的堆栈从管找份工作,由生产者进行处理。
在Ubuntu 13安装Beanstalkd
可以很简单获得Beanstalkd通过包管理器才能和开始。然而,在几个命令,您还可以从源下载并安装它。
注意:我们将执行安装和执行行动列在这里的新鲜和新创建的液滴由于各种原因。如果你是积极服务客户,可能会修改您的系统,不要打破任何工作和不运行在问题,强烈建议您试着在一个新系统下面的说明。
使用aptitude安装:
下载并安装Beanstalkd运行以下命令:
- aptitude install -y beanstalkd
编辑默认配置文件让随着系统启动
- vim /etc/default/beanstalkd
打开文件后,向下滚动并找到底部线#开始= yes。将其更改为:
- START=yes
下面介绍源码安装
我们需要从源代码安装过程的一个关键工具- Git。
运行以下获取Git在你系统上:
- aptitude install -y git
下载必要的开发工具软件包:
- aptitude install -y build-essential
使用Git克隆(下载)官方库:
- git clone https://github.com/kr/beanstalkd
进入到下载目录:
- cd beanstalkd
从源代码构建应用程序:
- make
安装:
- make install
再介绍一下centos下源码安装:
- 下载地址:
- wget http://cloud.github.com/downloads/kr/beanstalkd/beanstalkd-1.4.6.tar.gz
- 解压:
- tar xzf beanstalkd-1.4.6.tar.gz
- cd beanstalkd-1.4.6
- /configure
- make
- make install
- 默认安装路径 :/usr/local/bin/
- 查看版本:
- /usr/local/bin/beanstalkd -v
- 1.4.6
#p#
再附加一个启动脚本,从Fedora下挖来的 startup 脚本:
- #!/bin/sh
- #
- # beanstalkd - a simple, fast workqueue service
- #
- # chkconfig: - 57 47
- # description: a simple, fast workqueue service
- # processname: beanstalkd
- # config: /etc/sysconfig/beanstalkd
- #
- ### BEGIN INIT INFO
- # Provides: beanstalkd
- # Required-Start: $local_fs $network $remote_fs
- # Required-Stop: $local_fs $network $remote_fs
- # Default-Stop: 0 1 2 6
- # Short-Description: start and stop beanstalkd
- # Description: a simple, fast work-queue service
- ### END INIT INFO
- # Source function library.
- /etc/rc.d/init.d/functions
- # Source networking configuration.
- /etc/sysconfig/network
- # Check that networking is up.
- [ "$NETWORKING" = "no" ] && exit
- exec="/usr/local/bin/beanstalkd"
- prog=$(basename $exec)
- # default options, overruled by items in sysconfig
- BEANSTALKD_ADDR=127.0.0.1
- BEANSTALKD_PORT=11300
- BEANSTALKD_USER=beanstalkd
- [ -e /etc/sysconfig/beanstalkd ] && . /etc/sysconfig/beanstalkd
- lockfile=/var/lock/subsys/beanstalkd
- start() {
- [ -x $exec ] || exit 5
- echo -n $"Starting $prog: "
- # if not running, start it up here, usually something like "daemon $exec"
- options="-l ${BEANSTALKD_ADDR} -p ${BEANSTALKD_PORT} -u ${BEANSTALKD_USER}"
- if [ "${BEANSTALKD_MAX_JOB_SIZE}" != "" ]; then
- options="${options} -z ${BEANSTALKD_MAX_JOB_SIZE}"
- fi
- if [ "${BEANSTALKD_BINLOG_DIR}" != "" ]; then
- if [ ! -d "${BEANSTALKD_BINLOG_DIR}" ]; then
- echo "Creating binlog directory (${BEANSTALKD_BINLOG_DIR})"
- mkdir -p ${BEANSTALKD_BINLOG_DIR} && chown ${BEANSTALKD_USER}:${BEANSTALKD_USER} ${BEANSTALKD_BINLOG_DIR}
- fi
- options="${options} -b ${BEANSTALKD_BINLOG_DIR}"
- if [ "${BEANSTALKD_BINLOG_FSYNC_PERIOD}" != "" ]; then
- options="${options} -f ${BEANSTALKD_BINLOG_FSYNC_PERIOD}"
- else
- options="${options} -F"
- fi
- if [ "${BEANSTALKD_BINLOG_SIZE}" != "" ]; then
- options="${options} -s ${BEANSTALKD_BINLOG_SIZE}"
- fi
- fi
- daemon $exec -d $options
- retval=$?
- echo
- [ $retval -eq 0 ] && touch $lockfile
- return $retval
- }
- stop() {
- echo -n $"Stopping $prog: "
- # stop it here, often "killproc $prog"
- killproc $prog -INT
- retval=$?
- echo
- [ $retval -eq 0 ] && rm -f $lockfile
- return $retval
- }
- restart() {
- stop
- start
- }
- reload() {
- restart
- }
- force_reload() {
- restart
- }
- rh_status() {
- # run checks to determine if the service is running or use generic status
- status $prog
- }
- rh_status_q() {
- rh_status >/dev/null 2>&1
- }
- case "$1" in
- start)
- rh_status_q && exit 0
- $1
- ;;
- stop)
- rh_status_q || exit 0
- $1
- ;;
- restart)
- $1
- ;;
- reload)
- rh_status_q || exit 7
- $1
- ;;
- force-reload)
- force_reload
- ;;
- status)
- rh_status
- ;;
- condrestart|try-restart)
- rh_status_q || exit 0
- restart
- ;;
- *)
- echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
- exit 2
- esac
- exit $?
#p#
使用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 &
管理服务:
如果安装包管理器(i.e. 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
●Go
●Java
●Node.js
●Perl
●PHP
●Ruby
●and more.
查看完整列表支持,寻找你最喜欢的语言和安装说明,查看客户端库页面Beanstalkd Github上。
使用Beanstalkd
在本节之前,完成这篇文章,让我们快速Beanstalkd的基本用法。在我们的示例中,我们将使用Python语言和Beanstald Python bindings ——beanstalkc。
安装beanstalkc,运行以下命令:
- pip install pyyaml
- pip install beanstalkc
基本操作
在所有Python文件你想处理Beanstalkd时,需要导入beanstalkc并连接:
- import beanstalkc
- # Connection
- beanstalk = beanstalkc.Connection(host='localhost', port=11301)
To enqueue a job:
- beanstalk.put('job_one')
To receive a job:
- job = beanstalk.reserve()
- # job.body == 'job_one'
To delete a job after processing it:
- job.delete()
To use a specific tube (i.e. queue / list):
- beanstalk.use('tube_a')
To list all available tubes:
- beanstalk.tubes()
- # ['default', 'tube_a']
Final example (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()
当您运行上面的脚本时,您应该会看到工作的主体被打印:
- python btc_ex.py
- # job_one
看到更多关于beanstalkd(beanstalkc)操作,查看它的入门教程–>http://beanstalkc.readthedocs.org/en/latest/tutorial.html