0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

消息队列的发展历史

小林coding 来源:ByteByteGo 2023-10-30 10:49 次阅读

上一篇我们用一个秒杀案例探讨了我们为什么需要消息队列。今天我们来回顾一下消息队列的发展历史。

下图列出了过去 30 年中消息队列的发展简史。

我们来依次介绍一下这些产品

IBM MQ

IBM MQ 于 1993 年推出。它最初称为 MQSeries,2002 年更名为 WebSphere MQ。2014 年更名为 IBM MQ。IBM MQ 是一款非常成功的产品,广泛应用于金融领域。到 2020 年,其收入仍将达到 10 亿美元。下图显示了 IBM MQ 的关键架构。

队列管理器(Queue Manager)是消息队列的逻辑容器。它通过消息通道(channel)向其他队列管理器传输数据。传输的数据抽象为“消息”这个概念。队列用来存储消息。消息头包含路由信息、存储方式和传递目标信息。

2910453c-74bd-11ee-939d-92fbcf53809c.png

还有其他一些非开源消息队列,如 MSMQ(1997 年)和 SQS(2004 年),它们都在各自的生态系统中发挥了很好的作用。

RabbitMQ

2003 年,多家金融机构希望开发一种标准化的消息传递协议,于是 AMQP(Advanced Message Queuing Protocol)在摩根大通诞生了。与在 API 层面标准化的 JMS(Java Messaging Service)不同,AMQP 是一种 wire level 的协议,这意味着它规定了要传输的数据格式。作为 AMQP 的一种实现,RabbitMQ 由 Rabbit Technologies 于 2007 年开发,后被 VMWare 收购。

下图是 RabbitMQ 的架构。我们可以看到,它与 IBM MQ 不同,更类似于 Kafka 的架构概念。生产者向交换中心发布消息。它可以是直接交换、基于主题交换或扇出。然后,交换中心根据不同的消息属性和交换类型将消息路由到队列中。消费者据此接收信息。

29179990-74bd-11ee-939d-92fbcf53809c.png

虽然 RabbitMQ 拥有很多现代消息队列概念,但它是近 20 年前开发的。当时的分布式系统还不像现在这样成熟,因此该架构在处理大流量和大量并发请求的场景时受到了限制。

Kafka

2011 年初,LinkedIn 开源了分布式事件流平台 Kafka。它以作家 Franz Kafka 的名字命名。顾名思义,Kafka 是为写而优化的。它为处理实时数据流提供了一个高吞吐量、低时延的平台。它提供了一个统一的事件日志(event log)来实现事件流,在互联网公司中得到广泛应用。下图是简化的 Kafka 架构。

总的来说,Kafka 定义了生产者、消息代理、订阅主题、分区和消费者。Kafka 的简单性和容错性使其能够取代以前的产品,如基于 AMQP 的消息队列。

292ef7ac-74bd-11ee-939d-92fbcf53809c.png

Pulsar

Pulsar 最初由雅虎开发,是一个一体化的消息平台和流平台。与 Kafka 相比,Pulsar 融合了其他产品的许多实用功能,支持的功能范围更广。此外,Pulsar 的架构更具云原生性,可为集群扩展和分区迁移等提供更好的支持。下图显示了 Pulsar 架构的简化版本。

与 Kafka 类似,Pulsar 也有订阅主题的概念,其 URI 看起来是这样的

{type}://{tenant}/{namespace}/{topic}

值得注意的是,URI 中有一个租户元素,这意味着 Pulsar 支持多租户环境。

Pulsar 还支持持久化或非持久化的订阅主题。持久化主题在磁盘上持久存在,而非持久化主题则驻留在内存中,一旦发生故障可能会丢失。

Pulsar 架构分为两层:服务层和持久层。服务层由多个消息代理组成,负责处理传入和传出的信息。服务层是无状态的,它利用 Apache BookKeeper 来存储信息。

另一个有趣的设计是,Pulsar 原生支持分层存储,我们可以用 AWS S3 等更便宜的对象存储来长期持久地保存消息。

2944bf4c-74bd-11ee-939d-92fbcf53809c.png

总结一下,消息队列的发展从一开始的消息传递中间件演进为流处理。现代消息队列通常将这两种功能结合在一起,并支持分布式环境中的容错。我们用下图来结束今天的日拱一卒:每种流行产品的诞生都改变了消息队列的编程范式,并解决了业务痛点。

