⼀、MQ简介
MQ:MessageQueue,消息队列。是在互联⽹中使⽤⾮常⼴泛的⼀系列服务中间件。 这个词可以分两个部分来看,⼀是Message:消息。消息是在不同进程之间传递的数据。这些进程可以部署在同一台机器上,也可以分布在不同机器上。⼆是Queue:队列。队列原意是指⼀种具有FIFO(先进先出)特性的数据结构,是⽤来缓存数据的。对于消息中间件产品来说,能不能保证FIFO特性,尚值得考量。但是,所有消息队列都是需要具备存储消息,让消息排队的能⼒。
⼴义上来说,只要能够实现消息跨进程传输以及队列数据缓存,就可以称之为消息队列。例如我们常见的QQ、微信、阿⾥旺旺等就都具备了这样的功能。只不过他们对接的使⽤对象是⼈,⽽我们这⾥讨论的MQ产品需要对接的使⽤对象是应⽤程序。 MQ的作⽤主要有以下三个⽅⾯:
- 异步
例⼦:快递员发快递,直接到客户家效率会很低。引⼊菜⻦驿站后,快递员只需要把快递放到菜⻦驿站,就可以继续发其他快递去了。客户再按⾃⼰的时间安排去菜⻦驿站取快递。
作⽤:异步能提⾼系统的响应速度、吞吐量。
- 解耦 例⼦:《Thinking in JAVA》很经典,但是都是英⽂,我们看不懂,所以需要编辑社,将⽂章翻译成其他语⾔,这样就可以完成英语与其他语⾔的交流。
作⽤:
- 服务之间进行解耦,才可以减少服务之间的影响。提⾼系统整体的稳定性以及可扩展性。
- 另外,解耦后可以实现数据分发。生产者发送⼀个消息后,可以由⼀个或者多个消费者进⾏消费,并且消费者的增加或者减少对生产者没有影响。
- 削峰 例⼦:⻓江每年都会涨⽔,但是下游出⽔⼝的速度是基本稳定的,所以会涨⽔。引⼊三峡⼤坝后,可以把⽔储存起来,下游慢慢排⽔。
作⽤:以稳定的系统资源应对突发的流量冲击。
⼆、RocketMQ产品特点
1、RocketMQ介绍
RocketMQ是阿⾥巴巴开源的⼀个消息中间件,在阿⾥内部历经了双⼗⼀等很多⾼并发场景的考验,能够处理亿万级别的消息。2016年开源后捐赠给Apache,现在是Apache的⼀个顶级项⽬。
早期阿⾥使用ActiveMQ,但是,当消息开始逐渐增多后,ActiveMQ的IO性能很快达到了瓶颈。于是,阿⾥开始关注Kafka。但是Kafka是针对⽇志收集场景设计的,他的⾼级功能并不是很贴合阿⾥的业务场景。尤其当他的Topic过多时,由于Partition⽂件也会过多,这就会加⼤⽂件索引的耗时,会严重影响IO性能。于是阿⾥才决定⾃研中间件,最早叫做MetaQ,后来改名成为RocketMQ。最早他所希望解决的最⼤问题就是多Topic下的IO性能压⼒。但是产品在阿⾥内部的不断改进,RocketMQ开始体现出⼀些不⼀样的优势。
2、RocketMQ特点
当今互联⽹MQ产品众多,其中,影响⼒和使⽤范围最⼤的当数Apache Kafka、RabbitMQ、ApacheRocketMQ以及Apache Plusar。这⼏⼤产品虽然都是典型的MQ产品,但是由于设计和实现上的⼀些差异,造成他们适合于不同的细分场景。
其中RocketMQ,孵化⾃阿里巴巴。历经阿⾥多年双⼗⼀的严格考验,RocketMQ可以说是从全世界最严苛的
⾼并发场景中摸爬滚打出来的过硬产品,也是少数⼏个在⾦融场景⽐较适⽤的MQ产品。从横向对比来看,
RocketMQ与Kafka和RabbitMQ相⽐。RocketMQ的消息吞吐量虽然和Kafka相⽐还是稍有差距,但是却⽐RabbitMQ⾼很多。在阿⾥内部,RocketMQ集群每天处理的请求数超过5万亿次,⽀持的核⼼应⽤超过3000个。⽽RocketMQ最⼤的优势就是他天⽣就为⾦融互联⽹⽽⽣。他的消息可靠性相⽐Kafka也有了很⼤的提升,⽽消息吞吐量相⽐RabbitMQ也有很⼤的提升。另外,RocketMQ的⾼级功能也越来越全⾯,⼴播消费、延迟队列、死信队列等等⾼级功能⼀应俱全,甚⾄某些业务功能⽐如事务消息,已经呈现出领先潮流的趋势。