【问题标题】:Enterprise integration via a data warehouse, or via messages?通过数据仓库还是通过消息进行企业集成?
【发布时间】:2014-09-25 22:51:41
【问题描述】:

想象一个拥有许多应用程序的大型组织。这些应用程序目前没有在很大程度上集成。有一个新的空企业数据仓库,它将以规范格式存储所有数据。第一步是设置仓库并使用来自应用程序的数据为其播种。

我正在寻找以下两种企业集成模式之间的优缺点:

1) 使用集成工具的组合,设置批处理以定期提取转换并将数据加载到仓库中。然后,作为流程的一部分,将仓库中的数据集成到所需的应用程序中。

2) 使用集成工具的组合,实时或批量检测更改并将其发布到服务总线(以规范格式)。然后,对于每个所需的应用程序,订阅消息以集成它们。数据仓库是相同消息的另一个订阅者。

提前致谢。

【问题讨论】:

    标签: service architecture integration data-warehouse servicebus


    【解决方案1】:

    通过消息集成很难解决的一个方面是周期性数据集。

    假设您的数据仓库 (DW) 中有一个表,其中包含按天分区的数据。如果 ETL 作业加载该表,您可以确定如果加载作业完成,则相应的数据集是完整的(除非作业中存在错误)。

    另一方面,消息传递系统通常不提供及时传递的保证。因此,您可能会在午夜前收到特定日期的 90% 的消息,下一小时内收到 8%,在接下来的 6 小时内收到剩余的 2%(有些消息可能永远不会到达)。在这种情况下,如果你的工作依赖于这些数据,你怎么知道数据集已经准备好了?当您认为数据集完整时,您可以根据以前的经验、SLA 或其他一些标准设置任意截止时间(例如午夜过后 1 小时),但这在设计上将是一个近似值。您还需要一些方法来检测丢失的数据(因为丢失的消息)并从源重新请求它。

    This answer 谈到类似的问题。

    另一个问题是回填。想象一下,您的源发送了一条回溯消息,例如,纠正一些以前发送的属于过去数据集的消息。据推测,该数据集的任何消费者都需要被通知更改并重新计算他​​们的结果。但是,如果没有 DW 中的一些额外逻辑,他们可能不知道它。使用 ETL 方法,由于作业之间已经存在依赖关系,因此如果重新运行具有回填日期的作业,其依赖关系将自动运行,或者至少会明确知道某些消费者受到影响。

    考虑到这些注意事项,消息传递方法具有一些很大的优势:

    • 您的所有系统都将使用统一的方法进行集成
    • 数据的传播时间可能会大大缩短
    • 您不必修复因数据量增长超过其扩展能力而爆炸式增长的 ETL 作业
    • 您不会因为 ETL 作业超时而违反 SLA

    【讨论】:

      【解决方案2】:

      我猜你说的是ETL SystemsMediation (intra-communication) design pattern。我不知道为什么要在它们之间进行选择,在我当前的项目中,我们将它们结合起来。

      ETL 解决方案被实现为作为层,负责管理数据集成(通过Orchestrator module)。它是单个入口点和Pipes and filters design pattern 的一部分 我们所依赖的概念。它能够对其处理的信息执行各种复杂程度不同的任务。

      另一方面,作为EAI中介 系统充当多个应用程序之间的“代理”。每当应用程序中发生有趣的事件(例如,创建新信息或完成新事务)时,都会通知 EAI 系统中的集成模块。然后该模块将更改传播到其他相关应用程序。

      因此,作为底线,我不能为您提供两者的利弊,因为对我来说,它们是一个很好的解决方案,它们的使用取决于你的目标、设计等。但是从在我看来,您的描述与我的建议相似。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-10-07
        • 1970-01-01
        • 2012-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-17
        相关资源
        最近更新 更多