消息队列有哪些应用场景?

分布式系统不同模块之间的通信,除了远程服务调用以外,消息中间件是另外一个重要的手段,在各种互联网系统设计中,消息队列有着广泛的应用。从本文开始,专栏进入分布式消息的模块,将讨论消息队列使用中的高频问题,先来看一下,消息队列的应用场景。

什么是消息队列

消息队列,顾名思义,就是传递消息的队列,学习操作系统中进程通信的时候我们知道,消息队列是进程之间的一种很重要的通信机制。随着分布式系统的发展,消息队列在系统设计中又有了更多的应用。

参与消息传递的双方称为生产者和消费者,生产者和消费者可以只有一个实例,也可以集群部署,典型架构如下图所示:

image.png

其中消息体是参与生产和消费两方传递的数据,消息格式既可以是简单的字符串,也可以是序列化后的复杂文档信息。队列是消息的载体,用于传输和保存消息,它和数据结构中的队列一样,可以支持先进先出、优先级队列等不同的特性。

消息队列有哪些应用

消息队列可以用于系统内部组件之间的通信,也可以用于系统跟其他服务之间的交互,消息队列的使用,增加了系统的可扩展性。下面把消息队列的应用归纳为以下几点。

系统解耦

设计模式中有一个开闭原则,指的是软件实体应该对扩展开放、对修改关闭,尽量保持系统之间的独立,这里面蕴含的是解耦思想。而消息队列的使用,可以认为是在系统中隐含地加入了一个对外的扩展接口,能够方便地对业务进行解耦,调用方只需要发送消息而不用关注下游逻辑如何执行。

image (1).png

那你可能会有疑问,系统之间的解耦,使用 RPC 服务调用也可以实现,使用消息队列有什么好处吗?使用远程服务调用,需要在其中一个调用方进行显式地编码业务逻辑;如果使用消息队列就不会有这个问题了,系统之间可以更好地实现依赖倒转,这也是设计模式中的一个重要原则。

异步处理

异步化是一个非常重要的机制,在处理高并发、高可用等系统设计时,如果不需要或者限制于系统承载能力,不能立即处理消息,此时就可以应用消息队列,将请求异步化。

异步处理的一个典型场景是流量削峰,我们用电商的秒杀场景来举例。秒杀抢购的流量峰值是很高的,很多时候服务并不能承载这么高的瞬间流量,于是可以引入消息队列,结合限流工具,对超过系统阈值的请求,在消息队列中暂存,等待流量高峰过去以后再进行处理。

请求缓冲

在典型的生产者和消费者模型中,就是通过一个队列来实现缓冲的。使用消息队列,可以作为一个缓冲层,平滑各个业务系统之间处理性能的不同等,在早期的企业应用系统中,有一个企业数据总线(ESB)的概念,实现的就是内部各个系统之间的集成。

数据分发

消息队列有不同的订阅模式,支持一对多的广播机制,可以用来实现数据的分发。典型的比如关系型数据库对 binlog 订阅的处理,由于主库的 binlog 只有一份,但是下游的消费方可能包括各种文件索引、离线数据库等,这时候就可以应用消息队列来实现数据的分发。

除了这些典型应用,消息队列还可以用来实现分布式事务,在第 06 课时“分布式事务有哪些解决方案”中我们提过,利用数据库+本地消息表的方式分布式一致性,是一个非常经典的分布式事务解决方案。

几种常见的消息队列

主流的消息中间件有以下几种,其中每种 MQ 又有其对应的应用场景。

Apache Kafka

大名鼎鼎的 Kafka 是高性能消息队列的代表,Kafka 是 LinkedIn 开源的一个分布式消息系统,主要使用 Scala 语言开发,已经加入 Apache 顶级项目。

Kafka 集群部署时依赖 ZooKeeper 环境,相比其他的消息队列,运维成本要高很多,ZooKeeper 的引入,使得 Kafka 可以非常方便地进行水平扩展,支持海量数据的传输。

Kafka 的另外一个特点是高吞吐率,在消息持久化写入磁盘的过程中,使用了多种技术来实现读写的高性能,包括磁盘的顺序读写、零拷贝技术等。

Apache RocketMQ

RocketMQ 是阿里巴巴开源的一款消息中间件,使用Java语言开发,在阿里内部应用非常广泛,很多高并发的业务场景下都有 RocketMQ 的应用。

RocketMQ 经过了双十一的检验,消息传递的稳定性和可靠性都比较有保障。以消息持久化为例,我们知道,Linux 文件在写入磁盘时,也就是常说的刷盘操作,因为存在缓存,可能会出现数据丢失的情况,RocketMQ 为了保证数据一致性,在写入磁盘时支持同步刷盘方式,即消息存储磁盘成功,才会返回消息发送成功的响应。

