1.MQ的简单了解
1.1.MQ简介:
MQ,message Queue,是一种提供消息队列服务的中间件,也称消息中间件,是一套提供了信息生产,储存,消费全过程的API软件系统。
1.2.MQ的主要用途:
- 流量削峰
MQ的流量削峰是指在系统面临高并发请求时,使用MQ来缓冲请求,避免数据库或其他服务承受过大的压力。
例如,在双十一等活动中,用户的下单、抢购、支付等操作会导致系统的峰值流量集中在短时间内,如果直接访问数据库,可能会造成数据库宕机或响应缓慢。这时候,可以使用MQ来接收用户的请求,然后按照一定的速率消费消息,从而平滑系统的负载。这样既可以保证用户的请求不会丢失,也可以提高系统的可用性和稳定性。
流量削峰实际上是消息队列最重要的功能,说直白点就是可以避免服务器在高峰时间段可能发生的宕机
- 异步解耦
MQ解耦合是指使用MQ来降低系统之间的依赖关系,使得系统之间可以异步地交换数据和消息。例如,如果A系统需要向B、C、D系统发送数据,如果不使用MQ,那么A系统就需要直接调用B、C、D系统的接口,这样会增加A系统的复杂度和风险,如果其中一个系统出现故障或变动,会影响A系统的正常运行。如果使用MQ,那么A系统只需要将数据发送到MQ中,然后由B、C、D系统从MQ中拉取数据,这样就可以实现A系统和B、C、D系统的解耦合。这样既可以提高系统的可扩展性和容错性,也可以减少系统的开发和维护成本
1.3.MQ的主流产品:
- ActiveMQ
很老的玩意了,据说已经g了 - RabbitMQ
RabbitMQ是一款使用Erlang语言开发的,实现AMQP (高级消息队列协议)的开源消息中间件。它可以让应用程序之间通过消息来异步交互,提高系统的可靠性、可扩展性和灵活性。 - Kafka
大量用于大数据领域,以高吞吐量著名,用与实时计算,日志采集场景,没用使用常见MQ协议,而是自研协议。 - RocketMQ
使用java语言开发,经过阿里双十一数年考验,借鉴了kafka,同样使用自研协议。
性能对比:图片来源https://www.bilibili.com/video/BV1cf4y157sz
1.4.MQ常见协议:
- AMQP(Advanced Message Queuing Protocol),高级消息队列协议,是一个提供统一消息服务的应用层标准协议,为面向消息的中间件设计。它定义了消息的格式、传输方式和交换规则,支持多种语言和平台。RabbitMQ就是基于AMQP协议的一个开源消息中间件。
- MQTT(Message Queuing Telemetry Transport),消息队列遥测传输,是IBM开发的一个即时通讯协议,是一种二进制协议,主要用于服务器和低功耗IoT(物联网)设备间的通信。它使用发布/订阅模式,支持三种不同的服务质量(QoS)级别。
- STOMP(Simple Text Oriented Messaging Protocol),简单文本定向消息协议,是一个基于文本的消息传输协议,可以在不同的语言和平台之间进行通信。它使用帧结构来传输数据,每个帧包含一个命令、一个可选的头部和一个可选的正文。
- XMPP(可扩展消息处理现场协议,Extensible Messaging and Presence Protocol)是基于可扩展标记语言(XML)的协议,多用于即时消息(IM)以及在线现场探测。适用于服务器之间的准即时操作。核心是基于XML流传输,这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同。
优点:通用公开、兼容性强、可扩展、安全性高,但XML编码格式占用带宽大
1.5.RocketMQ的发展历程:
-
2007年,阿里开始五彩石项目,Notify作为项目中的交易核心消息流转系统,应运而生,Notify系统是RocketMQ的雏形。
-
2010年,B2B大规模使用ActiveMQ作为阿里的消息内核,阿里需要一个海量信息堆积的消息系统。
-
2011年初,Kafka开源,淘宝借鉴,开发Meta MQ。
-
2012年,MetaMQ发展DA到3.0水平,并将其抽象形成Rocket MQ 对其进行了开源。
-
2015年,阿里在RocketMQ基础上,有推出了一款专门针对阿里云上消息系统Aliware MQ。
-
2016年双十一,RocketMQ承载了万亿级消息的流转,跨越了一个新的里程碑。11月28日,阿里巴巴向Apache 软件基金会捐赠RocketMQ,成为Apache孵化项目。
-
2017年9月25日,Apache宣布RocketMQ孵化成为Apache顶级项目(TLP),成为国内首个互联网中间件在Apache上的顶级项目。