MQ消息队列系列(1)为什么使用MQ

原创 2016年06月01日 10:04:18
1.高并发
在高并发分布式环境下,由于来不及同步处理,请求往往发生堵塞,比如说,大量的insert、update之类的请求同时到达mysql,直接导致无所的行锁和表锁,甚至最后请求会堆积过多,从而触发too many connections错误。

通过使用消息队列,我们可以异步处理请求,从而缓解系统的压力。

2.松耦合

MQ提供松耦合的应用架构。松耦合一般是为了减轻经典RPC(Remote Procedure Calls)调用的紧耦合架构而被引入的。该松耦合以异步形式存在,任何一个应用对MQ的调用不依赖于任何其它应用,没有任何依赖或者时序要求。应用依赖于MQ的能力保证消息传递。因此,我们把应用发送消息的形式称之为触发和忘记(fire-and-forget)--应用发送消息到MQ之后并不关心消息如何或者什么时候被传递。同样的消息的接收者也不关心消息从哪里或者如何到来。在不同的环境中这样做的好处是允许客户端使用不同的语言编写甚至使用不同的线路协议。MQ作为中间人存在,允许不同环境的集成和异步交互。

    当我们考虑分布式应用设计时,耦合是很重要的。耦合是指两个或多个应用间的相互依赖。考虑耦合的一个简单办法是思考其中某个应用改变所产生的影响,即其它应用所需要作出的改变。是否一个应用的变化会强制其它应用跟着改变?如果答案是肯定的,则这些应用是紧耦合的。如果一个应用的变化无需强制其它应用跟着改变,则这些应用是松耦合的。这说明了紧耦合系统比松耦合系统更难维护。也就是说,松耦合系统更能适应未知的变化。

    COM,CORBA,DCE和EJB等使用RPC的技术,它们是紧耦合的。使用RPC,当一个应用调用另一个应用,调用者将被阻塞知道被调用者返回结果。图1.1描述了这个过程。

 

    调用方(Application one)将被阻塞直到被调用方(Application two)返回控制权。很多系统使用RPC并且成功了。但是对于这样一个紧耦合系统确实有很多缺点:最显著的缺点是,即使很小的一个改变都要较高的维护代价;正确的时机也很重要,当请求从应用1发到应用2时,两个系统都必须正常工作,同样的,响应从应用2发送到应用1时,两个系统也必须正常工作。这样的时序要求有点麻烦,使得系统稳定性降低。现在我们把这个紧耦合系统和图1.2的系统进行比较。

   

 

    在图1.2中,应用1发送消息到MOM只是一个单方行为。可能一段时间后,应用2从MOM接收消息,这也是一个单方行为。任何一方都不需要知道另一方的存在,它们之间也没有任何时序要求。所以在分布式系统设计时,松耦合系统比紧耦合系统有巨大的优势。如图所示,这就是MQ存在的地方。

    考虑现在其中的一个应用必须搬到一个新的地方。这可能在新硬件引入或应用需要移动时发生。如果是一个紧耦合系统,这样的迁移会很困难,因为系统的其它部分都必须停止工作等待迁移完成。如果是松耦合系统,系统的各个部分能够自由迁移而不影响其它部分。考虑这样一个场景,应用A和B各有很多个实例,其中各个实例分布在不同的机器上。MQ安装在另外的机器上。在这种情况下,任何一个应用实例都可以自由移动而不影响其它应用。事实上,多个MQ实例也可以通过network of brokers配置联合使用。这就允许MQ实例自由迁移而不影响应用A或应用B。采用这种价构,系统的任何一部分在任何时间都可以停机进行维护而不影响整个系统。

   总之,MQ提供一个令人难以置信的灵活性允许松耦合思想变成现实。对于某些情况不能使用异步方式实现,MQ也提供消息的请求/回复模式支持。


版权声明:本文为博主原创文章,未经博主允许不得转载。

到底什么时候该使用MQ?

原文地址:http://mp.weixin.qq.com/s/Brd-j3IcljcY7BV01r712Q 一、缘起 一切脱离业务的架构设计与新技术引入都是耍流氓。   引入一个技术之前,首...

为什么需要使用MQ?

为什么会需要消息队列(MQ)? #################################################################################...
  • cong12
  • cong12
  • 2013年06月20日 13:26
  • 2853

activemq详细使用教程以及为什么要使用activemq

mq可以发送多种数据格式,其中就可以发送数据流,那么可以吧文件转换成数据流,发送到mq这种java消息中间件,其他消费者,可以以主题或者点对点的模式来接受消息,接受数据流然后转换成文件,也是可以实现的...

我们为什么要使用MQ

MQ提供了用于应用集成的松耦合的连接方法, 因为共享信息的应用不需要知道彼此物理位置(网络地址); 不需要知道彼此间怎样建立通信;不需要同时处于运行状态;不需要在同样的操作系统或网络环境下运行。...

【消息队列MQ】各类MQ比较

目前业界有很多MQ产品,我们作如下对比: RabbitMQ 是使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP, SMTP, STOMP,也正是如此,使的它变的非常...

消息队列技术的介绍和原理(MQ)

消息队列技术是分布式应用间交换信息的一种技术。消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走。通过消息队列,应用程序可独立地执行--它们不需要知道彼此的位置、或在继续执行前不需要等待...
  • andybbc
  • andybbc
  • 2016年02月23日 15:42
  • 16050

消息队列使用的四种场景介绍

消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题 实现高性能,高可用,可伸缩和最终一致性架构 使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ...
  • cws1214
  • cws1214
  • 2016年10月25日 14:50
  • 22176

深入浅出 消息队列 ActiveMQ

一、 概述与介绍 ActiveMQ 是Apache出品,最流行的、功能强大的即时通讯和集成模式的开源服务器。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Prov...
  • jwdstef
  • jwdstef
  • 2013年12月17日 17:25
  • 60148

消息队列MQ实践----实现Queue(队列消息)和Topic(主题消息)两种模式

之前有篇文件介绍了生产消费者模式(http://blog.csdn.net/canot/article/details/51541920),当时是通过BlockingQueue阻塞队列来实现,以及在R...
  • canot
  • canot
  • 2016年12月11日 12:04
  • 7194

MQ-ActiveMQ(消息队列)分布式系统

--MQ应用场景-- 1、消息队列介绍 消息队列中间件是分布式系统中的重要组件,主要解决应用耦合,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性的架构 使用较多的消息队列有Activ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MQ消息队列系列(1)为什么使用MQ
举报原因:
原因补充:

(最多只允许输入30个字)