RocketMQ 在实现上有很多这种细节的设计,尽可能地保证了消息投递中的顺序一致性及可靠性,并且优化了响应时间,特别适合电商等相对复杂的业务中应用。

Apache RabbitMQ

RabbitMQ 是使用 Erlang 语言编写的一个开源消息队列,功能比较全面,支持多种消息传输的协议。

我们知道不同的消息队列有很多,为了约束其实现,也就有了一些对应的实现标准,AMQP 是一个异步消息传输的网络协议,RabbitMQ 是典型实现代表,除了 AMQP,RabbitMQ 同时支持 MQTT、STOMP 等协议,对于具体的协议内容,这里不展开,感兴趣的同学可以去找相关资料了解下。Kafka 和 RocketMQ 实现的是自定义协议,实现起来灵活度更高。

除了顺序传输,RabbitMQ 还可以支持优先级队列等特性,不过,它不适合处理大数据量的消息,一旦出现消息堆积,性能下降比较快,所以 RabbitMQ 比较适合企业级应用。

除了上面提到的三款主流消息队列,还有 ActiveMQ、ZeroMQ 等,也都有各自适合的应用场景。思考一下,如果在一个电商系统的构建中,这三款消息队列可以怎样组合使用呢?

Kafka 可以在各类数据埋点中使用,比如电商营销的转化率日志收集和计算,另外,Kafka 的高性能使得特别它适合应用在各类监控、大数据分析等场景。

RocketMQ 对一致性的良好保证,可以应用在电商各级业务调用的拆分中,比如在订单完成后通知用户,物流信息更新以后对订单状态的更新等。

RabbitMQ 则可以在数据迁移、系统内部的业务调用中应用,比如一些后台数据的同步、各种客服和 CRM 系统。

总结

本文分享了消息队列的知识点,包括消息队列的结构、消息队列的应用场景,以及几种常见的消息队列的应用。

通过本文的学习,你已经了解了消息队列的基本应用,你可以结合自己的工作,思考一下都在哪些地方应用了消息队列,以及发挥了什么作用。继续扩展一下,如果让你来设计一个消息队列,应该怎么设计呢?比如消息体是否需要持久化?如何存储消息,如何保证消息的顺序投递,如果出现重复消费该如何解决,欢迎留言分享你的想法,关于这些问题的讨论,也会在后面的课时中展开讲解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/230754.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows如何安装使用TortoiseSVN客户端并实现公网访问本地SVN Server

文章目录 前言1. TortoiseSVN 客户端下载安装2. 创建检出文件夹3. 创建与提交文件4. 公网访问测试 前言 TortoiseSVN是一个开源的版本控制系统,它与Apache Subversion(SVN)集成在一起,提供了一个用户友好的界面,方便用…

三防平板电脑定制参数_三防移动平板终端方案

这是一款搭载了低功耗高性能CPU的三防平板电脑。采用联发科MT6771处理器,内置4GB64GB内存和八核处理器,提供出色的性能和运行速度。同时,它运行着最新的安卓Android 11.0系统,全屏支持和屏幕内容显示的优化使其更加方便和简单易用…

【华大】HC32F420JATB-LQ48学习资料及开发环境

1. 产品特点 ⚫ 84MHz Cortex-M4 32位CPU平台 ⚫ 128K 字节 FLASH 存储器,具有擦写保护功能 ⚫ 24K 字节 RAM 存储器 ⚫ 6 通道 DMAC ⚫多达 52 个通用 I/O 管脚 ⚫ 时钟、晶振 ‒ 外部高速晶振 8MHz~32MHz ‒ 内部高速时钟 22MHz~24MHz ‒ 内部低速时钟 3…

GoWin FPGA, GPIO--- startup1

一个Bank只能用一个电压,假如同一个Bank,在引脚里设置不同的电压,编译不过。 解释说明 2. 错误引脚限制 以上编译设置会导致编译错误。 Floor planner说明

猫粮哪个牌子好又安全?安全的主食冻干猫粮牌子推荐

由于猫咪是肉食动物,对蛋白质的需求很高,如果摄入的蛋白质不足,就会影响猫咪的成长。而冻干猫粮本身因为制作工艺的原因,能保留原有的营养成分和营养元素,所以冻干猫粮蛋白含量比较高,营养又高,…

智能仓储革命:科聪料箱机器人助力高效物流转型

