当前位置:首页 > 科技  > 软件

聊聊消息中间件MQ

来源: 责编: 时间:2023-10-24 09:00:15 237观看
导读一、概念图片 消息中间件MQ(Message Queue)是一种常用的异步通信技术,它通过将消息存储在队列中,实现生产者和消费者之间的解耦。MQ的主要作用是保证消息的可靠传输和幂等性。本质是队列,遵循FIFO先进先出原则。只不过队

一、概念

图片图片zYM28资讯网——每日最新资讯28at.com

   消息中间件MQ(Message Queue)是一种常用的异步通信技术,它通过将消息存储在队列中,实现生产者和消费者之间的解耦。MQ的主要作用是保证消息的可靠传输和幂等性。本质是队列,遵循FIFO先进先出原则。只不过队列中存放的内容是message而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了MQ之后,消息发送上游只需要依赖MQ,不用依赖其他服务。zYM28资讯网——每日最新资讯28at.com

    主要是利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。zYM28资讯网——每日最新资讯28at.com

图片图片zYM28资讯网——每日最新资讯28at.com

二、常见的消息队列

     当前业界比较流行的开源消息中间件包括:ActiveMQ、RabbitMQ、RocketMQ、Kafka、 ZeroMQ等,其中应用最为广泛的要数RabbitMQ、RocketMQ、Kafka这三款。zYM28资讯网——每日最新资讯28at.com

图片zYM28资讯网——每日最新资讯28at.com

三、优缺点对比

3.1、RabbitMQ

    RabbitMQ是一套开源(MPL)的消息队列服务软件,是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的开源实现,由以高性能、健壮以及可伸缩性出名的 Erlang 写成。zYM28资讯网——每日最新资讯28at.com

图片zYM28资讯网——每日最新资讯28at.com

优点:zYM28资讯网——每日最新资讯28at.com

erlang语言开发,性能极其好,延时很低;zYM28资讯网——每日最新资讯28at.com

吞吐量到万级,MQ功能比较完备;zYM28资讯网——每日最新资讯28at.com

健壮、稳定、易用、跨平台、支持多种语言、文档齐全;zYM28资讯网——每日最新资讯28at.com

有消息确认机制和持久化机制,可靠性高;zYM28资讯网——每日最新资讯28at.com

高度可定制的路由;zYM28资讯网——每日最新资讯28at.com

管理界面较丰富,在互联网公司也有较大规模的应用;zYM28资讯网——每日最新资讯28at.com

社区活跃度高,几乎每个月都发布几个版本。zYM28资讯网——每日最新资讯28at.com

缺点:zYM28资讯网——每日最新资讯28at.com

实现了代理架构,意味着消息在发送到客户端之前可以在中央节点上排队。此特性使得RabbitMQ易于使用和部署,但是使得其运行速度较慢,因为中央节点增加了延迟,消息封装后也比较大。zYM28资讯网——每日最新资讯28at.com

erlang语言开发,很难看懂源码,无法进行源码级别的研究和定制,不利于二次维护和开发。zYM28资讯网——每日最新资讯28at.com

rabbitmq集群动态扩展比较麻烦。zYM28资讯网——每日最新资讯28at.com

3.2、RocketMQ

    RocketMQ 出自 阿里公司的开源产品,用 Java 语言实现,在设计时参考了 Kafka,并做出了自己的一些改进,消息可靠性上比 Kafka 更好。RocketMQ在阿里集团被广泛应用在订单,交易,充值,流计算,消息推送,日志流式处理,binglog分发等场景。zYM28资讯网——每日最新资讯28at.com

优点:zYM28资讯网——每日最新资讯28at.com

  • 单机支持 1 万以上持久化队列;
  • RocketMQ 的所有消息都是持久化的,先写入系统 PAGECACHE,然后刷盘,可以保证内存与磁盘都有一份数据,访问时,直接从内存读取;
  • 模型简单,接口易用(JMS 的接口很多场合并不太实用);
  • 性能非常好,可以大量堆积消息在broker中;
  • 支持多种消费,包括集群消费、广播消费等;
  • 各个环节分布式扩展设计,主从HA;
  • 开发度较活跃,版本更新很快。

