架构决策之消息中间件MQ系列一-开篇

一、消息中间件特性

 消息中间件(MQ)在当前的分布式系统架构中承载着重要的作用,其核心的应用场景主要有以下三个:

异步,异步调用为非阻塞模式,延迟低,对于一些耗时的场景,比如订单完成后,实现短信或邮件通知,就适合采用消息分发机制。

解耦,消息系统采用生产订阅模式,生产者只负责将消息发送出去,而不关心谁来消费;消费者只负责获取并处理消息,而不用关心谁生产的,生产和消费系统的解耦,对于大型复杂的业务系统尤其重要,微服务的理念也是如此。

削峰,在高并发的场景下,通过消费系统的延迟消费,大大缓解服务器的压力,典型就是电商双十一的场景,瞬间产生海量消息,通过MQ的消息堆积能力,将消费端处理能力控制在合理的范围内。

二、消息中间件类型

消费中间件有很多种,目前主流的主要以下五款产品,分别为ActiveMQ,RabbitMQ,Kafka,RocketMQ,Pulsar。

1、ActiveMQ

        ActiveMQ是"老牌"的MQ,可以说是MQ家族的祖师爷,其功能丰富,支持多种语言的客户端版本,在早期是众多公司必选神器。ActiveMQ是基于JMS1.1标准实现,它设计的目标旨在提供标准的、面向消息的、多语言的应用集成消息通信中间件,实现高效、可扩展、稳定、安全的企业级消息通信。由于历史的包袱太重,市场被小辈们步步蚕食,为此ActiveMQ开发了下一代产品Artemis,打造具备高性能,高并发,基于事件驱动的分布式消息系统。

架构决策之消息中间件MQ系列二-ActiveMQ

2、RabbitMQ

       RabbitMQ是采用Erlang语言实现AMQP(Advanced Message Queuing Protocol,高级消息队列协议)。AMQP是一个应用层协议的开放标准,解决消息中间件的需求和拓扑问题。RabbitMQ也是该协议最成功的产品实现。

     Erlang语言其实是比较小众的,最初用于交换机领域的架构模式,被用来实现AMQP协议,使得RabbitMQ在Broker之间进行数据交互的性能非常优秀。

    RabbitMQ以其可靠性,灵活路由,以及强大的集群模式,在MQ家族中大放异彩,独领一方风骚。

架构决策之消息中间件MQ系列三-RabbitMQ

3、Kafka

     Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。在MQ家族比较另类,它其实也是大数据家族的重要成员,设计之初就具备了高吞吐的特性,是一种高吞吐量的分布式发布订阅消息系统。

    现代互联网大数据中,如需要分析用户的特性,爱好,习惯等,就需要收集海量的用户行为数据,包括浏览路径,点击动作,行为日志等等,这些海量的数据的传递和汇聚可以通过Kafka完成,如其说Kafka是消息中间件系统,不如说是大数据交换通道系统。

架构决策之消息中间件MQ系列四-Kafka

4、RocketMQ

      Rocket是由阿里巴巴开发,是为数不多的由国人开发,贡献给Apache组织的项目,其采用Java语言开发。经过阿里历年双十一流量洪峰的洗礼,并发性和可靠性得到了充分的验证,且支持的功能丰富,是活跃度较高的中间件之一。由于中文文档丰富,又有阿里巴巴支撑,在国内很有市场。

架构决策之消息中间件MQ系列五-RocketMQ

5、Pulsar

         Pulsar是由yahoo公司于2016年开源,2018年成为Apache的顶级项目,被誉为下一代的消息队列,业界对其期望很高。Pulsar采用Java开发,使用Bookeeper作为存储,具备了高吞吐,低延迟,计算存储分离,多租户,异地复制等特性,这些特性也使得Pulsar成为kafka的有力竞争者,实际上,它也是处处对标Kafka。

       Pulsar作为后起之秀,并没有Kafka为人熟知,但是近些年国内的一些大厂也逐渐关注,并在生产系统上线。也希望通过我的抛砖引玉,更多的人能了解它,使用它。

架构决策之消息中间件MQ系列六-Pulsar

   当然还有其他很多优秀的MQ产品,比如ZeroMQ,PhxQueue等,由于篇幅有限,后面有时间再来探讨。

三、架构介绍思路

      我们这几篇系列博文就是从架构的角度,了解这几个中间件的设计原理,从而分析其使用场景和优缺点,希望能指导中间件架构选型。关于如何部署,调用,运维以及源码实现细节等则不再我们讨论的范围。

这几篇博客主要从以下几个方面进行探讨:

1、生产者如何生产消息,包括消息格式,通讯的协议,发布模式(同步/异步)等。

2、如何实现消息的持久化,包括节点间的复制,数据刷盘,存储方式等。

3、消费者如何消费消息,包括分发模式(pull or push),消息模式(队列 or 主题),消息确认等。

4、如何实现中间件的高可用,包括失效转移,消息补偿,数据的一致性等。

5、如何实现中间件的高吞吐,高并发,包括负载均衡,集群模式,数据分区等。

6、中间件的性能,包括消息延迟,吞吐量,弹性伸缩等。

好了,下面就开启我们的中间件消息架构系列之旅。

附录:

架构决策之消息中间件MQ系列一-开篇

架构决策之消息中间件MQ系列二-ActiveMQ

架构决策之消息中间件MQ系列三-RabbitMQ

架构决策之消息中间件MQ系列四-Kafka

架构决策之消息中间件MQ系列五-RocketMQ

架构决策之消息中间件MQ系列六-Pulsar

架构决策之消息中间件MQ系列七-总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值