文档章节

使用消息队列的 10 个理由

yunwangjun
 yunwangjun
发布于 2012/09/12 11:39
字数 1296
阅读 55
收藏 2

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

消息队列都是一个至关重要的组件,下面是十个理由:
1. 解耦
在项目启动之初来预测将来项目会碰到什么需求,是极其困难的。消息队列在处理过程中间插入了一个隐含的、基于数据的接口层,两边的处理过程都要实现这一接口。这允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。
    
2. 冗余
有时在处理数据的时候处理过程会失败。除非数据被持久化,否则将永远丢失。消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险。在被许多消息队列所采用的"插入-获取-删除"范式中,在把一个消息从队列中删除之前,需要你的处理过程明确的指出该消息已经被处理完毕,确保你的数据被安全的保存直到你使用完毕。
3. 扩展性
因为消息队列解耦了你的处理过程,所以增大消息入队和处理的频率是很容易的;只要另外增加处理过程即可。不需要改变代码、不需要调节参数。扩展就像调大电力按钮一样简单。
    
4. 灵活性 & 峰值处理能力
当你的应用上了Hacker News的首页,你将发现访问流量攀升到一个不同寻常的水平。在访问量剧增的情况下,你的应用仍然需要继续发挥作用,但是这样的突发流量并不常见;如果为以能处理这类峰值访问为标准来投入资源随时待命无疑是巨大的浪费。使用消息队列能够使关键组件顶住增长的访问压力,而不是因为超出负荷的请求而完全崩溃。请查看我们关于峰值处理能力的博客文章了解更多此方面的信息。
5. 可恢复性
当体系的一部分组件失效,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。而这种允许重试或者延后处理请求的能力通常是造就一个略感不便的用户和一个沮丧透顶的用户之间的区别。

6. 送达保证
消息队列提供的冗余机制保证了消息能被实际的处理,只要一个进程读取了该队列即可。在此基础上,IronMQ提供了一个"只送达一次"保证。无论有多少进程在从队列中领取数据,每一个消息只能被处理一次。这之所以成为可能,是因为获取一个消息只是"预定"了这个消息,暂时把它移出了队列。除非客户端明确的表示已经处理完了这个消息,否则这个消息会被放回队列中去,在一段可配置的时间之后可再次被处理。
    
7.排序保证
在许多情况下,数据处理的顺序都很重要。消息队列本来就是排序的,并且能保证数据会按照特定的顺序来处理。IronMO保证消息浆糊通过FIFO(先进先出)的顺序来处理,因此消息在队列中的位置就是从队列中检索他们的位置。
8.缓冲
在任何重要的系统中,都会有需要不同的处理时间的元素。例如,加载一张图片比应用过滤器花费更少的时间。消息队列通过一个缓冲层来帮助任务最高效率的执行--写入队列的处理会尽可能的快速,而不受从队列读的预备处理的约束。该缓冲有助于控制和优化数据流经过系统的速度。
    
9. 理解数据流
在一个分布式系统里,要得到一个关于用户操作会用多长时间及其原因的总体印象,是个巨大的挑战。消息系列通过消息被处理的频率,来方便的辅助确定那些表现不佳的处理过程或领域,这些地方的数据流都不够优化。
10. 异步通信
很多时候,你不想也不需要立即处理消息。消息队列提供了异步处理机制,允许你把一个消息放入队列,但并不立即处理它。你想向队列中放入多少消息就放多少,然后在你乐意的时候再去处理它们。


如果您觉得本站的内容对您有所帮助,您可以点击此处扫二维码关注官方二维码^_^
转载请注明:《使用消息队列的 10 个理由》来自 果拾网

本文转载自:http://www.appleoct.com/dev/424.html

上一篇: HTTP状态码详解
下一篇: HTTP状态码详解
yunwangjun
粉丝 1
博文 2
码字总数 1580
作品 0
西安
后端工程师
私信 提问
加载中

评论(0)

使用消息队列的10个理由

前些年,看这些文章,不大明白消息队列的益处,在项目遇到诸多问题,回过头来才明白这10个理由,字字珠玑。 ----------------------------------------------------------------------------...

Qlinux
2017/03/02
0
0
【Beanstalkd】Beanstalkd消息队列的安装与使用

一、Beanstalkd是什么? Beanstalkd是一个高性能,轻量级的分布式内存队列 二、Beanstalkd特性 1、支持优先级(支持任务插队) 2、延迟(实现定时任务) 3、持久化(定时把内存中的数据刷到binlo...

osc_0s8midei
2018/03/05
9
0
rsyslog磁盘辅助(Disk-Assisted)模式踩坑记

最近公司为方便tracing、排查, 搞全链路日志收集,而我手上的10亿+pv的动态前端服务必然在考虑之列。 之前呢。 都是运维定制的收集方式: 如上图,rsyslog push kafka, 优点嘛: 稳定,肯定...

osc_bdcyjiqy
2019/03/26
2
0
RabbitMQ的几个常见问题

如何保证消息尽量发送成功? 问题描述: 如果没有启动消费者,重启了RabbitMQ服务,队列和消息都会丢失。 解决方案: 针对这个问题,有以下几个机制可以解决: 生产者确认; 持久化; 手动A...

osc_e40tymzn
2019/06/03
6
0
总结消息队列RabbitMQ的基本用法

一、RabbitMQ是什么? AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送...

osc_ofejccgq
2019/06/26
3
0

没有更多内容

加载失败,请刷新页面

加载更多

IP地址正则表达式

提取一段内容中的所有IP地址 ((2(5[0-5]|[0-4]d))|[0-1]?\d{1,2})(.((2(5[0-5]|[0-4]d))|[0-1]?\d{1,2})){3} 判断字符串是否是IP地址 ^((2(5[0-5]|[0-4]d))|[0-1]?\d{1,2})(.((2(5[0-5]|[0-4......

哆啦D梦幻
18分钟前
19
0
CDH在yarn上运行程序乱码

参考文章:CDH在yarn上运行程序乱码 安装完成CDH后,在yarn上不管是使用hive运行mapreduce还是spark,中文全都会乱码。 1. linux的环境变量设置字符集 vi /etc/profile export LANG=zh_CN.UT...

osc_40usjisk
18分钟前
9
0
公积金无租房备案提取如何办理?(以成都为例)

  无租房备案是什么?   首先你要知道租房备案是什么?简单来说就是房东想要对外租房,需要到房管局办理相关手续,   如果你要以租房的名义提取公积金需要提供与房东签订的合同等材料后...

osc_3aqbiyys
19分钟前
0
0
公积金状态封存怎么解封?

  前言   公积金的缴存状态一般有2种,正常和封存,如下截图         公积金状态为封存是什么意思?   指职工因为各种原因导致住房公积金缴存中断,其住房公积金账户无法转移且又...

osc_51airx3z
20分钟前
3
0
你应该知道的公积金基础知识科普

  公积金是什么?   简单来说公积金全称为住房公积金,是一种国家法律规定的住房保障制度,也是普通工薪族的一种福利   公积金的用途?   可用于贷款买房,租房,还房贷,房屋大修等...

osc_u9wft6hh
21分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部