如何安裝和使用Beanstalkd工作隊列
介紹
小心翼翼地宣布每一元素的職責部署應用程序棧帶來很多好處,包括簡單的診斷問題時發(fā)生,規(guī)模迅速的能力,以及更清晰的管理范圍涉及的組件。
在當今世界web服務的工程,一個關鍵的組件實現(xiàn)上述場景涉及利用消息隊列和工作(或任務)。這些通常是彈性和靈活的應用程序很容易實現(xiàn)和設置。他們是完美的分裂的不同部分之間的業(yè)務邏輯應用程序包時生產(chǎn)。
在這篇文章中,我們的應用程序級別系列通信解決方案,我們將看看Beanstalkd創(chuàng)建這個片段的分離。
什么是Beanstalkd
Beanstalkd首先是解決了一個流行的web應用程序的需求(Facebook上的原因)。目前,這是一個絕對可靠,易于安裝的消息傳遞服務,是完美的開始和使用。
如前所述,Beanstalkd的主要用例是管理不同部分和工人之間的工作流應用程序的部署通過工作隊列和消息堆棧,類似于其他受歡迎的解決方案,比如RabbitMQ。然而,創(chuàng)建Beanstalkd使它有別于其他工作。
自成立以來,與其他解決方案,Beanstalkd旨在成為一個工作隊列,而不是一把雨傘工具來滿足許多需求。為了實現(xiàn)這一目的,它作為一種輕量級的、快速有效的應用程序基于C編程語言。精益建筑還允許它是安裝和使用非常簡單,使它適合大多數(shù)用例。
Features(特性)
能夠監(jiān)控工作返回ID,在創(chuàng)建返回,只有一個的特性使它有別于其他的Beanstalkd。提供一些其他有趣的功能是:
1.持久性—>Beanstalkd運行使用內(nèi)存,但也提供了持久性支持。
2.優(yōu)先級—>與大多數(shù)選擇一樣,Beanstalkd提供了不同的任務的優(yōu)先級來處理緊急事情時需要。
3.分布 —->不同的服務器實例可以分布類似于Memcached是如何工作的。
4.掩蓋 —-> 有可能通過掩蓋它無限期延期的作業(yè)(即任務)。
5.第三方工具—>Beanstalkd附帶各種第三方工具包括綜合領先指標和基于web的管理控制臺。
6.過期 —->工作可以設置為過期,auto-queue之后(TTR – Time To Run).
Beanstalkd使用案例
一些模范的Banstalkd用例:
允許web服務器快速響應請求,而不是被迫當場曾推高程序執(zhí)行
在指定的時間間隔執(zhí)行某些工作(即爬行web)
分發(fā)到多個工作人員進行處理
讓離線客戶端(例如一個斷開連接的用戶)獲取數(shù)據(jù)在稍后的時間,而不是讓它永久失去了通過一個工人
引入完全異步功能的后端系統(tǒng)
訂購和優(yōu)先任務
應用程序負載不同員工之間保持平衡
極大地提高應用程序的可靠性和正常運行時間
處理CPU密集型工作(視頻、圖片等)
發(fā)送電子郵件到您的列表和更多。
Beanstalkd元素
就像大多數(shù)應用程序,Beanstalkd附帶自己的術語來解釋它的部分。
Tubes / Queues
Beanstalkd管翻譯從其他消息傳遞應用程序隊列。他們是通過工作(或消息)轉(zhuǎn)移到消費者(即工人)。
Jobs / Messages
由于Beanstalkd是一個工作隊列,通過管稱為轉(zhuǎn)移工作是什么——類似于所發(fā)送的消息。
Producers / Senders
生產(chǎn)商,類似于高級消息隊列協(xié)議的定義,是應用程序創(chuàng)建和發(fā)送工作(或消息)。他們正在使用的消費者。
Consumers / Receivers
接收器是不同的應用程序的堆棧從管找份工作,由生產(chǎn)者進行處理。
在Ubuntu 13安裝Beanstalkd
可以很簡單獲得Beanstalkd通過包管理器才能和開始。然而,在幾個命令,您還可以從源下載并安裝它。
注意:我們將執(zhí)行安裝和執(zhí)行行動列在這里的新鮮和新創(chuàng)建的液滴由于各種原因。如果你是積極服務客戶,可能會修改您的系統(tǒng),不要打破任何工作和不運行在問題,強烈建議您試著在一個新系統(tǒng)下面的說明。
使用aptitude安裝:
下載并安裝Beanstalkd運行以下命令:
- aptitude install -y beanstalkd
編輯默認配置文件讓隨著系統(tǒng)啟動
- vim /etc/default/beanstalkd
打開文件后,向下滾動并找到底部線#開始= yes。將其更改為:
- START=yes
下面介紹源碼安裝
我們需要從源代碼安裝過程的一個關鍵工具- Git。
運行以下獲取Git在你系統(tǒng)上:
- aptitude install -y git
下載必要的開發(fā)工具軟件包:
- aptitude install -y build-essential
使用Git克隆(下載)官方庫:
- git clone https://github.com/kr/beanstalkd
進入到下載目錄:
- cd beanstalkd
從源代碼構(gòu)建應用程序:
- 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
在本節(jié)之前,完成這篇文章,讓我們快速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