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 ...
随机推荐
- 14,UA池和代理池
今日概要 scrapy下载中间件 UA池 代理池 一,下载中间件(Downloader Middlewares) 位于scrapy引擎和下载器之间的一层组件. - 作用: (1)引擎将请求传递给下载器 ...
- Spring---环境搭建与包介绍
jar包下载路径 首先需要下载Spring框架 spring-framework-5.0.0.RELEASE-dist,官方地址为https://repo.spring.io/release/org/ ...
- 【IPv6】ISATAP隧道技术详解
一.基本概念 ISATAP(Intra-SiteAutomatic Tunnel Addressing Protocol) ISATAP是一种非常容易部署和使用的IPv6过渡机制.在 ...
- Windows API 学习记录1
这里面的好多函数不能死记硬背,知道有这个函数就行,等用到了,再回来细看 一.窗口管理函数包括以下几类: 按钮函数(Button) Microsoft提供了对话框和控制来支持应用程序与用户之间的交互通讯 ...
- 整理的一些Android开发类免费视频课程
1.Android实战淘宝网项目视频:http://edu.ibeifeng.com/view-index-id-248.html 2.Android滚动视差实现课程:http://edu.ibeif ...
- LuffyCity-MySQL综合练习50实例
1.请创建如下表,并添加相应约束: 2.自行构造测试数据: 新建数据库 创建表 构造测试数据 #Step1-创建数据库LuffyCity_MySQL; #CREATE DATABASE LuffyCi ...
- 实战项目——获取图片中的GPS位置信息和拍摄时间
今天突然看到有人写过获取图片中位置信息的程序.我觉得很有趣,也就自己实践了一下,研究了一下 话不多说,先上代码 #!/usr/bin/env python3 # -*- coding: utf-8 - ...
- editrules
editrules editrules是用来设置一些可用于可编辑列的colModel的额外属性的.大多数的时候是用来在提交到服务器之前验证用户的输入合法性的.比如editrules:{edith ...
- java I/O类 File使用
11.3 I/O类使用 由于在IO操作中,需要使用的数据源有很多,作为一个IO技术的初学者,从读写文件开始学习IO技术是一个比较好的选择.因为文件是一种常见的数据源,而且读写文件也是程序员进行IO编程 ...
- 体验devstack安装openstack
由于公司制度,工作环境是不能直接上网的,所以在工作时间从没有体验过devstack或者其他联网方式安装openstack. 因自己购置了一台不错的主机,因而决定尝试安装一番,经过一段为期不短的内心极度 ...