294c4b86-74bd-11ee-939d-92fbcf53809c.png

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • IBM
    IBM
    +关注

    关注

    3

    文章

    1755

    浏览量

    74679
  • 管理器
    +关注

    关注

    0

    文章

    246

    浏览量

    18502
  • 开源
    +关注

    关注

    3

    文章

    3309

    浏览量

    42471
  • 消息队列
    +关注

    关注

    0

    文章

    33

    浏览量

    2972

原文标题:面试官:消息队列是怎么演进的?

文章出处:【微信号:小林coding,微信公众号:小林coding】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    RTOS发展历史

    RTOS发展历史  从1981年Ready System发展了世界上第1个商业嵌入式实时内核(VRTX32),到今天已经有近20年的历史。20世纪80年代的产品还只支持一些16位的微处
    发表于 08-15 11:32

    操作系统发展历史

    操作系统发展历史  下面我们结合计算机的发展历史来回顾一下操作系统的发展历程。  1.第一代计算机(1945-1955):真空管和插件板  
    发表于 09-13 10:10

    FPGA技术的发展历史和动向

    本文关键字:fpga技术,fpga发展, fpga培训,FPGA应用开发入门与典型实例 一、FPGA技术的发展历史 纵观数字集成电路的发展历史
    发表于 08-08 10:24

    Protel的发展历史及Protel99特性

    Protel的发展历史及Protel99特性
    发表于 04-23 22:38

    嵌入式系统的发展历史

    摘要:嵌入式系统诞生于微型机时代,经历了漫长的独立发展的单片机道路。给嵌入式系统寻求科学的定义,必须了解嵌入式系统的发展历史,按照历史性、本质性、普遍通用性来定义嵌入式系统,并把定义与
    发表于 06-18 06:53

    谈谈压敏电阻的发展历史

    谈谈压敏电阻的发展历史压敏电阻是大家都会经常用的一款电阻器,那么对于压敏电阻发展历史你们有所了解吗?为此小编跟大家科普一下这方面的知识。一起进入本文的主题吧!1929~1930年,美国
    发表于 12-27 14:56

    EL显示器的发展历史概览

    EL显示器的发展历史概览
    发表于 06-03 06:13

    单片机的发展历史

    单片机 微机 微型计算机 计算机的发展历史 单片机的发展历史
    发表于 07-13 08:49

    关于嵌入式系统的定义与发展历史

    嵌入式系统的定义与发展历史嵌入式系统诞生于微型机时代,经历了漫长的独立发展的单片机道路。下面是小编整理的关于嵌入式系统的定义与发展历史,希望
    发表于 10-27 06:50

    单片机的发展历史是怎样的

    1.1 单片机的发展历史:单片机: 将微处理器、半导体存储器、I/O接口和中断系统集成在—块硅片上的具有完整功能的微型计算机。1974 年12 月, 美国仙童公司推出了世界上第一台8位单片机F8
    发表于 11-30 07:46

    嵌入式系统的发展历史

    目录1.1概述1.1.1 嵌入式系统的定义1.1.2嵌入式系统的发展历史1.1.3嵌入式系统的发展的新变化1.2嵌入式系统的组成1.3ARM处理器1.3.1ARM处理器介绍1.3.2ARM体系结构
    发表于 12-22 06:39

    白光LED发展历史

    白光LED发展历史
    发表于 05-09 09:52 3643次阅读

    什么是消息队列?消息队列中间件重要吗?

    应用解耦:消息队列减少了服务之间的耦合性,不同的服务可以通过消息队列进行通信,而不用关心彼此的实现细节。
    的头像 发表于 11-07 14:55 1411次阅读

    RTOS消息队列的应用

    基于RTOS的应用中,通常使用队列机制实现任务间的数据交互,一个应用程序可以有任意数量的消息队列,每个消息队列都有自己的用途。
    发表于 05-29 10:49 629次阅读
    RTOS消息<b class='flag-5'>队列</b>的应用

    FreeRTOS消息队列介绍

    队列是为了任务与任务、任务与中断之间的通信而准备的,可以在任务与任务、任务与中断之间传递消息,队列中可以存储有限的、大小固定的数据项目。任务与任务、任务与中断之间要交流的数据保存在队列中,叫做
    的头像 发表于 07-06 16:58 803次阅读
    FreeRTOS消息<b class='flag-5'>队列</b>介绍