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

最小存储 - 更改源以复制数据

Azure Front Door
Azure 应用程序服务
Azure Functions
Azure Cosmos DB
Azure 表存储

本文介绍 Web 应用程序的高可用性解决方案,用于管理需要在特定时间范围内访问的大量数据。 该解决方案使用 Azure Cosmos DB 作为主数据存储,并使用Azure Cosmos DB更改源将数据复制到低成本的辅助存储。 在指定的时间段后,解决方案使用Azure Functions从Azure Cosmos DB中删除数据。 辅助存储中的数据仍可供其他解决方案进行审核和分析的时间更长。 该解决方案将数据复制到提供高持久性的不同数据服务。

体系结构

显示最小存储架构的示意图。

下载此体系结构的 Visio 文件

数据流

以下数据流对应于上图:

  1. 客户端使用Microsoft Entra ID进行身份验证,并被授予对托管在Azure 应用服务上的 Web 应用程序的访问权限。

  2. Azure Front Door(防火墙和第 7 层负载均衡器)会在发生区域性中断时将用户流量切换到备用区域。

  3. 应用程序服务托管网站和 RESTful Web API。 浏览器客户端运行使用 API 的异步 JavaScript 和 XML 应用程序。

  4. Web API 将责任委托给 Functions 托管的代码来处理后台任务。 任务在 Azure 队列存储中排队。

  5. 排队的消息触发执行后台任务的函数。

  6. Azure 托管的 Redis 缓存用于对函数的数据库数据进行缓存。 该解决方案卸载数据库读取,以便缓慢更改数据,并使用缓存加速函数应用和 Web 应用。

  7. Azure Cosmos DB 保存最近生成的数据。

  8. Azure Cosmos DB 提供用于变更复制的更改馈送。

  9. 函数应用读取更改源并将更改复制到 Azure 表存储表。 另一个函数应用定期从 Azure Cosmos DB 中删除过期的数据。

  10. 表存储提供低成本存储。

组件

  • Microsoft Entra ID 是一种身份和访问管理服务,可以与本地目录同步。 在此体系结构中,它会对用户进行身份验证,并授予对应用服务上托管的 Web 应用程序的访问权限。

  • Azure Front Door 是一个安全的内容分发网络和负载均衡器。 在此体系结构中,它加速内容交付,提供故障转移功能,并保护应用免受网络威胁。

  • 应用服务 是一项完全托管的服务,开发人员使用它来生成、部署、托管和缩放 Web 应用。 可以使用 .NET、Node.js、Java、Python 或 PHP 生成应用。 应用可以在容器中或者在 Windows 或 Linux 上运行。 在此体系结构中,应用服务托管应用程序的 Web 接口和 REST API。 有关 Web API 的详细信息,请参阅 RESTful Web API 设计

  • Functions 提供了一个环境,用于运行称为函数的小型代码片段,而无需建立应用程序基础结构。 可将其用于处理大量数据、集成系统、使用物联网 (IoT) 以及生成简单的 API 和微服务。 可以使用微服务创建连接到Azure服务的服务器,并且始终保持最新状态。 在此体系结构中,Functions 运行后台任务,例如数据复制和过期的记录删除。

  • Azure 存储 是一组适用于数据、应用和工作负载的可缩放且安全的云服务。 在此体系结构中,存储为任务消息传送提供队列存储,并为低成本复制的数据存储提供表存储。

    • 队列存储提供简单、经济高效、持久的消息队列,适用于大型工作负载。 此体系结构将队列存储用于任务消息传送。

    • 表存储是一种用于使用大型半结构化数据集进行快速开发的 NoSQL 键值存储。 这些表是无架构的,并根据需要进行调整。 访问对于许多应用程序而言是快速且经济高效的。 此体系结构使用表存储来存储 Azure Cosmos DB 中数据的同步和重构副本。

  • Azure托管 Redis是一种完全托管的内存中缓存服务和消息中转站,用于计算资源之间的数据和状态共享。 若要提高高吞吐量联机事务处理(OLTP)应用程序的性能,请使用内存中数据存储(例如 Azure Managed Redis)将其设计为可横向扩展。 在此体系结构中,Azure托管 Redis 可加速对常用数据的访问,从而提高函数应用和 Web 应用的性能。

  • Azure Cosmos DB 是一种全球分布式多模型数据库,可为你的解决方案提供支持,使其能够在任意数量的地理区域中弹性且独立地扩展吞吐量和存储。 它通过全面的服务级别协议提供吞吐量、延迟、可用性和一致性保证。 在此体系结构中,Azure Cosmos DB 存储最新数据,并生成可用于将更新复制到 Table Storage 的更改提要。

