MQ的简介

1、什么是MQ

MQ(message queue)本质上是队列,遵循先进先出的原则,队列里存放的是message,用于上下游传递消息,MQ是一种非常常见的逻辑解耦+物理解耦的消息通信服务。

2、为什么要使用MQ

(1)流量消峰

当请求过多,并发量过高的时候,系统承受不住,这时候就需要引入MQ来做缓冲,让请求在MQ里排队,依次被消耗,达到消峰的效果(虽然排队会降低效率,但提高了系统的可用性,防止宕机)

(2)应用解耦

多个系统之间互相调用,其中一个系统出故障后势必会引起其他系统异常,如果引入MQ,在其中一个系统出故障的时候要处理的信息会保存在MQ里,待系统恢复正常后继续处理MQ里异常前的信息即可,降低了系统间的耦合度,提升系统的可用性。

(3)异步处理

有些服务间调用是异步的,例如A服务调B服务,B服务需要很长的一段时间才能处理好,但A服务需要知道B服务什么时候能执行完,这种时候只有两种处理方式,一种是A服务定时的去调B服务的接口查询执行结果,第二种是A服务提供回调接口给B服务,B服务执行完后调用接口把结果传回A服务,但这两种方式都不太好,若使用MQ则能很方便的解决这个问题,在A服务和B服务之间架设一条MQ,在A服务调用完B服务后就能继续的处理下一件事,而当B服务执行完后只需往MQ里发一条消息给A服务告知执行结果,这样A服务就不用定时调B服务的接口或给B服务提供回调接口了,A服务还能即时的得到异步处理好的信息。

3、MQ的分类

(1)ActiveMQ

优点:单机吞吐量万级,时效性ms级,可用性高,基于主从架构实现高可用性,消息可靠性高,丢失数据的概率较低

缺点:官方社区现在对ActiveMQ5.x维护越来越少,高吞吐量场景较少使用。

(2)Kafka(大量数据时使用)

为大数据而生的消息中间件,以其百万级TPS的吞吐量名声大噪

优点:性能卓越,单机写入TPS约在百万条/秒,最大的优点,就是吞吐量高。时效性ms级可用性非常高,kafka是分布式的,一个数据多个副本,少数机器宕机,不会丢失数据,不会导致不可用,消息有序,能够保证所有消息被消费且仅被消费一次;有优秀的第三方Kafka Web管理界面Kafka-Manager;在日志领域比较成熟,被多家公司和多个开源项目使用;功能支持:功能较为简单,主要支持简单的MQ功能,在大数据领域的实时计算以及日志采集被大规模使用

缺点: Kafka单机超过64个队列/分区,Load会发生明显的飙高现象,队列越多,load越高,发送消息响应时间变长,使用短轮询方式,实时性取决于轮询间隔时间,消费失败不支持重试;支持消息顺序,但是一台代理宕机后,就会产生消息乱序,社区更新较慢;

(3)RocketMQ(高并发场景时使用)

RocketMQ出自阿里巴巴的开源产品,用Java语言实现,在设计时参考了Kafka,并做出了自己的一些改进。被阿里巴巴广泛应用在订单,交易,充值,流计算,消息推送,日志流式处理, binglog分发等场景。

优点:单机吞吐量十万级,可用性非常高,分布式架构,消息可以做到0丢失,MQ功能较为完善,还是分布式的,扩展性好,支持10亿级别的消息堆积,不会因为堆积导致性能下降

缺点:支持的客户端语言不多,目前是java及c++,其中c++不成熟;社区活跃度一般,没有在MQ核心中去实现JMS等接口,有些系统要迁移需要修改大量代码

(4)RabbitMQ

2007年发布,是一个在AMQP(高级消息队列协议)基础上完成的,可复用的企业消息系统,是当前最主流的消息中间件之一。

优点:由于erlang语言的高并发特性,性能较好;吞吐量到万级,MQ功能比较完备,健壮、稳定、易用、跨平台、支持多种语言如: Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX,文档齐全;开源提供的管理界面非常棒,用起来很好用,社区活跃度高,更新频率相当高

缺点:商业版需要收费,学习成本较高

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值