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 ...
随机推荐
- error LNK2001: unresolved external symbol __imp___time64
Q: vs2005 generate a static lib(libva.lib), used in vc++6.0, error LNK2001: unresolved external symb ...
- php和js中数组的总结
php中数组的表示方法:array()或者[] js中数组的表示方法:new array()或者[] 一.php中初始化命名数组 在PHP中声明数组的方式主要有两种:一是应用array()函数声明 ...
- laravel5.2总结--数据迁移
迁移就像是数据库中的版本控制,它让团队能够轻松的修改跟共享应用程序的数据库结构. 1 创建一个迁移 1.1 使用artisan命令make:migration来创建一个新的迁移: ph ...
- alert(1) to win部分解题
XSS在线习题分析 (https://alf.nu/alert1) 1. Warmup function escape(s) { return '<script>console.log(& ...
- Python+Selenium练习篇之7-利用name定位元素
本文介绍如何通过节点中name的值来定位这个web元素.还是来看百度首页搜索输入框,通过name的值来定位. 相关脚本代码: # coding=utf-8 from selenium import w ...
- 导入goshop2(复制自己看)
1.goshop2采用了分布式的架构,很好的使用dubbo集成了服务.导入goshop2需要注意的事项如下: 1.1基本模块的架构: goshop-common开头的为项目的通用配置 goshop-s ...
- BZOJ2121 字符串游戏 【dp】
题目链接 BZOJ2121 题解 dp怎么那么神呐QAQ 我们要求出最小字符串长度 我们设一个\(dp[i]\)表示前\(i\)个字符最后所形成的最短字符串长度 对于第\(i\)个字符,要么保留,就是 ...
- topK问题解法
topK问题的最佳解法是堆排,下面介绍用堆排来解决该问题. 堆排解决topK问题的思路,取出前K个数,最重要的就是要减少比较的次数,用堆排维护一个K大小的堆,比如一个小顶堆,则堆顶为堆中最小的值,将堆 ...
- g2o安装
1.安装依赖项 sudo apt-get install libeigen3-dev libsuitesparse-dev libqt4-dev qt4-qmake 2.安装依赖项 libqglvi ...
- USACO 刷题记录bzoj
bzoj 1606: [Usaco2008 Dec]Hay For Sale 购买干草——背包 #include<cstdio> #include<cstring> #incl ...