备选方法

  • Azure 流量管理器根据你选择的流量路由方法来跨全球 Azure 区域引导传入的 DNS 请求。 它还提供自动故障转移和高性能路由。

  • Azure 容器应用是一项完全托管的无服务器容器服务,开发人员使用它大规模构建和部署新式应用。

  • Azure Kubernetes 服务 (AKS)是一项完全托管的 Kubernetes 服务,用于容器化应用程序部署和管理。 可以使用它实现微服务体系结构,其中包含可独立缩放和按需缩放的组件。

  • Azure 容器实例无需基础结构管理即可运行任务。 在开发期间和运行计划外任务非常有用。

  • Azure 服务总线是一种可靠的云消息传递服务,可以实现简单的混合集成。 在此体系结构中,它可以用来代替队列存储。 有关详细信息,请参阅存储队列和服务总线队列 - 比较与对照

方案详细信息

此解决方案将大量 Web 应用程序数据存储在Azure Cosmos DB中。 处理大量数据的 Web 应用使用Azure Cosmos DB弹性独立缩放吞吐量和存储。

当数据库发生更改时,Azure Cosmos DB 变更源会被发送到事件驱动型 Azure Functions 触发器。 然后一个函数运行并将更改复制到表存储表,从而提供一种低成本的存储解决方案。 还可以使用 Azure 数据工厂 管道或 Fabric Data Factory 来编排更广泛的下游数据流转,将数据落地到分析区域。

Web 应用仅需要有限时间的数据。 此解决方案会定期运行和删除Azure Cosmos DB过期的数据,从而降低成本。 可以按需触发函数,或计划函数在特定时间运行。

可能的用例

此解决方案适用于以下任何应用程序:

  • 使用大量数据。
  • 要求数据在特定时间范围内可用。
  • 使用过期的数据。

示例包括可实现以下操作的应用:

  • 使用物理位置的实时数据馈送和传感器,个性化客户体验并推动参与度。

  • 跟踪客户支出习惯和购物行为。

  • 使用车辆位置、性能和驾驶员行为数据跟踪车辆车队并提高效率和安全性。

  • 预报天气。

  • 监视和管理流量系统。

  • 分析制造业物联网数据。

  • 监视智能计量数据。

注意事项

这些注意事项实现 Azure Well-Architected 框架的支柱,这是一组指导原则,可用于提高工作负荷的质量。 有关详细信息,请参阅 Well-Architected Framework

Reliability

可靠性有助于确保应用程序能够履行对客户的承诺。 有关详细信息,请参阅 可靠性设计评审清单

  • Azure Cosmos DB更改源保证至少传递一次。 将复制函数设计为幂等,以便重复事件不会在表存储中生成不一致的数据。

  • Azure Front Door提供自动区域故障转移。 如果主要区域不可用,则流量将路由到备用区域,而无需手动干预。

成本优化

成本优化侧重于减少不必要的开支和提高运营效率的方法。 有关详细信息,请参阅 成本优化的设计评审清单

  • 主要的成本收益来自将过期数据从 Azure Cosmos DB 迁移到 Table Storage:前者按请求单位(RU)计费,后者按事务次数和存储容量(每 GB)计费。 此过程对于不经常访问的数据更便宜。

  • 如果您的工作负载具有可预测的吞吐量要求,请考虑为 Azure Cosmos DB 使用预留容量

  • 使用更改源进行复制。 与核心应用程序中的复制相比,此方法可减少代码维护。

  • 该解决方案会因二级存储以及用于管理数据复制和过期的函数而产生额外费用。

卓越运营

卓越运营涵盖部署应用程序并使其在生产环境中运行的运营流程。 有关详细信息,请参阅 卓越运营的设计评审清单。

  • 需要迁移现有数据。 迁移过程需要临时脚本或例程才能将旧数据复制到存储帐户。 迁移数据时,请使用时间戳和复制标志来跟踪迁移进度。

  • 忽略你的函数从 Azure Cosmos DB 中删除项时生成的删除 feed。 此方法可防止Azure表辅助存储中删除条目。

性能效率

性能效率是指工作负荷能够高效地缩放以满足用户需求。 有关详细信息,请参阅性能效率设计评审核对清单

  • 变更源处理延迟会影响数据多久后可在表存储中可用。 若要满足延迟要求,请缩放函数应用计划和批处理设置。

  • 若要避免热分区,请选择一个Azure Cosmos DB分区键,该分区键将写入吞吐量均匀分布到逻辑分区。

  • Azure 托管 Redis 可针对变化缓慢的数据减轻 Azure Cosmos DB 的读取压力,从而降低延迟和 RU 消耗。

贡献者

Microsoft维护本文。 以下贡献者撰写了本文。

主要作者:

  • Nabil Siddiqui | 云解决方案架构师 - 数字和应用程序创新

其他参与者:

若要查看非公开的领英个人资料,请登录领英。

后续步骤