消息队列面试题:为什么要使用消息队列?

消息队列面试题:为什么要使用消息队列?

开源项目:浪海博客 需要星星 谢谢 ~

gitee地址:https://gitee.com/langhai666/langhai-blog

github地址:https://github.com/Allenkuzma/langhaiblogs

为什么要使用消息队列?

首先需要了解 MQ 消息队列的三个最重要的优点或者说特征:解耦、异步、削峰。

这里由购物场景来说明:用户下单,必然会生成订单,生成物流信息,以及减少库存。

解耦:

在没有引入消息队列之前,下单系统会和库存系统以及物流系统等其他系统存在严重的耦合关系。

在引入消息队列之后,各个系统只需要从自己感兴趣的队列当中消费消息,也就是一个发布订阅模型,在代码层面各个系统的耦合性大大降低了。

异步:

在没有引入消息队列之前,下单系统需要同步调用各个其他系统来进行减少库存和生成物流信息等操作。这些操作的时间加起来,有可能超过1秒,可能会给用户的体验带来影响。

在引入消息队列之后,下单系统只需要将消息发送到消息队列中即可,这样大大节省了用户等待的时间,提升了用户的体验感。

削峰:

餐饮系统当中,中饭和晚饭的时候是一个高峰期,在某一个时间段会有大量的请求发过来,这样有可能导致把mysql打死,从而导致系统崩溃。

在引入消息队列之后,可以将大量的请求先存储在消息队列当中,按照自己系统的消费能力慢慢消费,最终起到一个流量平缓的效果。

在引入消息队列之后,带来了哪一些弊端?

系统可用性降低

系统引入了外部的组件越多,遇到的问题就会越多。如果消息队列挂了怎么办呢?这个时候将要考虑消息队列的高可用模型。

系统的复杂度提高

引入消息队列之后,需要考虑消息的丢失问题,以及消息有可能被重复消费的问题。还有一致性问题(有的系统成功消费,有的系统消费失败,造成数据不一致的情况。)等等。

如何从activeMQ、RabbitMQ、RocketMQ、Kafka中选择合适的消息队列?

activeMQ的起源比较早,现在社区的活跃度比较低,使用的人也比较少,一般不推荐使用。

rabbitMQ采用的erlang语言开发,如果要进行二次定制开发的话,就必须掌握erlang语言。rabbitMQ的时效性最低,可以到达微秒级别。

rocketMQ是阿里巴巴出品,经历过大规模吞吐量场景的验证(双十一购物),国内有许多公司在使用。

kafka在大数据方面应用的非常多,比如说用来进行日志采集和实时计算等场景。

本文章由 浪海博客 2024-01-12 编写发布。

相关推荐
j7~2 天前
【C++标准项目】C++基于protobuf的发布订阅式消息队列(篇一):项目概述+环境搭建
分布式·消息队列·rabbitmq·gtest·protobuf·muduo·sqlites
醉颜凉4 天前
Kafka 与 RabbitMQ/RocketMQ 选型对比:场景匹配、性能基准与迁移成本
kafka·消息队列·rabbitmq·rocketmq·中间件选型
ShineWinsu6 天前
对于Redis:Redis的认识以及分布式系统的解析
linux·数据库·c++·redis·缓存·消息队列·分布式架构
智码看视界6 天前
技术选型指南:Pulsar vs Kafka:消息队列选型终极对比与压测
kafka·消息队列·pulsar·消息中间件·流处理·高吞吐·架构选型
吉甫作诵14 天前
Kafka 集群安装与运维实战:消费组排查、Offset 重置与副本重分配
大数据·运维·分布式·kafka·消息队列
happy_king_zi15 天前
kafka两种部署模式的区别
kafka·消息队列·sre
happy_king_zi15 天前
Kafka 3.9.2 KRaft 模式三节点集群完整部署指南
kafka·消息队列
szephyr16 天前
消息队列入门:RabbitMQ 和 Kafka 到底怎么选,什么时候不该用
后端·架构·kafka·消息队列·rabbitmq
hey you~17 天前
云客服会话数据实时同步,数据库架构怎么设计?
消息队列·数据库架构·高可用·实时同步·最终一致性·云客服·会话数据
用户5313973181718 天前
[Kafka源码揭秘] 消息写入全链路:网络IO与请求入队
kafka·消息队列