你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

多个 Power Apps 实例之间的最终一致性

Microsoft Power 平台
Microsoft Dataverse
Azure 逻辑应用

本文概述了一个方案,假设的美国客户 Contoso 最近收购了另一家位于欧洲的公司,并且正在这两家公司之间使用 CRM 和 ERP 系统。 作为此集成的一部分,他们必须使他们的 Dynamics 365 Dataverse 实体的一部分保持同步,直到他们完全集成为止。 Conotso 专有的业务线 (LOB) 应用使用来自这两个系统的数据,并且当数据正在等待同步或缺失时,必须能够接受请求。 以下指南演示如何考虑 Power Platform 实例之间的最终一致性。

体系结构

插件/流始终根据 GUID 或备用键更新插入

显示 Dataverse 插件的示意图,该插件为失败的多系统同步提供解决方案。

下载此体系结构的 Visio 文件

工作流

可以在插件生命周期内通过多个插件步骤生成此解决方案。 如果要创建的实体是强制性的,请使用 PreValidation 步骤。 PreValidation 发生在任何数据库事务开始之前。 如果字段是必需的,则为首选选项。 但是,在某些情况下,PreCreate 插件步骤已经足够。

  1. 美国实例尝试通过逻辑应用将新帐户同步到欧洲实例。 由于停机或升级,无法访问欧洲实例。
  2. Contoso LOB 应用从美国实例读取主要帐户实体。 它打算提交一个 API 调用,该调用引用未复制到欧洲实例的帐户实体。 照现在的情况来看,API 调用会失败,因为由于同步未起作用,因此记录不存在。
  3. 但是,PreValidation/PreCreate 插件首先根据提供的实体 GUID 和提供的引用数据执行更新插入。 如果已存在,则不会更改任何内容。 如果不存在,则会创建一个新帐户(大部分字段为空)。
  4. API 调用成功,因为系统中存在具有给定 ID 的帐户。 插件截获了操作,并正常处理了缺失的记录。 来自 LOB 应用程序的报告成功生成。

注意

Microsoft 建议在自定义代码中引入用于进行回退和重试的断路器模式以作为此解决方案的一部分,以处理引用任一实例时的平台中断问题。 有关使用断路器的详细信息,请参阅断路器模式

备选方法

上述方案使用自定义逻辑应用作为复制方法。 但可以使用多种方法在 Dataverse 实例之间复制数据,包括但不限于:

  • 逻辑应用
  • Azure Functions 中的函数应用
  • Azure 数据工厂
  • Azure Synapse Analytics
  • Power Automate

方案详细信息

组织偶尔会需要使两个或更多 Power Platform 实例保持同步,更具体地说,通常是 Dataverse 实体的子集。 当组织有意添加了用于地理隔离的新实例,但需要跨所有地理位置的通用数据集时,可能会发生这种情况。 或者,当两个组织在 Power Platform 合并完成之前合并时,可能会发生这种情况。

当同步过程符合设计预期工作时,从这两个实例使用的业务线应用程序不会出现问题。 但是,同步机制是会出错的,可能会出现中断或意外问题。 在那种情况下,必须生成使用这两个实例中的数据的业务线应用程序来处理不完整的数据。

为了使 Contoso 新的欧洲子公司集成到 Contoso 的业务结构中,他们必须将帐户和联系人从 Power Platform 的一个实例同步到另一个实例。 在此方案中,Power Platform 的美国实例通过自定义逻辑应用将每日一批引用数据同步到欧洲实例。 专有的 Contoso LOB 应用生成有关用户创建的问题票证的报告。 为完成此任务,LOB 应用从两个 Dataverse 实例读取用户数据以拉取相关数据,美国实例中的主引用键和欧洲实例中的票证数据。 如果同步过程由于停机、维护或其他通信问题而尚未完成,请求将因缺少来自欧洲实例的实体而产生错误。

可能的用例

此模式在以下情况下可能有用:

  • 发送参考数据的系统已关闭。
  • 数据同步需要很长时间或过程会出现延迟。
  • 消费系统对正在创建的实体的创建行为没有逻辑。

何时使用此方法

在以下场景中使用此方法:

  • 你想要保证存在具有给定键的记录,但并不在意记录未完全冻结。
  • 即使数据仍未同步,也必须接受创建。

此模式在以下场景中可能不适合:

  • 创建记录时应用逻辑。 由于数据不会冻结,因此依赖于某些当前可用属性是不安全的。

示例

以下示例展示了同步延迟的潜在旅程和结果。

示例 1 - 成功路径,没有中断或暂时错误

显示成功的多系统同步的示意图。

下载此体系结构的 Visio 文件

  1. 美国实例通过逻辑应用将新帐户同步到欧洲实例。 一切都按预期工作,因为未发生暂时性故障或中断。
  2. Contoso LOB 应用从美国实例读取主要帐户实体,并打算提交一个 API 调用,该调用引用复制到欧洲实例的帐户实体。 这是有效的,因为一切都已启动,并且未发生中断或暂时性故障。 来自 LOB 应用程序的报告成功生成。

示例 2 - 路径失败,同步中断或延迟

显示失败的多系统同步的示意图。

下载此体系结构的 Visio 文件

  1. 美国实例尝试通过逻辑应用将新帐户同步到欧洲实例。 由于停机、维护或其他通信问题,无法访问欧洲实例。
  2. Contoso LOB 应用从美国实例读取主要帐户实体,并打算提交一个 API 调用,该调用引用未复制到欧洲实例的帐户实体。 此 API 调用失败,因为欧洲实例中未创建具有给定标识符的帐户,并且未生成报表。

注意事项

考虑任何业务逻辑对尚未冻结的实体的影响。 假设实体尚未完全冻结和同步。 某些属性将为 null,因此你需要确保在使用此方法时考虑到有关数据的任何决策。

后续步骤

相关体系结构:

Web 开发指南: