首页 数据库 Redis 一定要用消息队列?聊聊为什么要用它

一定要用消息队列?聊聊为什么要用它

Jan 21, 2023 am 07:30 AM
消息队列

本篇文章给大家带来了关于消息队列的相关知识,其中主要介绍了咱们之所以要使用消息队列的原因,为什么要使用消息队列,感兴趣的朋友,下面一起来看一下吧,希望对大家有帮助。

为什么要使用消息队列,六个字总结:解耦、异步、消峰

1)解耦

传统模式下系统间的耦合性太强。怎么说呢,举个例子:系统 A 通过接口调用发送数据到 B、C、D 三个系统,如果将来 E 系统接入或者 B 系统不需要接入了,那么系统 A 还需要修改代码,非常麻烦。

896da398dc98788ffa036eef0671a4d.jpg

如果系统 A 产生了一条比较关键的数据,那么它就要时时刻刻考虑 B、C、D、E 四个系统如果挂了该咋办?这条数据它们是否都收到了?显然,系统 A 跟其它系统严重耦合。

而如果我们将数据(消息)写入消息队列,需要消息的系统直接自己从消息队列中消费。这样下来,系统 A 就不需要去考虑要给谁发送数据,不需要去维护这个代码,也不需要考虑其他系统是否调用成功、失败超时等情况,反正我只负责生产,别的我不管。

157d1e8403854609be2fc04a41a249f.jpg

2)异步

先来看传统同步的情况,举个例子:系统 A 接收一个用户请求,需要进行写库操作,还需要同样的在 B、C、D 三个系统中进行写库操作。如果 A 自己本地写库只要 1ms,而 B、C、D 三个系统写库分别要 100ms、200ms、300ms。最终请求总延时是 1 + 100 + 200 + 300 = 601ms,用户体验大打折扣。

8a30419a803e9cded36efddf86c53ff.jpg

如果使用消息队列,那么系统 A 就只需要发送 3 条消息到消息队列中就行了,假如耗时 5ms,A 系统从接受一个请求到返回响应给用户,总时长是 1 + 5 = 6ms,对于用户而言,体验好感度直接拉满。

99ba7a633102bb9b48edb1534707ea1.jpg

3)消峰

如果没有使用缓存或者消息队列,那么系统就是直接基于数据库 MySQL 的,如果有那么一个高峰期,产生了大量的请求涌入 MySQL,毫无疑问,系统将会直接崩溃。

那如果我们使用消息队列,假设 MySQL 每秒钟最多处理 1k 条数据,而高峰期瞬间涌入了 5k 条数据,不过,这 5k 条数据涌入了消息队列。这样,我们的系统就可以从消息队列中根据数据库的能力慢慢的来拉取请求,不要超过自己每秒能处理的最大请求数量就行。

也就是说消息队列每秒钟 5k 个请求进来,1k 个请求出去,假设高峰期 1 个小时,那么这段时间就可能有几十万甚至几百万的请求积压在消息队列中。不过这个短暂的高峰期积压是完全可以的,因为高峰期过了之后,每秒钟就没有那么多的请求进入消息队列了,但是数据库依然会按照每秒 1k 个请求的速度处理。所以只要高峰期一过,系统就会快速的将积压的消息给处理掉。

18c3dbe961538803c7920ed23a0c0b1.jpg

推荐学习:《Redis视频教程

以上是一定要用消息队列?聊聊为什么要用它的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Java Websocket开发实战:如何实现消息队列功能 Java Websocket开发实战:如何实现消息队列功能 Dec 02, 2023 pm 01:57 PM

JavaWebsocket开发实战:如何实现消息队列功能引言:随着互联网的迅速发展,实时通信变得越来越重要。在许多Web应用程序中,需要通过实时消息传递来实现实时更新和通知功能。JavaWebsocket是一种在Web应用程序中实现实时通信的技术。本文将介绍如何利用JavaWebsocket来实现消息队列功能,并提供具体的代码示例。消息队列的基本概念消

如何在FastAPI中使用消息队列进行异步任务处理 如何在FastAPI中使用消息队列进行异步任务处理 Jul 30, 2023 pm 09:21 PM

