应用集成方式

企业应用之间主要有4种集成方式 #

文件传输 #

  • 文件传输
    由各个应用产生文件, 其中包含提供其它应用使用的信息.

特征: 内部数据模式自由(schema free)
优势: 1. 内部细节透明 2. 松耦合 3. 标准文件格式支持,如xml, json等.
劣势: 1. 更新慢, 数据不同步, 数据过时 2. 数据不完整, 数据不完全正确时, 数据不一致问题解决困难.3. 产生大量小文件时, 昂贵且不可靠. 4. 语义不一致
适用于批处理.

共享数据库 #

  • 共享数据库
    把应用的数据存储在一个共享数据库中来集成应用, 并定制数据库模式来处理不同应用的各种需求.

特征: 数据有模式(schema)
优势: 1. 提供模型一致性 2. 通过事务管理数据一致性 3. 共享数据, 避免语义不一致问题.
劣势: 1. 统一的数据库模式难设计. 模式改变, 应用也要改变. 2. 遗留系统很难提供一个可扩展的数据库模式供新的应用使用. 3. 性能瓶颈(单点访问) 4. 数据分布迁移困难. 5.应用和数据库紧耦合. 可作为新老系统的集成和改造的候选方案

远程调用 #

  • 远程调用 应用公开提供过程, 并能够被远程调用, 应用通过调用这些过程来执行操作并交换数据.

特征: 公开外部接口
优势: 1. 提供语义一致性 2. 接口多样化, 有可兼容性并能扩展 3. 技术实现广泛, 如Java, .Net, CORBA, Web Services 4. 接口内部数据完整性和透明性.
劣势: 1. 性能瓶颈, 不可靠(与本地访问相比) 2. 应用之间紧耦合, 可能会有时序上的耦合

消息传递 #

  • 消息传递 应用连接到一个公共的消息传递系统上, 并通过消息来交换数据和调用行为.

特征: 隐式调用, 完全隐藏接口
优势: 1. 松耦合 2. 快速响应 3. 可靠 3. 通过消息转换解决语义不一致(实现方式: DDD 防腐层, ESB提供消息转换功能 )
劣势: 1. 设计, 开发复杂(消息消费能力不够, 会引起消息的大量堆叠); 测试, 调试困难(可通过同步方式来测试) 2. 数据不完全同步 3. 有学习曲线

权衡 #

耦合性和依赖性 #

1. 消息传递和文件传输属于非直接耦合, 耦合性最低.
2. 远程调用属于数据耦合, 耦合性次之.
3. 共享数据库属于内容耦合, 耦合性最高.

使用远程调用或共享数据库的应用之间是强依赖的关系
使用消息传递或文件传输的应用之间是弱依赖的关系.

修改性 #

共享数据库中的表结构一旦修改, 应用多少会做一些修改加以应对, 有的甚至是对整个应用的改造.

数据格式 #

文件传输保持所产生的文件内容及格式不变就可以, 以文件作为公共接口, 内部格式可以不段变化. 远程调用, 共享数据库使用接口参数定义数据格式, 内部数据格式对外不可见. 共享数据库中数据格式的演化和扩展性相对于其它方式最弱.

数据新鲜度 #

文件传输使用低频率的大文件传输会造成过时的信息, 有时可以容忍数据不一致, 但也可能造成灾难. 消息传递通过频繁和立即的发送数据来提高数据的新鲜度.

数据序列化 #

数据需要序列化,反序列化. 格式可以是文本或者是二进制的. 传输的格式可以是json, xml或者PB.

问题的解决 #

共享数据库和远程调用解决了文件传输语义不一致的问题. 消息传递相对于远程调用,共享数据库提高了性能和可靠性.

模式之间的组合 #

  1. 消息传递和消息传递的组合(全异步化 SEDA)
  2. 消息传递和远程调用的组合(Half-Sync/Half-Async 半同步/半异步 POSA4)
  3. 远程调用和共享数据库的组合

(1)应用之间没有同步数据的问题

![(2) 变体, 应用之间有同步数据的问题, 实时或非实时同步]( “(2) 变体, 应用之间有同步数据的问题, 实时或非实时同步”)

小结 #

4种方式, 每种模式都建立在前一种模式的基础之上, 以解决以前的集成方法所存在的问题. 相对于前一种模式也更抽象, 成熟度更高, 复杂度也更高.