企业集成模式-引言

发布时间 2023-10-22 20:17:53作者: LHX2018

书名:企业集成模式

副标题:设计、构建及部署消息传递解决方案

作者:Gregor Hohpe ; Boddy Woolf

译者:荆涛 王宇 杜枝秀

书号:ISBN 7-5083-4114-7

版次:2006.3 北京第一版 3006.3 第一次印刷

前言

这是一本有关使用消息传递进行企业集成的书。我们选择异步消息传递作为本书的重点,还是一本有关各种消息传递或中间件技术的指南。

顾名思义,本书主要收集了各种模式。人们已经普遍认为,模式能把专家在不同领域中缺乏固定答案的知识捕获下来,这些领域包括应用体系结构、面向对象的设计或基于异步消息传递结构的集成解决方案。

每种模式都引出一个特殊的设计问题,通过介绍与问题相关的具体环境,提出一种能平衡各种矛盾或动因的解决方案。在大多数情况下,解决方案并不是一下就能想到的,而要经过多次实践不断提炼。因此,每种模式都融合了高级集成开发人员和架构师从反复构建的解决方案和挫折中总结出的经验。也就是说,本书并没有“发明”什么模式;模式是无法发明的,而是从相关领域的实践中发现和观察到的。

引言

让人们感兴趣的应用很少是独立存在的。销售应用必须要与库存应用打交道,采购应用必须与某个拍卖站点连接,或者你的个人数字助理 (PDA) 上的日历必须与公司的日历服务器同步,似乎所有的应用通过与其他应用集成后都会变得更好。

所有的集成解决方案必须应对以下几个基本挑战:

  • 网络是不可靠的
  • 网络速度慢
  • 任何两个应用都是不同的
  • 改变是难免的。应用会随着时间改变

随着时间的推移,开发人员使用以下四种主要方法克服了上述挑战:

  1. 文件传输
  2. 共享数据库
  3. 远程过程调用
  4. 消息传递:一个应用向公共消息通道中发布一个消息,其他应用可以在之后某个时间从通道中获得这个消息。应用之间必须协商建立通道以及消息的格式。

尽管上述四种方法从本质上解决的是相同的问题,但每种方法均有其独特的优点和不足。实际上,应用之间可通过多种方法集成,使得每个集成点都能充分利用最合适的方法。

什么是消息传递?

电话呼叫:同步通信

语音邮件:异步通信,把电话呼叫转换成消息和队列,以便事后使用,这就是消息传递的基本原理。

消息传递是一种能支持高速、异步、程序到程序间可靠通信的技术。程序之间通过发送数据包进行通信,这种数据包即称为消息 (message)。通道 (channel),也称为队列,是连接程序并传递消息的逻辑路径。通道的行为类似于消息集合或消息数组,但是它能在多台计算机之间神奇地共享,同时被多个应用使用。发送消息的应用被称为发送者(sender.或生产者 (producer),它把消息写到通道中。从通道中读取(和删除)消息的应用称为接收者(receiver)或消费者 (consumer)

消息本身是一种简单的数据结构一一如字符串、字节数组、记录或对象。可以把它看作是数据、接收方所调用的命令,或者是发送方所发生事件的描述。消息实际上是由两部分组成的:消息首部和消息体。消息首部包含消息的元信息一一谁发送的消息、其目标是哪里等等。

什么是消息传递系统?

消息传递能力是由一种单独的称为消息传递系统或面向消息中间件(Message-OrientedMiddleware,MOM)的软件系统提供的。

从本质上讲,消息传递会经过5个步骤:
image

  1. 创建
  2. 发送:发送者把消息添加到通道中
  3. 传送:消息传递系统把消息从发送者的计算机转移到接收者的计算机,使接收者能获得这个消息
  4. 接收
  5. 处理

这个图还表达了两个重要的消息传递概念:

  1. 发送并忽略:在第二步,发送方应用把消息发送到消息通道中。一旦发送完毕发送者就可以继续其他工作,而让消息传递系统在后台传递消息。发送者可以肯定接收者最终能够获得消息,因此它不必等待
  2. 存储并转发:在第二步,当发送方应用把消息发送到通道中后,消息传递系统把消息存储在发送者的计算机内存或磁盘中。在第3步,消息传递系统把消息从发送者的计算机转发给接收者的计算机,然后再次把消息存储在接收者的计算机中。当消息从一台计算机转移到另一台计算机上时,这一存储转发过程会重复多次,直到消息到达接收者的计算机

为何使用消息传递?

  • 远程通信
  • 平台/语言的集成:计算机系统可能使用不同的语言、技术或平台,集成这样的异构应用需要通过一个中间件中性区进行协商
  • 异步通信
  • 可变的定时机制:异步通信让发送者可以按照自己的速度把请求批量发送给接收者,接收者也可按照自己的速度处理请求
  • 节流:RPC最大的缺点是当单个接收者需要同时处理过多的调用时,可能负载过大。
  • 可靠的通信:当发送者发送一个消息时,消息传递系统把消息保存起来,然后把消息转发给接收者所在的计算机,并在此保存。此外还有重传机制。
  • 无连接运行
  • 中介者:如果一个应用与其他应用断开了连接,它只需与消息传递系统重建连接,而不必与其他所有进行消息传递的应用建立连接
  • 线程管理。异步通信意味着,一个应用在等待其他应用完成任务时,除非有必要,自己不必阻塞。

异步消息传递带来的挑战

  • 复杂的编程模式:难于开发与调试
  • 序列问题:顺序性
  • 同步问题
  • 性能:消息传递更适合用于初始数据复制完成后的系统同步
  • 有限的平台支持
  • 开发商锁定

商业消息传递系统

  1. 操作系统:微软-MSMQ,Oracle-Oracle AQ
  2. 应用服务器:Sun-JMS
  3. EAI套件
  4. web服务工具集

模式的描述形式

本书介绍的是一种模式语言,它是由一组模式组成的。每种模式代表了一种决定,以及做出这一决定需要考虑的相关事项。模式语言将相关的模式编织成网,使每种模式均能与其他模式相关,帮助读者做出决策。采用这种方式可以将专家的经验记录下来,让其他人能方便地理解和应用这些经验。

如果只在书中列出模式的描述,这显然还不能让读者获得丰富的知识。简单地说“当你面对这个问题时使用这个解决方案”是远远不够的。对真正想掌握模式的读者来说,必须说明解决问题的难点在哪里,要介绍各种在实际应用中可能不是很好的解决方案,解释为什么这里提出的解决方案是最好的。同样地,还要把模式之间的关系讲清楚,帮助读者从一个问题深入到下一个问题。用这种方法,模式的描述形式不但能用于教会读者如何选择已有的解决方案,更重要的是还提供了方法,你可以拿这些方法来解决作者尚未遇到的新问题。这些就是我们创作本书的目的。

模式应该是规范的,即它们应该能告诉你做什么。模式不但要描述问题,描述解决问题的方法,还要告诉你具体的解决步骤。每种模式代表了一种你要做出的决定:“我应该使用消息传递吗?”“采用命令消息能给我提供帮助吗?”。模式和模式语言的关键是帮助你做出解决特定问题的适当决定,即使作者并不了解这些特殊的问题是什么,即使你还不具备自己开发解决方案的知识和经验,也能从中获益。
image