如何在FastAPI中使用消息队列进行异步任务处理引言:在Web应用程序中,经常会遇到需要处理耗时的任务,例如发送电子邮件、生成报表等。如果将这些任务放在同步的请求-响应流程中,会导致用户需要等待较长时间,降低用户体验和服务器的响应速度。为了解决这个问题,我们可以使用消息队列来进行异步任务处理。本文将介绍如何在FastAPI框架中使用消息队列进行异步任务的处

Golang开发:使用NATS构建可靠的消息队列 Golang开发:使用NATS构建可靠的消息队列 Sep 21, 2023 am 11:21 AM

Golang开发:使用NATS构建可靠的消息队列,需要具体代码示例引言:在现代分布式系统中,消息队列是一个重要的组件,用于处理异步通信、解耦系统组件和实现可靠的消息传递。本文将介绍如何使用Golang编程语言和NATS(全称是"高性能可靠消息系统")来构建一个高效、可靠的消息队列,并提供具体的代码示例。什么是NATS?NATS是一种轻量级的、开源的消息系统。

C#开发中如何处理分布式事务和消息队列 C#开发中如何处理分布式事务和消息队列 Oct 09, 2023 am 11:36 AM

C#开发中如何处理分布式事务和消息队列引言:在今天的分布式系统中,事务和消息队列是非常重要的组件。在处理数据一致性和系统解耦方面,分布式事务和消息队列起着至关重要的作用。本文将介绍如何在C#开发中处理分布式事务和消息队列,并给出具体的代码示例。一、分布式事务分布式事务是指跨多个数据库或服务的事务。在分布式系统中,如何保证数据的一致性成为一大挑战。下面介绍两种

如何在Java中使用Linux脚本操作实现消息队列 如何在Java中使用Linux脚本操作实现消息队列 Oct 05, 2023 am 08:09 AM

如何在Java中使用Linux脚本操作实现消息队列,需要具体代码示例消息队列是一种常见的通信机制,用于在不同进程之间传递数据。在Java中,我们可以使用Linux脚本操作来实现消息队列,这样可以轻松地将消息发送到队列中或从队列中接收消息。在本文中,我们将详细介绍如何使用Java和Linux脚本来实现消息队列,并提供具体的代码示例。为了开始使用Java和Lin

Redis在消息队列中的妙用 Redis在消息队列中的妙用 Nov 07, 2023 pm 04:26 PM

Redis在消息队列中的妙用消息队列是一种常见的解耦架构,用于在应用程序之间传递异步消息。通过将消息发送到队列中,发送者可以在不等待接收者响应的情况下继续执行其他任务。而接收者可以在适当的时间从队列中获取消息并进行处理。Redis是一种常用的开源内存数据库,具备高性能和持久性存储的能力。在消息队列中,Redis的多种数据结构和优秀的性能使其成为一个理想的选择

深入了解Kafka消息队列的底层实现机制 深入了解Kafka消息队列的底层实现机制 Feb 01, 2024 am 08:15 AM

Kafka消息队列的底层实现原理概述Kafka是一个分布式、可扩展的消息队列系统,它可以处理大量的数据,并且具有很高的吞吐量和低延迟。Kafka最初是由LinkedIn开发的,现在是Apache软件基金会的一个顶级项目。架构Kafka是一个分布式系统,由多个服务器组成。每个服务器称为一个节点,每个节点都是一个独立的进程。节点之间通过网络连接,形成一个集群。K

如何利用Redis和Golang实现简单的消息队列 如何利用Redis和Golang实现简单的消息队列 Aug 01, 2023 am 08:09 AM

如何利用Redis和Golang实现简单的消息队列引言消息队列被广泛应用于各种应用场景,如解耦系统组件、削峰填谷、异步通信等。本文将介绍如何使用Redis和Golang实现简单的消息队列,帮助读者了解消息队列的基本原理和实现方式。Redis简介Redis是一个使用C语言编写的开源内存数据库,提供了键值对存储和其他常用数据结构的处理功能。Redis以其高性能、

See all articles