料箱机器人即料箱AGV是一种智能化物流搬运设备,它可以代替人力完成出库入库和搬运工作,可根据出入库生产出货需求,将货物从起点运送到终点,自动柔性完成货到人货到点的操作。 提升仓储和物流效率的自动化利器 料箱机器人的投用能…

使用ArcMap10.8修改tif影像的地理坐标系

最近有个tif数据转坐标系给我整岔了,用了定义投影的方法,坐标系是有了,可是范围区域数值没有改变,导致转出来的数据没法用,后面成功了,记一下方法便于今后查找。 如下是我在arcmap中打开的tif影像坐标系&a…

各级行政区划shp文件,34个省份可下载,来源可靠

基本信息. 数据名称: 行政区划 数据格式: Shp文件 数据时间: 2021年 数据几何类型: 面 数据坐标系: WGS84坐标系 数据来源:网络公开数据、国务院发布的行政区划调整批复公告 数据可视化. 全国行政区划 广东省行政区划 深圳市行政区划 城市清单. 可下载数…

Swift爬虫采集唯品会商品详情

我有个朋友之前在唯品会开的店,现在想转战其他平台,想要店铺信息商品信息全部迁移过去,如果想要人工手动操作就有点麻烦了,然后有天找到我 ,让我看看能不能通过技术手段实现商品信息迁移。嫌来无事,写了下面…

Linux 进程信号

文章目录 信号的概览信号的产生信号的处理信号集操作信号的捕捉补充与说明 信号的概览 信号由软件或硬件产生发送给进程,进程对其做相应处理。信号是进程之间事件异步通知的一种方式,属于软中断。 Linux下的全部信号由指令kill -l查询 Linux 下指令的…

H264码流打包分析

H264码流打包分析 SODB 数据比特串-->最原始的编码数据 RBSP 原始字节序列载荷-->在SODB的后面填加了结尾比特(RBSP trailing bits 一个bit“1”)若干比特“0”,以便字节对齐。…

Ubuntu 虚拟机环境,编译AOSP源码

环境 : VMware虚拟机 Ubuntu 20.04.3 LTS 搭建配置开发环境 sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl…

创投课程第五期 | 超越比特币:探索BTC生态的无限可能

协会邀请了来自水滴资本(Waterdrip Capital)的投资总监——Elaine,作为VC创投课程第5期的嘉宾,在北京时间12月17日(周日)晚上21:00 PM-22:00 PM,届时将与所有对Web3投资、创业心怀热忱的朋友们共同探讨《超越比特币&am…

C语言 文件I/O(备查)

所有案列 跳转到其他。 文件打开 FILE* fopen(const char *filename, const char *mode); 参数:filename:指定要打开的文件名,需要加上路径(相对、绝对路径)mode:指定文件的打开模式 返回值:成…

模型评估:压力测试 模拟对手 对齐 智能对抗 CAPTCHA(全自动区分计算机和人类的公共图灵测试)

对齐,智能对抗:魔高一尺,道高一丈。用更高的智能去对抗恶意使用。openAI一半的内容都在讲这个,但没有讲具体的方法。 如果认为对方是一个人就通过了图灵测试,真正的实现了智能。 如果智能达到了这种程度,智…

Tapdata 亮相 2023 谷歌出海创业加速器展示日活动,实时数据点亮企业创新之路

12 月 6 日,经过 2023 谷歌出海创业加速器对入营企业为期 3 个月的辅导及培训, 其毕业典礼及展示日活动在北京举行。 经历三个月的沉淀,来自不同行业,包含 Tapdata 在内的 10 家入营企业集中亮相,相互分享各自产品的创…

XUbuntu22.04之npm解决pm WARN deprecated(一百九十九)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

PostgreSQL常用命令

数据库版本 :9.6.6 注意 :PostgreSQL中的不同类型的权限有 SELECT,INSERT,UPDATE,DELETE,TRUNCATE,REFERENCES,TRIGGER,CREATE,CONNECT,TEMPORARY,EXECUTE 和 USAGE。 1. 登录PG数据库 以管理员身份 postgres 登陆,然后通过 #psql -U postgres #sudo -i -u postgres …

数据手套:手势识别技术的多元化应用

科技日新月异,虚拟现实不再局限于依赖头显来探索虚拟世界。数据手套的广泛应用使人们能够更轻松地与虚拟世界产生真实互动。在此之中,手势识别作为一种直观、自然的人机交互方式,受到了广泛关注。数据手套作为一种能够精确捕捉手指运动的人机…

Flink系列之:监控Checkpoint

Flink系列之:监控Checkpoint 一、概览二、概览(Overview)选项卡三、历史记录(History)选项卡四、历史记录数量配置五、摘要信息(Summary)选项卡六、配置信息(Configuration&#xff…