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 Core 中的缓存
目录 缓存的基本概念 缓存原理 缓存设计 分布式缓存 Memcache 与 Redis 的比较 缓存穿透,缓存击穿,缓存雪崩解决方案 数据一致性 使用内置 MemoryCache 使用分布式缓存 Re ...
- 笔记一:python安装和执行
一:学习内容 python安装 python简介 python执行 二:python安装 1. 下载python,网地址:https://www.python.org/,进入地址后,点击下载downl ...
- Core中使用Hangfire
之前使用Quartz.Net,后来发现hangfire对Core的继承更加的好,而且自带管理后台,这就比前者好用太多了. 安装注册 安装 PM> Install-Package Hangfire ...
- 精度更高的double类型计算工具类(借助BigDecimal类型)
/** * 提供精確的加法運算 * @param args */ public static double add(double v1, double v2) { BigDecimal b1 = ne ...
- Eclipse内存讲解,eclipse.ini设置
Ubuntu 系统下,Eclipse 配置文件: vi ~/eclipse/eclipse.ini -vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:Max ...
- Dubbo2.7源码分析-SPI的应用
SPI简介 SPI是Service Provider Interface的缩写,即服务提供接口(翻译出来好绕口,还是不翻译的好),实质上是接口,作用是对外提供服务. SPI是Java的一种插件机制,可 ...
- vs未能解析此远程名称: 'api.nuget.org'
知道了DNS地址我们就可以来修改了,点击电脑右下角的连接图标,选择“打开网络和共享中心”,当然也可以在控制面板中“网络和Internet”进入“打开网络和共享中心”: 进入“网络和共享中心”后,我 ...
- sendsms短信验证功能实现代码
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <meta name ...
- C# WPF打包部署时添加注册表信息实现开机启动
使用VS自带的打包模块可以很方便的对项目进行打包部署,同时我们也可以在安装部署时操作注册表实现开机启动软件.具体实现如下: 创建安装部署这部分就不用说了,添加安装部署项目后,鼠标右键安装项目-> ...
- Java中反射和Unsafe破坏单例设计模式
有如下单例模式设计代码: class Singleton { private String info = "HELLO SHIT"; private static Singleto ...