异步消息中间件比较:ActiveMQ、RocketMQ、RabbitMQ、KafkaMQ、Redis

1. 消息中间件的作用

       为了应对流量大爆炸的时代带来的服务器压力,我们引入消息队列来对一些允许延迟执行的任务进行异步化,满足这种需求的软件被称为消息中间件。消息中间件在系统中起到了削峰增流的作用,让我们的系统更容易应对高并发的场景。

2. 消息中间件 vs RPC

       消息中间件可以理解为异步通讯框架,理所当然的,RPC也就可以用同步框架来解释了。两者的相同点是都是建立在不同服务之间的接口调用,异同点是消息中间件允许任务异步执行,而RPC要求尽快得到响应。

3. 常见的几种消息中间件:ActiveMQ、RocketMQ、RabbitMQ、KafkaMQ、Redis

(1)ActiveMQ

    Apache维护的老牌MQ,基于JMS标准。最大的优点就是实现了JMS规范,所以很容易与其他同样实现了JMS的消息中间件进行对接。缺点也是实现了JMS规范,其实很多东西是日常开发中几乎不会用到的,所以对于系统应用来说过于臃肿了。

    在追求稳定的企业级应用场景中,ActiveMQ是最佳的选择。

(2)Redis(发布订阅模式)

    Redis并不算是严格意义上的消息中间件,因为它压根没遵循消息队列的规范。但是耐不住Redis在缓存方面的能力啊,Redis在互联网应用中已经成为了刚需,而它对于简单场景中的消息队列的支持也让它脱颖而出,在消息中间件中占据了一席之地。而且,因为基于内存,所以快,这也是它的一大亮点吧。

    对于异步任务没有很严格的要求的情况下(比如任务的顺序到达,事故恢复),Redis会是不错的选择。

(3)Kafka(发布订阅模式)

    互联网公司对于Kafka有着谜一样的热爱,几乎是面试必问的。想想它的几个特点就明白了:完全分布式、高吞吐、零拷贝技术、快速持久化和消息有序到达,几乎每一项都命中了架构师内心深处的需要。

    在大多数场景中,Kafka都是很不错的选择。缺点也很明显,因为基于轮询的方式遍历每一个消息队列,所以当消息队列数量上去以后,响应时间就会越来越长,这也限制了它在超高并发下的能力。所以更适用于用户请求没那么恐怖的中小型企业。

     另外,kafka并没有遵循jms规范。

(4)RocketMQ

     阿里参考kafka设计的一款消息中间件,做了一些改进,性能上是很优秀的。在阿里内部被广泛应用在订单,交易,充值,流计算,消息推送,日志流式处理,binglog分发等场景。

    但是呢,既然基于kafka,就没办法避免它的缺点了。当消息队列数量达到某一值时,还是会有响应时间越来越长的问题。

(5)RabbitMQ

     RabbitMQ基于AMQP,是用Erlang语言编写的,需要在Erlang环境下使用。因为Erlang语言本身的特性,消息队列性能较好,支持高并发。

     RabbitMQ支持的功能是极多的,但也带来了不好维护的问题,学习成本较高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值