Synchronization 什么';在解耦系统之间同步数据的最佳方式是什么?

Synchronization 什么';在解耦系统之间同步数据的最佳方式是什么?,synchronization,eai,application-integration,Synchronization,Eai,Application Integration,我有两个完全解耦的系统:系统A和系统B 假设每个系统上的每一条信息都有一个informationID。没有什么能阻止informationID在不同的系统上保持相同。在所有系统中统一标识一条信息的是源informationID对 假设我需要将一条信息从系统a导出到系统B。然后我想将同一条信息从系统B导出并重新导入到系统a中,我需要能够识别这是同一条信息 在人们的经验中,做这件事的最佳方式是什么 这就是我想做的: 在服务器之间设置消息总线 具有消息队列的系统 为每个系统设置端点 这将监控变化和变化

我有两个完全解耦的系统:系统A和系统B

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

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

在人们的经验中,做这件事的最佳方式是什么

这就是我想做的:

  • 在服务器之间设置消息总线 具有消息队列的系统
  • 为每个系统设置端点 这将监控变化和变化 生成包装到中的命令 将要发送的消息 进入队列(例如 当一条信息 创建/删除/更新)
  • 为端点指定列组 相对于创建/删除/更新 命令,以便无需依赖 系统名称,但仅在常规 层次结构-使每个系统 不需要知道 其他的
  • 分配一个树梢 更新/删除/创建每个 端点,这样命令就不会 满足treshold要求 将被过滤掉而不是 加工
  • 但这并不能解决我仍然需要携带originalSource+originalSourceID的问题


    非常感谢您的帮助。

    除非系统设计中存在某些特定限制,否则我建议将共享/共享信息分解到单独的数据库中,其他两个数据库可以引用,也可以在本地复制。这样,您就不需要双元素密钥,也不需要任何精心设计的ESB装置……

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

    因此,与使用C#或Java编程不同,您将使用webMethods编程,这非常类似于4GL语言。我之所以称之为编程,是因为它仍然涉及逻辑、循环、if-then-else、分支、变量、包等,但它非常面向过程,也就是说,根本没有OOP的概念

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


    缺点是这些工具要花很多钱。在投资这些工具之前,公司通常有一个长期战略

    我们所做的几乎就是你所描述的那种A->B->。我们最初考虑尝试将所有A、B、C ETC都作为对等体,但这太难了,所以我们现在指定一个作为主ETC,其他ETC作为副本。从一个复制品到另一个复制品仍然很容易,但是通过主复制品

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

    因此,每个系统上的代码都是相同的。只有复制品才能打电话回家

    导出和导入过程告诉相关的业务对象完成所有的列出和保存工作,因为它们已经知道如何从数据行实例化和保存它们自己

    它不是每秒几十个事务的体系结构,但它可以工作,并且可以实现几乎实时的同步


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

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


  • 我最喜欢的是OpenESB,我最了解它,它有一个完整的IDE(Netbeans),来自一个大供应商的可选支持和一个应用程序。由于它的简单性和有效性,我喜欢ApacheCamel,但您可以尝试其中一些,并决定哪一个更适合您。然后,您甚至可以决定为所有这些信息购买支持服务。

    如果为每一条信息分配一个GUID,这将大大简化。如果您需要跟踪源ID和其他ID,这很好,但是信息始终以其指定的GUID传播

    当机器再次看到该信息时,它将看到GUID并将其与现有数据关联,然后您可以决定执行什么操作。但你已经知道它是同一个数据块-只是更好的旅行

    请记住,guid是以这样一种方式创建的,即每台机器都将创建自己的guid,并且它们不会冲突(对于所有的p