Web应用中的轻量级消息队列
Web应用中为什么会需要消息队列?主要原因是由于在高并发环境下,由于来不及同步处理,请求往往会发生堵塞,比如说,大量的insert,update之类的请求同时到达mysql,直接导致无数的行锁表锁,甚至最后请求会堆积过多,从而触发too many connections错误。通过使用消息队列,我们可以异步处理请求,从而缓解系统的压力。在Web2.0的时代,高并发的情况越来越常见,从而使消息队列有成为居家必备的趋势,相应的也涌现出了很多实现方案,像Twitter以前就使用RabbitMQ实现消息队列服务,现在又转而使用Kestrel来实现消息队列服务,此外还有很多其他的选择,比如说:ActiveMQ,ZeroMQ等。
上述消息队列的软件中,大多为了实现AMQP,STOMP,XMPP之类的协议,变得极其重量级,但在很多Web应用中的实际情况是:我们只是想找到一个缓解高并发请求的解决方案,不需要杂七杂八的功能,一个轻量级的消息队列实现方式才是我们真正需要的。
第一感觉是能不能使用memcached来实现消息队列?稍加考虑后就会发现它不合适,因为memcached仅仅支持键值方式的操作,没有排序之类的功能,所以如果要用它来实现消息队列,则必须自己通过某个键来保存数组形式的队列,不过这样的话,在操作队列的时候很容易丢失数据,比如说我们要添加一个消息,则需先取出现有队列,然后把消息保存到队列尾部,最后保存队列,单纯使用memcached的话,由于我们无法保证整个过程的原子性,所以当处理若干个并发请求时,各个请求间可能会互相覆盖,丢失数据就在所难免(新的memcached扩展一定程度上能缓解这个问题)。另外,memcached只是内存键值缓存而已,一旦宕机,数据就消失了。
memcacheq的出现解决了上面的问题,它在memcached的基础上实现了消息队列,以php客户端为例:
消息从尾部入栈:memcache_set
消息从头部出栈:memcache_get
memcacheq依附于memcached之上,所以你可以通过现有的memcached工具来操作它,这无疑是它的一大优势,但它也有一个很大的缺点,那就是memcacheq本身的开发维护似乎并不活跃,如果遇到问题的话,你很可能需要自己动手解决。
目前看来,我更推荐下面这种解决方案,那就是redis,如果不了解,可以参考我以前的文章,表面上看,redis和memcached差不多,也是键值操作,但是redis本身实现了list,相关操作也可以保证是原子的,所以可以很自然的通过list来实现消息队列:
消息从尾部进队列:RPUSH
消息从头部出队列:LPOP
redis本身虽然是一个新项目,但很有朝气,开发维护也很活跃,如果你的下一个Web应用里需要使用轻量级的消息队列,不妨使用它,顺便说一句,redis里还有set结构,可以用来实现一个高效能的tag系统。
此外,还有不少其他的选择可供尝试,比如说MySQL第三方的Q4M引擎,通过扩展SQL语法来操作消息队列,也是一个不错的选择。
Web应用中的轻量级消息队列相关推荐
- 轻量级消息队列RedisQueue
消息队列(Message Queue)是分布式系统必不可少的中间件,大部分消息队列产品(如RocketMQ/RabbitMQ/Kafka等)要求团队有比较强的技术实力,不适用于中小团队,并且对.NET ...
- RabbitMQ 中 7 种消息队列
点击关注公众号,Java干货及时送达 七种模式介绍与应用场景 简单模式(Hello World) 做最简单的事情,一个生产者对应一个消费者,RabbitMQ相当于一个消息代理,负责将A的消息转发给B ...
- Spring Boot 项目 RedisTemplate 实现轻量级消息队列
背景公司项目有个需求, 前端上传excel文件, 后端读取数据.处理数据.返回错误数据, 最简单的方式同步处理, 客户端上传文件后一直阻塞等待响应, 但用户体验无疑很差, 处理数据可能十分耗时, 没人 ...
- RabbitMQ中7种消息队列和保姆级代码演示!
blog.csdn.net/qq_32828253/article/details/110450249 七种模式介绍与应用场景 简单模式(Hello World) 做最简单的事情,一个生产者对应一个消 ...
- r语言list添加元素_Redis数据结构 List 类型】List 类型生产中的应用 消息队列、排行榜、朋友圈、监控程序的实现...
点击蓝色"不太灵光的程序员"关注我哟加个"星标",每天上午 08:00,干货推送!昨天有很多同学关注,感谢你们的支持.本文依旧会对学习内容进行拆分,建议阅读时间 ...
- kestrel轻量级消息队列的安装
一简介 1.kestrel是一个轻量级的消息队列框架,总体来说的好处就是轻量,易于使用,但是不太便于管理. 2.现在市面上的消息中间件非常多,比较著名的就是MQ.kestrel对于新应用相对来说用的很 ...
- python huey 轻量级消息队列
一huey 库简介 一个轻型的任务队列,功能和相关的broker没有celery强大,重在轻型,而且代码读起来也比较的简单. 1.下载安装huey. pip install huey 2 .下载安装r ...
- 消息队列技术的介绍和原理(MQ)
最近要做一个项目准备用分布式消息队列, 花点时间看了下. 消息队列技术是分布式应用间交换信息的一种技术.消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走.通过消息队列,应用程序可独立地 ...
- OSSIM中分布式消息队列应用
OSSIM中分布式消息队列应用 1. 消息队列处理 企业日志数量正在以指数级形式高速增长,日志数据的具有海量.多样.异构等特点,基于传统的单一节点混合式安装的OSSIM平台(指OSSIM 4.4及以 ...
最新文章
- 关闭webstorm自动保存,并显示文件未保存标识
- vue单页面跳页没有数据了_详解刷新页面vuex数据不消失和不跳转页面的解决
- Hadoop集群中运行MapReduce程序错误记录
- 用WSE在Web服务中验证用户身份
- 计算机可执行指令吧,电脑“开始-运行”的常用命令及用法!很有用!
- Python操作Memcached
- JMM和happens-before原则
- [Embeding-1]Efficient Estimation of Word Representations in Vector Space 译文
- 安卓与HTML简单的交互使用
- linux sort 排序 性能,Linux中sort 排序
- GBDT 和 AdaBoost
- Codeforces Round #358 (Div. 2) Alyona and Strings
- HDU2897 邂逅明下
- android提示用户去开启gps,在不使用GPS或互联网的情况下获取Android中用户的当前位置...
- ubuntu中firefox图片有色差问题
- PDF权限密码怎么解除
- 如何简化美化LEfSe分析结果中的Cladogram图
- 食品机械怎么找客户,如何转型
- 【sklearn下的SVM转onnx】
- 有限域(3)——多项式环的商环构造有限域
热门文章
- php与html交互实现登录,php与html实现交互的基本操作
- 学Python,这些内置数据类型总结(数字类型)你可否知道
- Python中的collections模块的相关练习
- office插件开发_Visual Studio Code有哪些你常用的插件?
- matlab中卡尔曼滤波,卡尔曼滤波器和matlab代码.doc
- android 使用jar里 aidl,Android Studio中用gradle打包带AIDL文件的jar文件
- 关于mouseenter、mouseover、mouseout、mouseleave的理解
- 【Java】剑指 Offer 52. 两个链表的第一个公共节点
- Sigma Function LightOJ - 1336[约数和定理]
- matlab计算多张图像的灰度直方图_MATLAB图像处理基本操作