本文为处理需要在特定时间范围内访问的大量数据的 Web 应用程序提供了一个高可用性解决方案。 该解决方案涉及使用 Azure Cosmos DB 作为主数据存储,并使用 Azure Cosmos DB 更改源将数据复制到低成本辅助存储。 指定的时间段到期后,Azure Functions 用于从 Azure Cosmos DB 中删除数据。 辅助存储中的数据可以在较长时间内保持可用,以便为审核和分析目的提供其他解决方案。 该解决方案还通过将数据复制到不同的数据服务来提供较高的持久性。
体系结构
下载此体系结构的 Visio 文件。
数据流
- 客户端通过 Microsoft Entra ID 进行身份验证,并被授予访问 Azure 应用程序服务上托管的 Web 应用程序的权限。
- 在发生区域性中断时,Azure Front Door(防火墙和第 7 层负载均衡器)将用户流量切换到备用区域。
- 应用程序服务托管网站和 RESTful Web API。 浏览器客户端运行使用 API 的异步 JavaScript 和 XML (AJAX) 应用程序。
- Web API 将责任委托给由 Functions 托管的代码来处理后台任务。 任务在 Azure 队列存储队列中排队。
- 排队的消息触发执行后台任务的函数。
- Azure Cache for Redis 缓存函数的数据库数据。 通过使用缓存,该解决方案可减轻数据库活动的负载,加快函数应用和 Web 应用的速度。
- Azure Cosmos DB 保存最近生成的数据。
- Azure Cosmos DB 颁发可用于复制更改的更改源。
- 函数应用读取更改源并将更改复制到 Azure 表存储表。 另一个函数应用定期从 Azure Cosmos DB 中删除过期的数据。
- 表存储提供低成本存储。
组件
- Azure Microsoft Entra ID 是可与本地目录同步的标识和访问管理服务。
- Azure DNS 是用于 DNS 域的高可用性托管服务,为应用提供快速 DNS 查询和 DNS 记录的快速更新。 管理 Azure DNS 就像管理其他 Azure 服务一样,并且使用相同的凭据、API、工具和计费。
- Azure Front Door 是一个安全的内容分发网络 (CDN) 和具有即时故障转移的负载均衡器。 它在靠近用户的边缘运行,加速内容交付,同时保护应用、API 和网站免受网络威胁。
- 应用程序服务是用于构建、部署和扩展 Web 应用的完全托管服务。 可以使用.NET、.NET Core、Node.js、Java、Python 或 PHP 来构建应用。 应用可以在容器中或者在 Windows 或 Linux 上运行。 在大型机迁移中,前端屏幕或 Web 界面可以编码为基于 HTTP 的 REST API。 它们可以进行隔离,并且可以是无状态的,以编排基于微服务的系统。 有关 Web API 的详细信息,请参阅 RESTful Web API 设计。
- Functions 提供了一个无需建立应用程序基础结构即可运行小段代码(称为函数)的环境。 可将其用于处理大量数据、集成系统、使用物联网 (IoT) 以及生成简单的 API 和微服务。 借助微服务,你可以创建连接到 Azure 服务并始终保持最新状态的服务器。
- Azure 存储,它是适用于数据、应用和工作负载的一组云服务,可以大规模缩放,并且很安全。 其中包括 Azure 文件存储、表存储和队列存储。 Azure 文件存储通常是迁移大型机工作负载的有效工具。
- 队列存储提供简单、经济高效、持久的消息队列,适用于大型工作负载。
- 表存储是一种用于使用大型半结构化数据集进行快速开发的 NoSQL 键值存储。 表是无架构的,可随着需求的变化随时进行调整。 对于许多类型的应用程序,访问快速且经济高效,通常成本低于其他类型的键控存储。
- Azure Cache for Redis 是一种完全托管的内存中缓存服务和消息中转站,用于在计算资源之间共享数据和状态。 它提供开放源代码 Redis 和 Redis 实验室提供的一款商业产品作为托管服务。 要提高高吞吐量联机事务处理应用程序的性能,可以将其设计为可缩放并利用内存中数据存储(如 Azure Cache for Redis)。
- Azure Cosmos DB 是 Microsoft 的一种全球分布式多模型数据库,可以让解决方案跨任意数量的地理区域灵活且独立地缩放吞吐量与存储。 它通过综合服务级别协议 (SLA) 提供吞吐量、延迟、可用性和一致性保证。
备选方法
- Azure 流量管理器根据你选择的流量路由方法来跨全球 Azure 区域引导传入的 DNS 请求。 它还提供自动故障转移和性能路由。
- Azure 内容分发网络在边缘服务器中缓存静态内容以实现快速响应,并使用网络优化来改进对动态内容的响应。 如果用户群遍布全球,内容分发网络特别有用。
- Azure 容器应用是一种完全托管的无服务器容器服务,用于大规模生成和部署新式应用。
- Azure Kubernetes 服务 (AKS),这是一项完全托管的 Kubernetes 服务,用于部署和管理容器化应用程序。 可使用它实现微服务体系结构,其组件按需独立缩放。
- Azure 容器实例提供一种快速简单的运行任务的方式,无需管理基础结构。 在开发期间或对于运行非计划任务,它非常有用。
- Azure 服务总线是一种可靠的云消息传递服务,可以实现简单的混合集成。 在此体系结构中,它可以用来代替队列存储。 有关详细信息,请参阅存储队列和服务总线队列 - 比较与对照。
方案详细信息
此解决方案使用 Azure Cosmos DB 来存储 Web 应用程序使用的大量数据。 处理大量数据的 Web 应用受益于 Azure Cosmos DB 弹性且独立地缩放吞吐量和存储的能力。
另一个关键的解决方案组件是 Azure Cosmos DB 更改源。 对数据库进行更改时,更改源流将发送到事件驱动的 Functions 触发器。 然后一个函数运行并将更改复制到表存储表,从而提供一种低成本的存储解决方案。
Web 应用仅需要有限时间的数据。 该解决方案利用这一事实进一步降低成本。 具体来说,另一个函数会定期运行并从 Azure Cosmos DB 中删除过期数据。 除了触发之外,还可以将函数计划为在设定的时间运行。
可能的用例
该体系结构适用于满足以下条件的任何应用程序:
- 使用大量数据。
- 要求数据在需要时始终可用。
- 使用过期的数据。
示例包括可实现以下操作的应用:
- 通过实时数据馈送和物理位置的传感器,个性化客户体验并推动参与度。
- 跟踪客户支出习惯和购物行为。
- 通过收集有关车辆位置、性能和驾驶员行为的数据来跟踪车队,以提高效率和安全性。
- 预报天气。
- 提供智能流量系统或实现智能流量系统,或使用智能技术来监视流量。
- 分析制造 IoT 数据。
- 显示智能计量数据或使用智能技术来监视计量数据。
注意事项
这些注意事项实施 Azure 架构良好的框架的支柱原则,即一套可用于改善工作负荷质量的指导原则。 有关详细信息,请参阅 Microsoft Azure 架构良好的框架。
- 实现和维护此解决方案时,会产生额外的费用。
- 与在核心应用程序中进行复制相比,使用更改源进行复制需要更少的代码维护。
- 需要迁移现有数据。 迁移过程需要临时脚本或例程才能将旧数据复制到存储帐户。 迁移数据时,请确保使用时间戳和复制标志来跟踪迁移进度。
- 为避免从 Azure 表辅助存储中删除条目,请忽略函数从 Azure Cosmos DB 中删除条目时生成的删除源。
作者
本文由 Microsoft 维护, 它最初是由以下贡献者撰写的。
主要作者:
- Nabil Siddiqui | 云解决方案架构师 - 数字和应用程序创新
后续步骤
- Web 队列辅助角色体系结构样式
- 设计地理分散式应用程序
- 使用 Azure Cosmos DB 在全球范围内分发数据
- 为 Azure Cosmos DB 选择适当的 API
- 使用 Azure Cosmos DB for Table 存储和访问 NoSQL 数据
- 使用 Azure Cosmos DB 中的 NoSQL 数据
- 如何使用真实示例为 Azure Cosmos DB 中的数据建模和分区
- 用于将本地或云数据迁移到 Azure Cosmos DB 的选项
- 将数百 TB 的数据迁移到 Azure Cosmos DB
- Azure Cosmos DB 中的更改源设计模式
- Azure Cosmos DB 和 Azure Functions 的基于事件的无服务器体系结构
- Azure 数据工厂简介
- 协调 Azure 数据工厂或 Azure Synapse 管道中的数据移动和转换