缺点:zYM28资讯网——每日最新资讯28at.com

  • 支持的客户端语言不多,目前是java及c++,其中c++不成熟;
  • RocketMQ社区关注度及成熟度也不及前两者;
  • 没有web管理界面,提供了一个CLI(命令行界面)管理工具带来查询、管理和诊断各种问题;
  • 没有在 mq 核心中去实现JMS等接口。

zYM28资讯网——每日最新资讯28at.com

3.3、Kafka

    Apache Kafka是一个分布式消息发布订阅系统。它最初由LinkedIn公司基于独特的设计实现为一个分布式的提交日志系统( a distributed commit log),,之后成为Apache项目的一部分。Kafka系统快速、可扩展并且可持久化。它的分区特性,可复制和可容错都是其不错的特性。zYM28资讯网——每日最新资讯28at.com

图片图片zYM28资讯网——每日最新资讯28at.com

zYM28资讯网——每日最新资讯28at.com

优点:zYM28资讯网——每日最新资讯28at.com

客户端语言丰富,支持java、、php、ruby、python、go等多种语言;zYM28资讯网——每日最新资讯28at.com

性能卓越,单机写入TPS约在百万条/秒,消息大小10个字节;zYM28资讯网——每日最新资讯28at.com

提供完全分布式架构, 并有replica机制, 拥有较高的可用性和可靠性, 理论上支持消息无限堆积;zYM28资讯网——每日最新资讯28at.com

支持批量操作;zYM28资讯网——每日最新资讯28at.com

消费者采用Pull方式获取消息, 消息有序, 通过控制能够保证所有消息被消费且仅被消费一次;zYM28资讯网——每日最新资讯28at.com

有优秀的第三方Kafka Web管理界面Kafka-Manager;zYM28资讯网——每日最新资讯28at.com

在日志领域比较成熟,被多家公司和多个开源项目使用。zYM28资讯网——每日最新资讯28at.com

缺点:zYM28资讯网——每日最新资讯28at.com

Kafka单机超过64个队列/分区,Load会发生明显的飙高现象,队列越多,load越高,发送消息响应时间变长;zYM28资讯网——每日最新资讯28at.com

使用短轮询方式,实时性取决于轮询间隔时间;zYM28资讯网——每日最新资讯28at.com

消费失败不支持重试;zYM28资讯网——每日最新资讯28at.com

支持消息顺序,但是一台代理宕机后,就会产生消息乱序;zYM28资讯网——每日最新资讯28at.com

社区更新较慢。zYM28资讯网——每日最新资讯28at.com

四、主要应用场景

4.1、流量削峰

图片图片zYM28资讯网——每日最新资讯28at.com

    常用于高并发场景,进行削峰。例如:现在有一个订单系统,高峰期订单量过多,而系统最多只能处理1w次/s。此时可以通过消息队列使得这些超出处理能力的下单请求处于队列中进行等待,而不至于将所有的请求全部一次性打到订单系统中,造成订单系统宕机。这就相当于将实际一秒钟内的订单拆分成多个段来进行处理,这样的处理方式虽然加长了等待时间,但是有缺点总比不能用好。这样可以缓解业务量对系统带来的冲击,避免系统宕机而造成不能使用。zYM28资讯网——每日最新资讯28at.com

     Redis缓存预热。缓存预热实际上是将热点数据提前缓存到Redis中进行储存,避免高峰期数据请求直接下达到数据库造成数据库崩溃。同样流量消峰,也是达到此效果,只不过一个针对的是数据库方面,一个针对的是服务层的请求。zYM28资讯网——每日最新资讯28at.com

参考案例:springBoot对接kafka,批量、并发、异步获取消息,并动态、批量插入库表zYM28资讯网——每日最新资讯28at.com

4.2、应用解耦

图片图片zYM28资讯网——每日最新资讯28at.com

    若订单系统耦合调用支付系统、库存系统或者物流系统,一旦这三个系统发生故障,订单系统就会处于不可用的状态。如果转变为用消息队列处理调用请求,可以减少很多问题。当故障发生时,子系统要处理的内存会被缓存在消息队列中,而用户的下单操作还是可以正常完成;故障处理完之后,再处理用户的订单信息即可。整个过程中的故障对于用户来说是无感的,可以提高系统的可用性。zYM28资讯网——每日最新资讯28at.com

4.3、异步处理

