MQ 消息队列 比较
为什么需要消息队列
削峰
业务系统在超高并发场景中,由于后端服务来不及同步处理过多、过快的请求,可能导致请求堵塞,严重时可能由于高负荷拖垮Web服务器。
为了能支持最高峰流量,我们通常采取短平快的方式——直接扩容服务器,增加服务端的吞吐量。
优点是显而易见的,短时间内吞吐量增加了好几倍,甚至数十倍。缺点也明显,流量低峰期服务器相对较闲。
消息队列(比如 Apache RocketMQ,Apache Kafka),也是目前业界比较常用的手段
解耦
不同的业务端在联合开发功能时,常常由于排期不同、人员调配不方便等原因导致项目延期。其实,其根本原因是业务耦合过度。
上下游系统之间的通信是彼此依赖的,所以不得不协调上下游所有的资源同步进行,跨团队处理问题显然比在团队内部处理问题难度大。
你是否依稀记得另一个团队的同事调用你的API,你告诉他发个请求过来,你打断点一步一步调试代码的场景?
你是否记得为了协调开发资源、QA 资源,以及协调上线时间等所做的一切,你被老板骂了多少次,最后还是延期了:我们依赖他们,他们的QA说,高峰期不让发布。
加入消息队列后,不同的业务端又会是何种情况呢?上下游系统进行开发、联调、上线,彼此完全不依赖,也就是说,系统间解耦了

