主流消息中间件介绍

ActiveMQ

ActiveMQ是Apache出品,最流行的,能力强劲的开源消息总线,并且它是一个完全支持JMS规范的消息中间件。其丰富的API、多种集群构建模式使得他成为业界老牌消息中间件,在中小型企业中应用广泛!

当然现在可能用的相对比较少了,因为ActiveMQ性能和其他的主流MQ相比是比较一般的,早期在传统行业为王的时代它是比较流行的,现如今对于一些高并发、大数据的应用场景随处可见,在MQ的选择上如果再使用ActiveMQ往往就比较力不从心了。

使用说明

MQ衡量指标:服务性能、数据存储、集群架构
ActiveMQ它的性能不是特别的好,面对超大规模的并发时,就有可能出现各种各样的小问题,比如阻塞、消息堆积过多、产生一些延迟等等。

从数据存储来看ActiveMQ采用 KahaDB 这种存储方式作为默认的持久化方案。当然也可以选择使用高性能的Google的 LevelDB 这种基于内存的,或者说想要保证消息百分百可靠的话也可以选择一些关系型数据库如 MySQL

ActiveMQ流行了这么多年,其API包括相关的组件以及集成都是非常的完善的。所以说如果不是特别大的并发场景下,ActiveMQ也是比较不错的选择。其集群架构模式也非常不错。

集群架构模式

ActiveMQ最简单的分为两种集群架构模式,一种是 Master-Slave 模式,即主备模式(左图)。它利用 zookeeper 进行两个节点之间的协调,也有可能是更多的节点,其中有一个是主节点,它是对外提供服务的,另外的节点启动但是不对外提供服务。当主节点挂掉时,利用 zookeeper 进行高可用的切换,把 slave 节点切换成主节点,继续对外提供服务。

还有一种集群模式是 NetWork 模式(右图),它其实本质上就是两组主备模式的集成,然后中间用网关进行连接配置,就可以实现分布式的集群了。

Kafka

Kafka是LinkedIn开源的分布式发布订阅消息系统,目前归属于Apache顶级项目。Kafka主要特点是基于Pull的模式来处理消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输。0.8版本开始支持复制,不支持事务,对消息的重复、丢失、错误没有严格要求,适合产生大量数据的互联网服务的数据收集业务。

使用说明

kafka最初设计时就是面向大数据方向的,主要用于日志收集,所以在使用kafka时,要注意业务是否允许出现消息重复、丢失、错误等问题,如果允许那使用kafka是性能最高的。它能够在廉价的服务器上也能支持单机每秒100k条数据以上的吞吐量。

kafka的高性能读写主要是借力于操作系统底层的提供的 PageCache 功能。而且kafka完全没有进行内存和磁盘的数据同步的烦恼,它仅仅使用内存的存储。只要你有足够的内存就能承载很大的数据。

集群架构模式

kafka的集群模式也依赖于 zookeeper ,让zookeeper进行节点的协调和管理。每个kafka节点之间可以进行 replicate (副本的复制),对于某个节点的数据会依次同步到集群的其他节点上,这样只要部署方案合理,即使某个节点挂掉,其他节点的数据也依然存在。

RocketMQ

RocketMQ是阿里开源的消息中间件,目前也已经孵化为Apache顶级项目,它是纯Java开发,具有高吞吐量、高可用性、适合大规模分布式系统应用的特点。RocketMQ思路起源于Kafka,它对消息的可靠传输及事务性做了优化,目前在阿里集团被广泛应用于交易、充值、流计算、消息推送、日志流式处理、binglog分发等场景。

使用说明

RocketMQ在早期2.X版本也是使用zookeeper做协调,在后续3.X版本中放弃了使用zookeeper,而是自行实现了一套 Name Server 去做集群之间的管理和协调工作。

RocketMQ的特点在于它能够保障消息的顺序性,提供了丰富的消息拉取和处理模式,支持订阅者进行水平扩展,实时消息订阅的机制,以及它能承载上亿级别的消息堆积能力。

它的集群架构也有很多种,比如 Master-Slave 模式,双Master模式、双主双从(2M2S)模式,多主多从模式。它的集群架构可选的方案是非常多的。而且RacketMQ刷盘策略也很多,比如说同步刷写、异步复制。它的存储方式借鉴了很多优秀的开源技术,比如zerocopy、linux的ext4文件系统等。

集群模型

左边和右边分别是生产者集群和消费者集群, Name Server 就是自行实现的用于替代zookeeper的程序。中间就是两主两从服务集群,可以实现主从的自动切换,数据之间也可以采用 replicate 机制。

当然这些优秀的机制在Apache RocketMQ项目里面其实是不提供的,比如还有解决分布式事务使用MQ进行解耦,为什么没有呢?因为阿里的RocketMQ商业版是收费的,需要购买相关的产品才可以使用到这些功能。所以这也是使用RocketMQ的一个痛点。

RabbitMQ

RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。

使用说明

RabbitMQ它的性能虽然不及kafka,但是要比ActiveMQ高出很多,而且可以做一些性能优化。并其可靠性和安全性非常好,数据可以保证百分百不丢失。RabbitMQ集群可以构建很多组,实现异地双活架构。每一个节点存储方式可以采用内存(ram)或者磁盘(disk),所以是非常灵活的。

集群模式

图中显示的是三个RabbitMQ节点作为一组集群,当然也可以有很多组。节点之间呢采用 Mirror Queue (镜像队列)的方式,基于这种方式可以保证数据百分百不丢失。前端可以进行一个负载均衡,例如 HA-proxy 进行TCP级别的负载,配合 keepAlived 做一个高可用的配置。前端增加一个虚拟的VIP,通过访问VIP让请求路由到一个负载均衡组件,然后再往下路由到一个RabbitMQ节点。

这就是整个RabbitMQ的集群架构,它能够实现非常完善、非常高可用、并且性能也非常好,而且稳定性超强。它有各种各样的集群恢复的手段,比如节点挂点了、甚至是磁盘损坏了它也能去进行修复。这是RabbitMQ非常好的一个点。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267

推荐阅读更多精彩内容