消息队列_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之轻量级分布式内存队列部署?的主要内容,如果未能解决你的问题,请参考以下文章