3

消息队列的十大用途

 3 years ago
source link: https://www.jianshu.com/p/c90242256ac7
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

消息队列的十大用途

0.1292020.11.05 17:44:08字数 1,279阅读 91

消息队列的十大用途

去年,我们一直在使用,构建和传播消息队列,我们认为它们很棒,这已经不是什么秘密了。我们认为消息队列是任何体系结构或应用程序的重要组成部分,以下是十个原因:

在项目开始时,很难预测项目的未来需求。通过在进程之间引入一个层,消息队列创建两个进程都实现的基于数据的隐式接口。通过简单地确保它们遵循相同的界面要求,您就可以独立地扩展和修改这些过程。

有时,处理数据时进程会失败。除非这些数据得以保留,否则它将永远丢失。队列通过保留数据直到完全处理数据来缓解这种情况。许多消息队列使用的put-get-delete范式需要一个过程来明确表明它已完成对消息的处理,然后再将消息从队列中删除,以确保在处理完数据之前保持数据的安全。

3)可伸缩性

因为消息队列使您的流程脱钩,所以很容易扩大将消息添加到队列或处理消息的速率。只需添加另一个过程。无需更改代码,无需调整配置。扩展就像增加功率一样简单。

和可扩展性当您的应用程序进入Hacker News的首页时,您将看到异常的流量水平。您的应用程序需要能够在增加的负载下继续运行,但是流量异常,而不是标准流量;拥有足够的备用资源来处理这些峰值是很浪费的。消息队列将使陷入困境的组件能够承受增加的负载,而不会因请求过载而完全失败。请查看我们的Spikability博客文章,以获取有关此信息的更多信息。

当您的架构的一部分出现故障时,不需要将整个系统降低下来。消息队列使进程解耦,因此,如果正在处理队列中消息的进程失败,则系统恢复时仍可以将消息添加到要处理的队列中。接受将在以后重试或处理的请求的能力通常是不便的客户和沮丧的客户之间的区别。

6)传递保证

消息队列提供的冗余保证了只要进程正在读取队列,消息将最终得到处理。最重要的是,IronMQ提供了一次交付的唯一保证。无论有多少个进程从队列中提取数据,每个消息只会被处理一次。之所以可以这样做是因为检索消息“保留”了该消息,并暂时将其从队列中删除。除非客户端特别声明已完成该消息,否则该消息将在可配置的时间后放回到队列中进行处理。

7)订购保证

在许多情况下,处理数据的顺序很重要。消息队列本质上是有序的,并且能够保证将按照特定的顺序处理数据。IronMQ保证将使用FIFO(先进先出)来处理消息,因此,将消息放入队列的顺序就是从队列中检索消息的顺序。

8)缓冲
在任何非平凡的系统中,都会有需要不同处理时间的组件。例如,上传图像所需的时间少于对其应用滤镜的时间。消息队列通过提供缓冲层来帮助这些任务以最高的效率运行-写入队列的进程可以以其能够的最快速度写入,而不是受到从队列中读取进程的就绪程度的约束。该缓冲区有助于控制和优化数据流过系统的速度。

9)了解数据流

在分布式系统中,全面了解用户需要多长时间才能完成操作以及为什么会有很大问题。通过处理消息队列的速率,消息队列有助于轻松识别性能欠佳的过程或数据流不是最佳的区域。

10)异步通信

很多时候,您不想或不需要立即处理消息。消息队列启用异步处理,这使您可以将消息放入队列而无需立即对其进行处理。对于长时间运行的API调用,SQL报告查询或其他耗时超过一秒的操作,请考虑使用队列。排队尽可能多的消息,然后在闲暇时处理它们。

"小礼物走一走,来简书关注我~"
还没有人赞赏,支持一下
总资产52 (约2.53元)共写了74.4W字获得1,379个赞共708个粉丝

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK