大话消息队列的流派之争

  • 时间:
  • 浏览:1
  • 来源:5分排列3APP下载_5分排列3APP官方

轻Topic流

顿悟啥日后?Actor模型,ZeroMQ人太好本来我一一好有几个 跨语言的、重量级的Actor模型邮箱库。想要把本人的多多程序 想象成一一好有几个 actor,ZeroMQ本来我提供邮箱功能的库;ZeroMQ还还可否 实现同一台机器的IPC通讯才还还可否 实现不同机器的TCP、UDP通讯。由于你需要一一好有几个 强大的、灵活、野蛮的通讯能力,别犹豫ZeroMQ

这篇文章的标题这么起,网上一翻全是各种MQ的性能比较,很容易想要以为我也是还还可否 才能 “粗俗”的人。我这篇文章想要表达的是——它们根本全是一一好有几个 东西,有毛的性能好比较?

kafka,ZeroMQ,RabbitMQ代表了并全是完整篇 不同风格的MQ架构;关注点完整篇 不同:

注意到啥日后?你是什么 模式下解耦了key和queue,在你是什么 架构中queue是非常轻量级的(在RabbitMQ中它的上限取决于你的内存),消费者关心的本来我本人的queue;生产者太满关心数据最终给谁假如有一天指定key就行了,上方的那层映射在AMQP中叫exchange(交换机)。AMQP含有并全是种exchange——Direct exchange:key就等于queue;Fanout exchange:无视key,给所有的queue都来一份;Topic exchange:key还还可否 用“宽字符”模糊匹配queue;最后一一好有几个 厉害了Headers exchange:无视key,通过查看消息的头部元数据来决定发给那个queue(AMQP头部元数据非常富足有日后 还还可否 自定义)。

Message Queue(MQ),消息队列上方件。本来我人都说:MQ通过将消息的发送和接收分离来实现应用多多程序 的异步和解偶,你是什么 给人的直觉是——MQ是异步的,用来解耦的,有日后 你是什么 本来我MQ的效果而全是目的。

重Topic流

此门派是AMQP的“叛徒”,某位道友嫌弃AMQP太“重”(那是他没想看 用Erlang实现的本来是多么的行云流水) 本来我设计了ZeroMQ。这位道友非常睿智,他非常敏锐的意识到——MQ是更高级的Socket,它是补救通讯疑问的。本来我ZeroMQ被设计成了一一好有几个 “库”而全是一一好有几个 上方件,你是什么 实现才还还可否 达到——还还可否 才能 broker的目的。

kafka在乎的是性能,时延

有broker

你是什么 形态学 的架构给通讯带来了很大的灵活性,当我门我门我门 能想到的通讯最好的方法 都还还可否 用这并全是exchange表达出来。由于你需要一一好有几个 企业数据总线(在乎灵活性)还还可否 才能 RabbitMQ绝对的值得一用。

节点之间通讯的消息全是发送到彼此的队列中,每个节点都既是生产者又是消费者。ZeroMQ做的事情本来我封装出一套累似 于scoket的API还还可否 完成发送数据,读取数据。由于你仔细想一下人太好ZeroMQ是原先的:

kafka、JMS就属于你是什么 流派,生产者会发送key和数据到Broker,由Broker比较key本来决定给哪个消费者。这是当我门我门我门 最常见的模式,是当我门我门我门 对MQ最多的印象。在你是什么 模式下一一好有几个 topic往往是一一好有几个 比较大的概念,甚至一一好有几个 系统中就由于只一一好有几个 topic,topic并全是意义上本来我queue,生产者发送key大概 说:“hi,把数据贴到 key的队列中”。

你是什么 流派通常有一台服务器作为Broker,所有的消息都通过它中转。生产者把消息发送给它就日后刚开始本人的任务了,Broker则把消息主动推送给消费者(由于消费者主动轮询)。

TCP就更加原始了,粘包、心跳、私有的协议,想一想头皮就发麻。MQ所要做的本来我在哪此协议之上构建一一好有几个 简单的“协议”——生产者/消费者模型。MQ带给我的“协议”全是具体的通讯协议,本来我更高层次通讯模型。它定义了一一好有几个 对象——发送数据的叫生产者;消费数据的叫消费者, 提供一一好有几个 SDK当我门我门我门 歌词 还还可否 定义本人的生产者和消费者实现消息通讯而无视底层通讯协议。

RabbitMQ追求的是灵活

你是什么 的代表是RabbitMQ(由于说是AMQP)。生产者发送key和数据,消费者定义订阅的队列,Broker收到数据本来会通过一定的逻辑计算出key对应的队列,有日后 把数据交给队列。

本文来自云栖社区媒体媒体合作伙伴"DBAplus",原文发布时间:2016-10-20

列出功能表来比较MQ差异由于来一场“MQ性能大比武”的做法全是比较扯的,首这么做的事情应该是分类。我理解的MQ分为一一好有几个 流派:

无broker

如上图所示,Broker定义了一一好有几个 队列,key1,key2,key3,生产者发送数据的本来会发送key1和data,Broker在推送数据的本来则推送data(也由于把key带上)。人太好架构一样有日后 kafka的性能要比JMS的性能想要知道高到有有几个倍,本来我基本你是什么 类型的MQ还还可否 才能 kafka并全是备选方案。由于你需要四根暴力的数据流(在乎性能而非灵活性)还还可否 才能 kafka是最好的选者。

MQ真正的目的是为了通讯,屏蔽底层繁复的通讯协议,定义了一套应用层的、更加简单的通讯协议。一一好有几个 分布式系统中一一好有几个 模块之间通讯要么是HTTP,要么是本人开发的TCP,有日后 这并全是协议人太好全是原始的协议。HTTP协议这么实现两端通讯——模块A还还可否 调用B,B才还还可否 主动调用A,由于要做到你是什么 两端全是背上WebServer,有日后 还不支持长连接(HTTP 2.0的库根本找还还可否 )。

由于你拿ZeroMQ来做大数据量的传输功能,全是生产者的内存“爆掉”本来我消费者被“压死”;由于你用kafka做通讯总线那绝对的不用快还还可否 才能 放慢;你想要RabbitMQ实现分布式,那真的是难为它。

ZeroMQ追求的是轻量级、分布式

答案是与非 定了,首先ZeroMQ支持请求->应答模式;其次RabbitMQ提供了RPC是地地道道的同步通讯,还还可否 才能 JMS、kafka你是什么 架构才还还可否 才能 做异步。当我门我门我门 本来我人第一次接触MQ全是JMS累似 的你是什么 本来我才会产生你是什么 错觉。