如何安装和使用Beanstalkd工作队列

网络 通信技术 网络管理 网络运维
Beanstalkd首先是解决了一个流行的web应用程序的需求。Beanstalkd旨在成为一个工作队列,为了实现这一目的,它作为一种轻量级的、快速有效的应用程序基于C编程语言。精益建筑还允许它是安装和使用非常简单,使它适合大多数用例。

介绍

小心翼翼地宣布每一元素的职责部署应用程序栈带来很多好处,包括简单的诊断问题时发生,规模迅速的能力,以及更清晰的管理范围涉及的组件。

在当今世界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运行以下命令:

  1. aptitude install -y beanstalkd 

编辑默认配置文件让随着系统启动

  1. vim /etc/default/beanstalkd 

打开文件后,向下滚动并找到底部线#开始= yes。将其更改为:

  1. START=yes 

下面介绍源码安装

我们需要从源代码安装过程的一个关键工具- Git。

运行以下获取Git在你系统上:

  1. aptitude install -y git 

下载必要的开发工具软件包:

  1. aptitude install -y build-essential 

使用Git克隆(下载)官方库:

  1. git clone https://github.com/kr/beanstalkd 

进入到下载目录:

  1. cd beanstalkd 

从源代码构建应用程序:

  1. make 

安装:

  1. make install 

再介绍一下centos下源码安装:

  1. 下载地址: 
  2.   
  3. wget   http://cloud.github.com/downloads/kr/beanstalkd/beanstalkd-1.4.6.tar.gz 
  4.   
  5. 解压: 
  6.   
  7. tar xzf beanstalkd-1.4.6.tar.gz 
  8.   
  9. cd beanstalkd-1.4.6 
  10.   
  11. /configure 
  12.  
  13. make 
  14.   
  15. make install 
  16.   
  17. 默认安装路径 :/usr/local/bin/ 
  18.   
  19. 查看版本: 
  20.   
  21. /usr/local/bin/beanstalkd -v 
  22.   
  23. 1.4.6 

#p#

再附加一个启动脚本,从Fedora下挖来的 startup 脚本:

  1. #!/bin/sh 
  2. # beanstalkd - a simple, fast workqueue service 
  3. # chkconfig:   - 57 47 
  4. # description: a simple, fast workqueue service 
  5. # processname:  beanstalkd 
  6. # config:       /etc/sysconfig/beanstalkd 
  7. #              
  8.   
  9. ### BEGIN INIT INFO 
  10. # Provides: beanstalkd 
  11. # Required-Start: $local_fs $network $remote_fs 
  12. # Required-Stop: $local_fs $network $remote_fs 
  13. # Default-Stop: 0 1 2 6 
  14. # Short-Description: start and stop beanstalkd 
  15. # Description: a simple, fast work-queue service 
  16. ### END INIT INFO 
  17.   
  18. # Source function library. 
  19. /etc/rc.d/init.d/functions 
  20.   
  21. # Source networking configuration. 
  22. /etc/sysconfig/network 
  23.   
  24. # Check that networking is up. 
  25. [ "$NETWORKING" = "no" ] && exit 
  26. exec="/usr/local/bin/beanstalkd" 
  27. prog=$(basename $exec) 
  28.  
  29. # default options, overruled by items in sysconfig 
  30. BEANSTALKD_ADDR=127.0.0.1 
  31. BEANSTALKD_PORT=11300 
  32. BEANSTALKD_USER=beanstalkd 
  33.   
  34. [ -e /etc/sysconfig/beanstalkd ] && . /etc/sysconfig/beanstalkd 
  35.   
  36. lockfile=/var/lock/subsys/beanstalkd 
  37.  
  38. start() { 
  39. [ -x $exec ] || exit 5 
  40. echo -n $"Starting $prog: " 
  41. # if not running, start it up here, usually something like "daemon $exec" 
  42. options="-l ${BEANSTALKD_ADDR} -p ${BEANSTALKD_PORT} -u ${BEANSTALKD_USER}" 
  43. if [ "${BEANSTALKD_MAX_JOB_SIZE}" != ""  ]; then 
  44. options="${options} -z ${BEANSTALKD_MAX_JOB_SIZE}" 
  45. fi 
  46.  
  47. if [ "${BEANSTALKD_BINLOG_DIR}" != "" ]; then 
  48. if [ ! -d "${BEANSTALKD_BINLOG_DIR}" ]; then 
  49. echo "Creating binlog directory (${BEANSTALKD_BINLOG_DIR})" 
  50. mkdir -p ${BEANSTALKD_BINLOG_DIR} && chown ${BEANSTALKD_USER}:${BEANSTALKD_USER} ${BEANSTALKD_BINLOG_DIR} 
  51. fi 
  52. options="${options} -b ${BEANSTALKD_BINLOG_DIR}" 
  53. if [ "${BEANSTALKD_BINLOG_FSYNC_PERIOD}" != "" ]; then 
  54. options="${options} -f ${BEANSTALKD_BINLOG_FSYNC_PERIOD}" 
  55. else 
  56. options="${options} -F" 
  57. fi 
  58. if [ "${BEANSTALKD_BINLOG_SIZE}" != "" ]; then 
  59. options="${options} -s ${BEANSTALKD_BINLOG_SIZE}" 
  60. fi 
  61. fi 
  62.  
  63. daemon $exec -d $options 
  64. retval=$? 
  65. echo 
  66. [ $retval -eq 0 ] && touch $lockfile 
  67. return $retval 
  68.   
  69. stop() { 
  70. echo -n $"Stopping $prog: " 
  71. # stop it here, often "killproc $prog" 
  72. killproc $prog -INT 
  73. retval=$? 
  74. echo 
  75. [ $retval -eq 0 ] && rm -f $lockfile 
  76. return $retval 
  77.   
  78. restart() { 
  79. stop 
  80. start 
  81.   
  82. reload() { 
  83. restart 
  84.   
  85. force_reload() { 
  86. restart 
  87.   
  88. rh_status() { 
  89. # run checks to determine if the service is running or use generic status 
  90. status $prog 
  91.   
  92. rh_status_q() { 
  93. rh_status >/dev/null 2>&1 
  94.  
  95.  
  96. case "$1" in 
  97. start) 
  98. rh_status_q && exit 0 
  99. $1 
  100. ;; 
  101. stop) 
  102. rh_status_q || exit 0 
  103. $1 
  104. ;; 
  105. restart) 
  106.  $1 
  107. ;; 
  108. reload) 
  109. rh_status_q || exit 7 
  110. $1 
  111. ;; 
  112. force-reload) 
  113. force_reload 
  114. ;; 
  115. status) 
  116. rh_status 
  117. ;; 
  118. condrestart|try-restart) 
  119. rh_status_q || exit 0 
  120. restart 
  121. ;; 
  122. *) 
  123. echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}" 
  124. exit 2 
  125. esac 
  126. exit $? 

