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消息队列系列(2)什么时候使用MQ

1.跨语言应用集成 MQ使用java编写,并且提供一个java客户端API。但MQ也为C/C++,.NET,Perl,PHP,Python,Ruby等提供客户端。当你考虑在不同平台不同语言下的各个应用...

为什么需要使用MQ?

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

spring-boot--使用thymeleaf模板

转:http://jisonami.iteye.com/blog/2301387 本文记录一下几点:  一、资源文件的约定目录结构  二、Maven配置  三、开发时修改thymeleaf模板自动...

架构设计:系统间通信(15)——服务治理与Dubbo 上篇

在之前的文章中,我们基于服务治理的基本原理,自己实现了一个基于zookeeper + thrift的服务治理框架。但实际上前文中我们自行设计的服务治理框架除了演示基本原理外,并没有多大的实际使用价值,...

缓存介绍

1、缓存:缓存是什么,解决什么问题? 位于速度相差较大的两种硬件/软件之间的,用于协调两者数据传输速度差异的结构,均可称之为 Cache。目的:让数据更接近于应用程序,协调速度不匹配,使访问速度...

柯南君:看大数据时代下的IT架构(2)消息队列之RabbitMQ-基础概念详细介绍

柯南君上一章《柯南君:看大数据时代下的IT架构(1)业界消息队列对比 》中,粗略的讲了一下,目前消息队列的几种常见产品的优劣对比,接下来的几章节会分别详细阐述,本章介绍RabbitMQ,好吧,废话少说...

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

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

Apache ActiveMQ 集群配置方法

构建高可用的AMQ系统在生产环境中是非常重要的,对于这个apache的消息中间件实现高可用非常简单,只要在Apache ActiveMQ单点基本配置 基础上做一次配置变更(如果在一台设备上部署多个AM...

深入浅出 消息队列 ActiveMQ

一、 概述与介绍 ActiveMQ 是Apache出品,最流行的、功能强大的即时通讯和集成模式的开源服务器。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Prov...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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