图片图片zYM28资讯网——每日最新资讯28at.com

    当A需要调用B,B需要花很长时间来处理调用,A需要得知B何时处理完毕。可以实现的方式很多,但是很不方便。使用消息队列可以很轻松实现。只需要监听B处理完成的消息即可,当B处理完毕,将处理完毕的信息发送给消息队列,之后消息队列将消息反馈给A即可。这样的方式,A既不用循环调用B的查询API,也不需要B提供callback API(回调API),同时B也不用完成这些操作;A还能及时得到B服务处理完成的信息。zYM28资讯网——每日最新资讯28at.com

参考案例:springBoot对接kafka,批量、并发、异步获取消息,并动态、批量插入库表zYM28资讯网——每日最新资讯28at.com

五、选哪一种中间件?

图片图片zYM28资讯网——每日最新资讯28at.com

个人建议:对于大部分公司,可以优选选择使用RabbitMQ,其次选择Kafka,相比Kafka,RabbitMQ适合对数据一致性、稳定性和可靠性要求很高的场景,有消息确认机制和持久化机制,可靠性非常高。zYM28资讯网——每日最新资讯28at.com

六、详细对比参数

图片 图片 zYM28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-14727-0.html聊聊消息中间件MQ

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 让图片完美适应:掌握 CSS 的object-fit与object-position

下一篇: 如何从单体架构迁移到微服务架构:挑战和最佳实践

标签:
  • 热门焦点
  • 服务存储设计模式:Cache-Aside模式

    服务存储设计模式:Cache-Aside模式

    Cache-Aside模式一种常用的缓存方式,通常是把数据从主存储加载到KV缓存中,加速后续的访问。在存在重复度的场景,Cache-Aside可以提升服务性能,降低底层存储的压力,缺点是缓存和底
  • SpringBoot中使用Cache提升接口性能详解

    SpringBoot中使用Cache提升接口性能详解

    环境:springboot2.3.12.RELEASE + JSR107 + Ehcache + JPASpring 框架从 3.1 开始,对 Spring 应用程序提供了透明式添加缓存的支持。和事务支持一样,抽象缓存允许一致地使用各
  • 不容错过的MSBuild技巧,必备用法详解和实践指南

    不容错过的MSBuild技巧,必备用法详解和实践指南

    一、MSBuild简介MSBuild是一种基于XML的构建引擎,用于在.NET Framework和.NET Core应用程序中自动化构建过程。它是Visual Studio的构建引擎,可在命令行或其他构建工具中使用
  • 学习JavaScript的10个理由...

    学习JavaScript的10个理由...

    作者 | Simplilearn编译 | 王瑞平当你决心学习一门语言的时候,很难选择到底应该学习哪一门,常用的语言有Python、Java、JavaScript、C/CPP、PHP、Swift、C#、Ruby、Objective-
  • .NET 程序的 GDI 句柄泄露的再反思

    .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 讲故事上个月我写过一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,当时用的是 GDIView + WinDbg 把问题搞定,前者用来定位泄露资源,后者用来定位泄露代码,后面有朋友反
  • 阿里瓴羊One推出背后,零售企业迎数字化新解

    阿里瓴羊One推出背后,零售企业迎数字化新解

    作者:刘旷近年来随着数字经济的高速发展,各式各样的SaaS应用服务更是层出不穷,但本质上SaaS大多局限于单一业务流层面,对用户核心关切的增长问题等则没有提供更好的解法。在Saa
  • 重估百度丨大模型,能撑起百度的“今天”吗?

    重估百度丨大模型,能撑起百度的“今天”吗?

    自象限原创 作者|程心 罗辑2023年之前,对于自己的“今天”,百度也很迷茫。“新业务到 2022 年底还是 0,希望 2023 年出来一个 1。”这是2022年底,李彦宏
  • 2纳米决战2025

    2纳米决战2025

    集微网报道 从三强争霸到四雄逐鹿,2nm的厮杀声已然隐约传来。无论是老牌劲旅台积电、三星,还是誓言重回先进制程领先地位的英特尔,甚至初成立不久的新
  • 三星获批量产iPhone 15全系屏幕:苹果史上最惊艳直屏

    三星获批量产iPhone 15全系屏幕:苹果史上最惊艳直屏

    按照惯例,苹果将继续在今年9月举办一年一度的秋季新品发布会,有传言称发布会将于9月12日举行,届时全新的iPhone 15系列将正式与大家见面,不出意外的话
Top