#p#

使用Beanstalkd

在安装之后,您就可以开始使用Beanstalkd服务器。以下是运行守护进程的选项:

  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: 
  3. beanstalkd -l 127.0.0.1 -p 11301 & 

管理服务:

如果安装包管理器(i.e. aptitude),你将能够管理Beanstalkd作为服务守护进程。

  1. # To start the service: 
  2. service beanstalkd start 
  3.   
  4. # To stop the service: 
  5. service beanstalkd stop 
  6.   
  7. # To restart the service: 
  8. service beanstalkd restart 
  9.   
  10. # To check the status: 
  11. 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,运行以下命令:

  1. pip install pyyaml 
  2. pip install beanstalkc 

基本操作

在所有Python文件你想处理Beanstalkd时,需要导入beanstalkc并连接:

  1. import beanstalkc 
  2.   
  3. # Connection 
  4. beanstalk = beanstalkc.Connection(host='localhost'port=11301

 

To enqueue a job:

  1. beanstalk.put('job_one') 

To receive a job:

  1. job = beanstalk.reserve() 
  2. job.body == 'job_one' 

To delete a job after processing it:

  1. job.delete() 

To use a specific tube (i.e. queue / list):

  1. beanstalk.use('tube_a') 

To list all available tubes:

  1. beanstalk.tubes() 
  2. # ['default', 'tube_a'] 

Final example (nano btc_ex.py):

  1. import beanstalkc 
  2.   
  3. # Connect 
  4. beanstalk = beanstalkc.Connection(host='localhost'port=11301
  5.   
  6. # See all tubes: 
  7. beanstalk.tubes() 
  8.  
  9. # Switch to the default (tube): 
  10. beanstalk.use('default') 
  11.   
  12. # To enqueue a job: 
  13. beanstalk.put('job_one') 
  14.   
  15. # To receive a job: 
  16. job = beanstalk.reserve() 
  17.  
  18. # Work with the job: 
  19. print job.body 
  20.   
  21. # Delete the job:  
  22. job.delete() 

当您运行上面的脚本时,您应该会看到工作的主体被打印:

  1. python btc_ex.py 
  2. # job_one 

 

 

看到更多关于beanstalkd(beanstalkc)操作,查看它的入门教程–>http://beanstalkc.readthedocs.org/en/latest/tutorial.html

责任编辑:守望幸福 来源: 51CTO.com
相关推荐

2022-01-12 12:35:36

Linuxworkqueue工作队列

2011-06-20 06:14:15

ibmdwLinux

2021-12-27 07:55:59

Linux 中断处理Linux 系统

2011-09-14 10:08:07

Beanstalkd

2023-04-02 21:45:46

Vim文本编辑器

2022-03-09 13:53:54

停靠区Latte DocUbuntu

2011-09-15 16:44:36

UbuntuGoldenDict

2011-09-05 13:41:32

UbuntueCryptfs

2024-03-22 12:10:39

Redis消息队列数据库

2023-04-24 08:00:00

2023-06-12 17:54:50

2023-03-14 16:44:20

Linuxhtop

2010-03-29 16:00:19

Nginx 虚拟机

2024-04-30 08:09:10

PulsarArthas消息队列

2018-02-25 11:03:00

LinuxUbuntuEncryptpad

2022-09-19 08:45:52

Telnet系统Linux

2023-07-05 16:45:30

WiresharkLinux

2019-09-11 14:30:45

UbuntuLinuxR语言

2020-07-16 15:01:46

物联网数字工作远程工作

2020-09-30 11:33:42

云计算
点赞
收藏

51CTO技术栈公众号