ActiveMQ 翻译第一章 1.2小节(松耦合与ActiveMQ和何时使用ActiveMQ)
第一章
1.2.1小节 松耦合与ActiveMQ
ActiveMQ为应用程序架构提供送耦合实现组件。松耦合经常被引入到系统架构中,来减轻紧耦合的远程工程调用的使用。松耦合的设计是异步的,来自其他系统的调用与其他系统无关,并且没有相互依赖和时间的要求。系统能够通过ActiveMQ确保消息的传送。因此,发送消息的应用程序只要把消息发送给ActiveMQ,而不用关心消息是何时或者什么方式发送出去的。对于消息接收方,它没有必要考虑消息从哪里来或者消息什么时候到达的。在异构的系统架构中,ActiveMQ将体现出它的价值。它允许应用程序使用不同的编程语言和不同的传输协议。ActiveMQ作为中间件,允许异构的系统,以异步的方式交互数据。下面的章节,我们将讲解更多。
在设计分布式系统时,系统的耦合是非常重要的。耦合是指两个或者更多应用程序或系统之间的依赖关系。一个简单的方式理解耦合是考虑,当修改系统中的任何一个程序时,对其他程序的影响(导致多少程序修改)。当修改一个应用程序是不是必须强制修改其他的应用程序?如果答案是:是,那么系统是紧耦合的。换句话说,松耦合的架构,能够应变意料之外的修改或变化。
(COM, CORBA, DCE, and EJB)是紧耦合的系统调用,使用的是RPC。当一个应用程序调用另外一个应用程序的时候,调动者被阻塞,直到被调用者有信息返回时。
调用者被阻塞直到调用的对象有返回信息。许多系统的架构使用RPC,并且成功投产。但是这样的紧耦合设计有很多劣势:显著的问题是,即使很小的系统调整,也需要高额的修改费用。另外,系统的调用时间必须正确。两个应用程序必须在同一时间发送请求到系统B,并返回结果到系统C。在紧耦合的系统设计中,有一种设计两个应用系统是完全相互不知道的。如下图:
如上图,一个应用程序发送消息给消息中间件;或许一段时间后,另一个应用程序从消息中间件中获取消息。两个应用程序根本不知道对方系统的存在,并且发送消息没有时间限制。这样的设计,当一个系统需要修改时,对另一个系统的影响非常小,所以维护的费用就比较低。基于上述原因,当考虑分布式架构时,松耦合的系统比紧耦合的系统提供了更多的优势。这时,ActiveMQ就该上场了。
系统架构设计时,必须考虑系统的改变,改变包括添加新的硬件或者移动服务器。紧耦合的设计系统,在添加新硬件的时候,所有的应用程序可能要经历中断的过程。但松耦合的系统,不同的部分可以单独移动。考虑这样的场景:有多个实例A和多个实例B分别部署在不同的物理机上。ActiveMQ安装在另外一台单独机器上。这种情况下,移动实例A或者实例B,不会影响其他系统。事实上,可以实例化多个ActiveMQ,组成群集。这样允许ActiveMQ实例被移动而不影响整个系统的运行。在多实例(冗余)时,任何部分可以暂停下来进行升级维护,而不影响整个系统。
ActiveMQ提供了极大的灵活性,让松耦合的系统架构成为现实。如果完全一部分方式不能满足系统的需要,ActiveMQ支持消息请求/应答模式。
1.2.1小节 何时使用ActiveMQ
在系统架构中,ActiveMQ和异步消息有很多使用场合。例子如下:
l ActiveMQ是java语言开发的,客户端当然支持java。但ActiveMQ也支持C、Perl、PHP、Ruby等语言。若你的系统架构中使用不同的语言开发,使用ActiveMQ作为消息中间件,是最好的选择。
l ActiveMQ将广泛替换RPC风格的同步调用RPC应用。考虑到大部分客户端-服务器应用程序都在使用RPC,包括ATM、web应用程序、信用卡系统、销售点系统等等。尽管这些系统非常成功,更换为使用异步消息会带来好处,但放弃了快速的反应。同步调用的扩展能力是有限的,当请求量比较大时,请求信息将会会缓存或者堵塞,从而影响整个系统的响应速度。
l 作为事件驱动的体系结构,异步的架构允许任意扩容,来处理更多的业务。扩容不仅仅包括增加内存和硬盘(垂直伸缩),也包括随机增加物理处理机(横向扩展)。举例:当我们在亚马孙上购物时,必须经过,下订单、发票创建、付款处理、订单履行、航运等。但是,当用户下单后,立即跳转到“感谢那您的订单” 页面。不仅如此,若果没有延迟,用户还会受到一封电子邮件。在这个过程中,使用了异步调用。当用户下单后,有一个同步调用,以提交订单,而整个订单流程不会同步调用。订单的流程就是依靠异步系统完成的,若流程不能完成将通过邮件通知。这种异步流程满足系统的可扩展性和高可用性。
l 为提高应用程序的可扩展性,许多应用程序使用事件驱动的架构,以提供大规模的可扩展性。这时面向服务的(SOA)的架构,服务和服务之间的通信实现使用异步消息传递,最终达到一致性。
ActiveMQ 翻译第一章 1.2小节(松耦合与ActiveMQ和何时使用ActiveMQ)的更多相关文章
- Learning Scrapy 中文版翻译 第一章
第一章:scrapy介绍 欢迎来到scrapy之旅.通过这本书,我们将帮助你从只会一点或者零基础的Scrapy初学者达到熟练使用这个强大的框架在互联网或者其他资源抓取海量的数据.在这一章节,我们将给你 ...
- Gradle2.0用户指南翻译——第一章. 介绍
翻译项目请关注Github上的地址:https://github.com/msdx/gradledoc本文翻译所在分支:https://github.com/msdx/gradledoc/tree/2 ...
- Java 7 Concurrency Cookbook 翻译 第一章 线程管理之一
一.简介 在计算机的世界里,当我们谈论并发时,我们指的是一系列的任务同时运行于一个计算机中.这里说的同时运行,在计算机拥有多于一个处理器或者是一个多核处理器的时候才是真正的同时,在计算机只拥有单核处理 ...
- Java 7 Concurrency Cookbook 翻译 第一章 线程管理之六
十一.处理线程组中的未控制异常 每种编程语言一个很重要的特性就是其所提供的用来处理程序中错误情况的机制.Java语言和其他的现代语言一样,是提供了异常机制来处理对象程序中的错误.Java提供了很多的类 ...
- Java 7 Concurrency Cookbook 翻译 第一章 线程管理之五
九.使用线程本地变量 一个并发程序的最关键特征就是共享数据.这个特性在那些继承了 Thread 类或者 实现了 Runnable 接口的对象上显得更加重要. 如果你创建一个实现了 Runnable 接 ...
- Java 7 Concurrency Cookbook 翻译 第一章 线程管理之四
七.创建和运行一个后台线程 Java中有一种特别的线程叫做 deamon(后台) 线程.这类线程具有非常低的权限,并且只有在同一个程序中没有其他的正常线程在运行时才会运行.注意:当一个程序中只剩下后台 ...
- Java 7 Concurrency Cookbook 翻译 第一章 线程管理之三
五.睡眠和唤醒一个线程 有时,你会想要在一段特定的时间后再去中断线程的运行.举个例子,程序中的一个线程每一分钟检查一次传感器的状态,剩余的时间,线程应该处于空闲的状态.在这段空闲时间里,线程不会使用计 ...
- Java 7 Concurrency Cookbook 翻译 第一章 线程管理之二
三.中断一个线程 一个拥有多个线程的Java程序要结束,需要满足两个条件之一:一是所有的非后台线程都执行结束了:二是某个线程执行了 System.exit() 方法.当你想要终结一个运行中的Java程 ...
- JERSEY中文翻译(第一章、Getting Started、1.1.7)
最近发现jersey特别流行,但是中文资料非常少,深感没有资料的痛苦,所以分享一下看到的内容供他人快速入门. 今天翻译第一章.Getting Started.https://jersey.java.n ...
随机推荐
- 项目管理者必知:适用于仪表盘项目的7个优秀JavaScript库
仪表盘是用于目标或业务流程的视觉指示工具,也用于切割杂乱无章的数据,从而分割出要点的重要工具.它可以帮助评估信息并及时做出正确的决定,一款实时可视化的仪表盘通常由图标.测绘图.图形符号以及数据表格等组 ...
- Linux之匿名FTP服务器搭建
FTP(File Transfer Protocol)是在服务器与客户端进行文件传输的一种传输协议.本次介绍的是vsftpd的软件体验ftp服务. FTP服务器默认情况下依据用户登录情况分为三种不同的 ...
- Bugku杂项-convert
一进去就发现一堆二进制数,然后考虑怎么才能把这个和隐写扯上关系.首先,二进制我们肉眼就是看不懂再说什么的,这里就想到了转换,再联想上hex将原始数据转化为16进制.我们可以先把2进制转化为16进制,然 ...
- PHP 如何在txt里查找包含某个字符串的那一行?
<?php $handler=fopen("1.txt","r"); while(!feof($handler)) { $m = fgets($handl ...
- 课堂笔记II
- 基于 <tx> 和 <aop> 命名空间的声明式事务管理
环境配置 项目使用SSH架构,现在要添加Spring事务管理功能,针对当前环境,只需要添加Spring 2.0 AOP类库即可.添加方法: 点击项目右键->Build Path->Add ...
- HLG1125 循环小数2
循环小数 II Time Limit: 1000 MS Memory Limit: 65536 K Total Submit: 155(55 users) Total Accepted: 92(51 ...
- web自动化测试:watir+minitest(二)
环境搭建: 我已经安装了一台全新的win7虚拟机.下面将开始搭建watir环境. 安装包清单. 安装ruby.执行rubyinstaller-2.2.4-x64.exe 选择语言: 勾选添加到环境变量 ...
- Mysql,phpmyadmin密码忘了怎么办
1.关闭mysql服务 # service mysql stop 如果提示mysql: unrecognized service这样的错误提示. 先查看查找mysql.server,使用:find / ...
- 【POJ2774】Long Long Message (SA)
最长公共子串...两个字符串连在一起,中间放一个特殊字符隔开.求出height之后,枚举height,看两个后缀是不是分布于两段字符串..如果是,这个值就可以作为答案.取最大值即可. ; var c, ...