我有 2 个(但将来会变得更多)完全解耦的系统:系统A和系统B。

假设每个系统上的每条信息都有一个 informationID。没有什么可以阻止 informationID 在不同系统上保持相同。在所有系统中唯一标识一条信息的是 Source-informationID 对。

假设我需要将一条信息从系统 A 导出到系统 B。然后,我想从系统 B 导出同一条信息并将其重新导入系统 A,并且我需要能够识别出这是同一条信息。

根据人们的经验,最好的方法是什么?

这就是我想做的:

  1. 设置带有消息队列的系统之间的消息总线。
  2. 每个系统的设置端点,将监视更改并生成包裹在邮件中的命令(例如,当创建/删除/更新的信息时)。
  3. 将等级分配给端点相对于创建/删除/更新命令的端点,以免依赖系统名称,而仅依靠一般层次结构 - 这样每个系统都不需要了解其他系统。
  4. 将更新/删除/创建命令对每个端点分配一个tressold

但这并不能解决我仍然需要携带originalSource+originalSourceID的事实。

任何帮助表示赞赏。

有帮助吗?

解决方案

EAI(企业应用集成)供应商已经解决了这个问题,例如 蒂布科网络方法 (现为 Software AG 的一部分)。我以前从未使用过 Tibco,但我使用过 webMethods 来解决此类问题,因此我将只关注 webmethods。例如,在企业中,有关员工的数据可以驻留在 Active Directory 和 PeopleSoft 中。webMethods 可用于确保一个系统(应用程序)中的更改、添加、删除将实时反映在另一个系统(应用程序)中。在其他一些组织中,有关员工的数据也可能位于 Oracle 或 SQL Server 数据库中。再说一次,这不是问题。这些 EAI 工具(例如 webMethods)可以与各种后端通信。webMethods 不限于单个源和单个目标,但由于它具有发布-订阅架构,因此来自单个源的数据可以流向订阅特定信息的多个感兴趣的目标。这些产品还具有交货保证和其他功能。回到员工的例子,最终,如果做得正确,在任何给定时间,企业中的所有系统和应用程序都可以包含有关员工的相同信息,而不会出现任何差异。

因此,您将使用与 4GL 语言非常相似的 webMethods 编程,而不是使用 C# 或 Java 进行编程。我称其为编程,因为仍然涉及逻辑、循环、if then else、分支、变量、包等,但它是非常面向过程的,即根本没有OOP的概念。

这些 EAI 工具的构建目的有限,目的之一是轻松同步企业中不同系统之间的数据。他们的工作做得很好。

缺点是这些工具需要花费很多钱。公司在投资这些工具之前通常会制定长期战略。

其他提示

正如有人已经写过的,这听起来像是一个典型的 EAI 问题。即使 EAI 工具过去很昂贵,但现在有多种免费的开源工具可供选择。下面列出了我最喜欢的

  1. 开放ESB
  2. 骡子
  3. 阿帕奇服务混合
  4. 阿帕奇骆驼

我最喜欢的是 OpenESB,我最了解它,它有一个完整的 IDE (Netbeans),来自大供应商的可选支持和 大量的附加组件. 。由于其简单性和有效性,我喜欢 Apache Camel,但您可以尝试其中的一些,然后决定哪一个更适合您。然后您甚至可以决定为所有这些购买支持服务。

我们正在做的事情与您所描述的 A -> B -> A 几乎完全相同。我们最初考虑尝试让所有 A、B、C 等成为对等体,但这太难了,所以我们现在指定一个为主,其他为从。从一个奴隶到另一个奴隶的东西仍然很容易,但是要通过主人。

这一切都是通过 Web 服务完成的 - 数据集从从站到主站上下移动,反之亦然,从站在自身上运行导出,并在主站上调用导入。然后它告诉主设备进行导出,并自行运行导入。

因此每个系统上的代码都是相同的。只有奴隶才会打电话回家。

导出和导入流程告诉相关业务对象完成所有列表和保存工作,因为它们已经知道如何从 DataRows 实例化和持久化自身。

它不是每秒处理数十笔交易的架构,但它可以工作,并且可以实现近乎实时的同步。

顺便说一句,我们还没有改进 Source/Id 的唯一性:)

如果为每条信息分配一个 GUID,这将大大简化。如果您需要跟踪源 ID 和其他 ID,那没问题,但信息应始终与其指定的 GUID 一起传输。

当机器再次看到该信息时,它会看到 GUID 并将其与现有数据关联起来,然后您就可以决定要做什么。但您已经知道这是同一个数据片段 - 只是传播得更好。

请记住,GUID 的创建方式是每台计算机都会创建自己的 GUID,并且它们不会与另一台计算机或同一台计算机在不同时间创建的 GUID 发生冲突(出于所有实际意图和目的)。

这是创建 GUID 的重要原因之一。

-亚当

除非系统设计中存在某些特定限制,否则我建议将共享/可共享信息分解到一个单独的数据库中,其他两个数据库可以引用或仅在本地复制。那么你就不需要双元素钥匙,也不需要任何复杂的 ESB 装置......

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top