消息队列_Beanstalkd-0001.Beanstalkd之轻量级分布式内存队列部署?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了消息队列_Beanstalkd-0001.Beanstalkd之轻量级分布式内存队列部署?相关的知识,希望对你有一定的参考价值。

简单介绍:

说明: Beantalkd是一个高性能,轻量级的分布式消息队列,最初设计目的是想通过后台异步执行耗时任务降低WEB应用页面访问延迟,支持过1000万用户的应用,被豆瓣内部广泛使用.


几大特性:


1. 支持持久化,默认使用内存,但可启动时-b指定持久化目录,将任务写入Binlog,以相同参数启动会自动恢复Binlog中内容

2. 支持优先级0~2^32,任务优先级越小表示优先级越高,默认优先级为1024

3. 支持超时重发,预设过期时间或TTR时间内如果没有发送delete/release/bury改变任务状态,则认为消息处理失败,把任务交给别的消费者执行

4. 支持任务预留,如果任务因为某些原因无法执行,消费者可以把任务置为buried状态保留这些任务

5. 支持分布式,客户端可实现和Memcache一样的分布式



几点不足:


1. 和memcached类似,依赖libevent单线程事件分发,不能有效利用多核CPU性能,可用多实例部署来解决


基础概念:

技术分享

producer put一个job时,job处于READY状态,等待consumer来处理,如果选择延迟put,job处于DELAYED状态,等待时间过后变为READY状态,consumer获取了当前READY的job后,状态变为RESERVED,可以选择delete,delete后job从队列中删除,之后不能再获取,release后job变为READY状态,其它的consumer可继续获取执行该job,bury后job变为BURIED会将job休眠,等到需要的时候再kick回READY状态,也可以直接delete删除休眠的job

job一个需要异步处理的任务,作为Beanstalkd的基本单元,需要放在一个tube中
tube一个用于异步通信的队列,存储统一类型的任务,是producer和consumer操作的对象
producer一个任务的生产者,通过put将任务放到对应的tube队列
consumer一个任务的消费者,通过reserver/release/bury/delete来获取或改变任务状态台


快速安装:


yum -y install beanstalkd
/etc/init.d/beanstalkd restart


编译安装:


useradd -M -s /sbin/nologin beanstalkd
tar -zxvf beanstalkd-1.10.tar.gz && cd beanstalkd-1.10
make install PREFIX=/xm-workspace/xm-apps/beanstalkd0001
# 创建持久化目录
cd /xm-workspace/xm-apps/beanstalkd0001 && mkdir -p persistent
/etc/init.d/beanstalkd restart


管理工具:

https://github.com/kr/beanstalkd/wiki/Tools#some-community-tools-for-managing-beanstalkd


tar -xvzf beanstool_v0.2.0_linux_amd64.tar.gz
cp beanstool_v0.2.0_linux_amd64/beanstool /xm-workspace/xm-apps/beanstalkd0001/bin/
cd /xm-workspace/xm-apps/beanstalkd0001/bin/ && beanstool stats


本文出自 “满满李 - 运维开发之路” 博客,请务必保留此出处http://xmdevops.blog.51cto.com/11144840/1878725

以上是关于消息队列_Beanstalkd-0001.Beanstalkd之轻量级分布式内存队列部署?的主要内容,如果未能解决你的问题,请参考以下文章

消息队列

消息总线和消息队列的理解

FreeRTOS操作系统例程(8):消息队列

如何用php获取rabbitmq指定队列中的未处理消息数量

如何用php获取rabbitmq指定队列中的未处理消息数量

消息队列_RabbitMQ-0001.RabbitMQ消息代理/队列服务器快速安全部署?