Beanstalkd 的理解
Beanstalkd 的理解
Beanstalkd 是一个轻量级的内存型队列,利用了和Memcache 类似的协议。其官网beanstakkd官网 下方的感谢语说:
Many thanks to memcached for providing inspiration for simple protocol design and for the structure of the documentation. Not to mention a fantastic piece of software!
对于其底层协议感兴趣的可以去github上看,介绍的很清楚。本文只对beanstalkd 的应用提供思路上的阐释,不列举具体的代码。直到beanstalkd 能够干什么,才能够再实践中去应用。但是怎么用beanstalkd 干活解决问题,则要去网上看beanstalkd 的API,每种语言的都有,可以各取所需。
Beanstalkd 的意思是魔豆,他的队列管理器叫做tube。一般的队列都是先进先出,适合N:M 的生产者消费者处理模型。想象一下如下的模型:我们的业务中经常需要适应高并发的场景,当1万个用户同时访问某个接口时,为了响应服务,我们需要尽可能的加速接口的响应效率。有时候我们只负责提交任务,而不关注任务是否处理成功或者失败。这时候使用过程化的思路解决问题,就会受到牵制。假若盲目的增加机器,压榨mysql的性能,还是不能阻挡十万、百万并发。这时候可以考虑使用异步去处理,接口收到请求之后,立刻将任务放进队列里,新启一台脚本机,起若干进程来消费任务。
为什么要使用Beanstalkd
实际业务中,有时候会出现队列与队列之间相互依赖的情况。比如A,B两个队列。A负责往数据库中insert数据,而B队列负责update数据。只有插入数据库后,我们才能进行update。但是如果同时开两个队列。因为队列执行的先后是不可控的,这就造成了B update的时候,不知道A是否已经insert。另外比如Reids的队列机制,一但消费者从队列中取出了一个job。但是由于神奇的原因,失败掉了,怎么办?任务就这样丢失了,这个任务再也处理不掉了。
带着这些问题,我们交给BeansTalkd来解决。
理解Beanstalkd的队列机制
Beanstalkd 是CS结构,有Server端和Client段之分。Server端都是一样的,负责存储和消费队列任务。但是Client端由于各种语言各种框架,就各部相同。
任务在队里之中被称作Job. 一个Job 再Beanstalkd中有以下的生命周期:
- put:将一个任务放置进tube中
- deayed: 这个任务现在再等待中,需要若干秒才能准备完毕【延迟队列】
- ready: 这个任务已经准备好了,可以消费了。所有的消费都是要从取ready状态的job
- reserved: 这个任务已经被消费者消费。
- release: 这个job执行失败了,把它放进ready状态队列中。让其他队列执行。
- bury:这个job执行失败了,但不希望其他队列执行,先把它埋起来。
这是一个job生命周期的主要状态,如果有讲的不全的,可以去翻看API.
各种语言的演示代码都大同小异,这里就不浪费纸张了。
Beanstalkd 的理解的更多相关文章
- beanstalkd 消息队列
概况:Beanstalkd,一个高性能.轻量级的分布式内存队列系统,最初设计的目的是想通过后台异步执行耗时的任务来降低高容量Web应用系统的页面访问延迟,支持过有9.5 million用户的Faceb ...
- Beanstalkd,zeromq,rabbitmq的区别
1).rabbitmq(功能强大,管理应用也完善,不过也比较重量级)2).zeromq(从rabbitmq出来的一个小而快速的队列,基本是目前最快的队列机制,自身支持多种模式,可以对各个模式进行自己组 ...
- Celery异步的分布式任务调度理解
什么是Celery呢? Celery是一个用Python开发的异步的分布式任务调度模块. Celery本身不包含消息服务,使用第三方消息服务,也就是Broker,来传递任务,目前支持的有Rebbimq ...
- Beanstalkd 基本概念和使用
1:什么是 Beanstalkd ? Beanstalkd 一个高性能.轻量级的分布式内存队列系统 简单来说,就是一个队列,相比于 数据库/redis 队列相比. 更专业.能完成的功能更多.就这么理解 ...
- 【Beanstalkd】Beanstalkd消息队列的安装与使用
一.Beanstalkd是什么? Beanstalkd是一个高性能,轻量级的分布式内存队列 二.Beanstalkd特性 1.支持优先级(支持任务插队)2.延迟(实现定时任务)3.持久化(定时把内存中 ...
- 认识beanstalkd
认识beanstalkd 背景 公司业务做某个需求是将数据写入到消息队列中,然后另外一个服务来消费数据,这里的消息队列使用的是beastalkd,之前接触到的消息队列为kafka,因此简单学习记录一 ...
- 理解CSS视觉格式化
前面的话 CSS视觉格式化这个词可能比较陌生,但说起盒模型可能就恍然大悟了.实际上,盒模型只是CSS视觉格式化的一部分.视觉格式化分为块级和行内两种处理方式.理解视觉格式化,可以确定得到的效果是应 ...
- 彻底理解AC多模式匹配算法
(本文尤其适合遍览网上的讲解而仍百思不得姐的同学) 一.原理 AC自动机首先将模式组记录为Trie字典树的形式,以节点表示不同状态,边上标以字母表中的字符,表示状态的转移.根节点状态记为0状态,表示起 ...
- 理解加密算法(三)——创建CA机构,签发证书并开始TLS通信
接理解加密算法(一)--加密算法分类.理解加密算法(二)--TLS/SSL 1 不安全的TCP通信 普通的TCP通信数据是明文传输的,所以存在数据泄露和被篡改的风险,我们可以写一段测试代码试验一下. ...
随机推荐
- ASP.NET 多环境下配置文件web.config的灵活配置---转
注意:本功能在.Net Core中已经不可用,暂时需手动修改web.config中的信息,或者将其设置在appsettings.XXX.json中,然后再使用web.config中的环境变量来制定使用 ...
- mysql/mariadb 数据库配置
1. 启动mariadb systemctl start mariadb 2. 设置开机启动mariadb systemctl enable mariadb 一.修改用户密码,以root为例 1. ...
- 【转】Visio绘制WEB流程图的心得
一个哥们在MSN上告诉我,他们公司的交互设计师只产出流程图,并问我用什么标准评价流程图的好坏.他的说法把我彻底震了-这分工也太细了吧!也不知道该说他们那里这样是好还是不好. 不过仔细想来,我倒的确没有 ...
- SQLite菜鸟教程
学习链接:http://www.runoob.com/sqlite/sqlite-trigger.html
- easyUI-textbox回车获取不到正确的textbox值问题
//要先给文本框手动赋值之后才可以获取正确的文本框内容 var t = $('#tt'); t.textbox('textbox').bind('keydown', function(e){ if ( ...
- PHP module 安装
Part1:不重新安装php,安装zlib模块--------20171229 先安装zlib源码包 指定到目录 一台服务器,编译PHP时未设置参数,导致缺少zlib扩展,无法执行解压缩,错误信息是: ...
- 写一个有字符界面的ssh链接工具
大概的样子 这是大致的样子- 写之前想说的 因为个人工作的的电脑是deepin系统的,系统本身的命令行非常好用,用第三方的ssh工具用不习惯,就想自己写一个. shell脚本是第一次写,写的不是很好, ...
- O(∩_∩)O~~
1.在一切ac的路上,所以的难题都是纸老虎. 2.加油吧,少年.
- POJ 1061 青蛙的约会 扩展欧几里德--解不定方程
青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 81606 Accepted: 14116 Descripti ...
- SQL Server 修改表结构被阻止 解决办法
在我们的程序开发中,有时候会由于需求的变化而要修改数据库中的表结构.可能是增减列,也可能是修改数据类型,或者修改列名等等.但修改表结构是个危险操作,默认情况下,当你修改表结构时,会弹出如下提示框 上图 ...