异步
处理订票请求是一个漫长的过程,需要检查预订的车次是否有预订数量的票、下单扣库存、更新缓存等一系列操作。这些耗时的操作,我们可以通过使用消息队列的方式,把提交请求成功的消息告诉用户
数据一致性
消息系统的优点:
(1)免去了多次重试(发起请求)的复杂逻辑。
(2)免去了处理过多重试请求的压力。
(3)即使服务不可用,业务也不受影响。
常见消息队列
| 消息队列名字 | Apache ActiveMQ | Apache Kafka | Apache RocketMQ |
|---|---|---|---|
| 产生时间 | 2007 | 2012 | 2017 |
| 贡献公司 | Apache | 阿里巴巴 | |
| 当时流行MQ | JMS | ActiveMO | Kafka,ActiveMO |
| 特性 | (1)支持协议众多:AMOP,STOMP,MOTT,JMS (2)消息是持久化的JDBC |
(1)超高写入速率 (2)end-to-end 耗时毫秒级 |
(1)万亿级消息支持 (2)万级Topic数量支持 (3)end-to-end耗时毫秒级 |
| 管理后台 | 自带 | 独立部署 | 独立部署 |
| 多语言客户端 | 支持 | 支持 | Java、C++、Python、Go、C# |
| 数据流支持 | 不支持 | 支持 | 支持 |
| 消息丢失 | 理论上不会丢失 | 理论上不会丢失 | 理论上不会丢失 |
| 文档完备性 | 好 | 极好 | 极好 |
| 商业公司实践 | 国内部分企业 | 阿里巴巴 | |
| 容错 | 无重试机制 | 无重试机制 | 支持重试,死信消息 |
| 顺序消息 | 支持 | 支持 | 支持 |
| 定时消息 | 不支持 | 不支持 | 支持 |
| 事务消息 | 不支持 | 支持 | 支持 |
| 消息轨迹 | 不支持 | 不支持 | 支持 |
| 消息查询 | 数据库中查询 | 不支持 | 支持 |
| 重放消息 | 不清楚 | 暂停重放 | 实时重放 |
| 宕机 | 自动切换 | 自动选主 | 手动重启 |
MQ 消息队列 比较的更多相关文章
- 阿里云ACE共创空间——MQ消息队列产品测试
一.产品背景消息队列是阿里巴巴集团自主研发的专业消息中间件. 产品基于高可用分布式集群技术,提供消息订阅和发布.消息轨迹查询.定时(延时)消息.资源统计.监控报警等一系列消息云服务,是企业级互联网架构 ...
- IM开发基础知识补课(五):通俗易懂,正确理解并用好MQ消息队列
1.引言 消息是互联网信息的一种表现形式,是人利用计算机进行信息传递的有效载体,比如即时通讯网坛友最熟悉的即时通讯消息就是其具体的表现形式之一. 消息从发送者到接收者的典型传递方式有两种: 1)一种我 ...
- Java语言快速实现简单MQ消息队列服务
目录 MQ基础回顾 主要角色 自定义协议 流程顺序 项目构建流程 具体使用流程 代码演示 消息处理中心 Broker 消息处理中心服务 BrokerServer 客户端 MqClient 测试MQ 小 ...
- 多维度对比5款主流分布式MQ消息队列,妈妈再也不担心我的技术选型了
1.引言 对于即时通讯网来说,所有的技术文章和资料都在围绕即时通讯这个技术方向进行整理和分享,这一次也不例外.对于即时通讯系统(包括IM.消息推送系统等)来说,MQ消息中件间是非常常见的基础软件,但市 ...
- 使用Rabbit MQ消息队列
使用Rabbit MQ消息队列 综合概述 消息队列 消息队列就是一个消息的链表,可以把消息看作一个记录,具有特定的格式以及特定的优先级.对消息队列有写权限的进程可以向消息队列中按照一定的规则添加新消息 ...
- 手把手教你用redis实现一个简单的mq消息队列(java)
众所周知,消息队列是应用系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构.目前使用较多的消息队列有 ActiveMQ,RabbitMQ,Zero ...
- 初识MQ消息队列
MQ 消息队列 消息队列(Message Queue)简称MQ,是阿里巴巴集团中间件技术部自主研发的专业消息中间件. 产品基于高可用分布式集群技术,提供消息发布订阅.消息轨迹查询.定时(延时)消息.资 ...
- 几种MQ消息队列对比与消息队列之间的通信问题
消息队列 开发语言 协议支持 设计模式 持久化支持 事务支持 负载均衡支持 功能特点 缺点 RabbitMQ Erlang AMQP,XMPP,SMTP,STOMP 代理(Broker)模式(消息在发 ...
- MQ(消息队列)常见的应用场景解析
前言 提高系统性能首先考虑的是数据库的优化,之前一篇文章<数据库的使用你可能忽略了这些>中有提到过开发中,针对数据库需要注意的事项.但是数据库因为历史原因,横向扩展是一件非常复杂的工程,所 ...
- 高并发架构系列:MQ消息队列的12点核心原理总结
消息队列已经逐渐成为分布式应用场景.内部通信.以及秒杀等高并发业务场景的核心手段,它具有低耦合.可靠投递.广播.流量控制.最终一致性 等一系列功能. 无论是 RabbitMQ.RocketMQ.Act ...
随机推荐
- js/jq 点击按钮显示div,点击页面其他任何地方隐藏div
1.HTML页面 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" ...
- 如何正确遵守 Python 代码规范
前言 无规矩不成方圆,代码亦是如此,本篇文章将会介绍一些自己做项目时遵守的较为常用的 Python 代码规范. 命名 大小写 模块名写法: module_name 包名写法: package_name ...
- 2022春每日一题:Day 26
题目:无聊的数列 区间增加等差序列,似乎不好维护,等差等差,那就差分呗,单点查询,更加肯定,直接差分,每次加了一个等差序列容易发现只需要对应的差分数组a[l]+=k,a[l+1]...a[r]+=d, ...
- 视觉享受,兼顾人文观感和几何特征的字体「GitHub 热点速览 v.22.46」
GitHub 上开源的字体不在少数,但是支持汉字以及其他非英文语言的字体少之又少,记得上一个字体还是 霞鹜文楷,本周 B 站知名设计 UP 主开源了的得意黑体在人文观感和几何特征之间找到了美的平衡. ...
- VS2019 iis无法在Web服务器上启动调试。打开的URL的IIS辅助进程当前没有运行
可以检查W3SVC服务与WAS这两个服务是否正在运行. 重启这两个服务就可以正常了
- gulp4.0构建任务
执行default任务时,依次执行以下任务 gulp.task('default', ['htmlmin', 'cssmin', 'jsmin', 'copy']); 报错:Task function ...
- 图解B树及C#实现(1)
目录 前言 索引原理 局部性(Locality) 数据的局部性 内存存储和磁盘存储 磁盘存储适合的索引结构 B树简介 定义 B树中数据的有序性 用C#定义数据结构 插入数据的过程 分裂:新节点诞生的唯 ...
- TCP\UDP协议 socket模块
目录 传输层主要协议 TCP协议 三次握手 TCP协议反馈机制 四次挥手 洪水攻击 UDP协议 socket模块 socket代码简介 socket.socket() server.bind() se ...
- 【Azure 云服务】为Azure云服务配置上自签名的SSL证书步骤
问题描述 在使用Azure Cloud Service(云服务),默认的情况下都是使用的 HTTP 服务,通过 Visual Studio 2022 创建的默认 Cloud Service项目中,在S ...
- Python实验报告(第10章)
实验10:文件及目录操作 一.实验目的和要求 1.掌握基本文件操作(创建.打开.关闭.写入): 2.掌握目录操作的基本操作(创建.删除.遍历): 3.了解高级文件操作(删除文件.获取文件基本信息). ...