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

使用 Cosmos DB 的全球分布式应用程序

Cosmos DB
流量管理器

通过内置于 Microsoft 全球数据中心的高可用性和低延迟功能保证访问世界各地的用户。

体系结构

Architecture Diagram
下载此体系结构的 SVG 版本。

数据流

  1. 用户通过专用客户端访问应用程序。
  2. Azure 流量管理器将根据单个或嵌套路由配置文件将用户的连接路由到访问应用程序的最佳位置。
  3. 在托管应用程序的登陆区域中,应用程序将处理会话和与数据库的连接。
  4. 从简单的静态页面到 Kubernetes 中托管的面向微服务的应用程序,例如,此应用程序可以从简单的静态页面开始。
  5. 应用程序布局与 Cosmos DB 之间的连接通过Azure Active Directory用户可以在 密钥保管库 中选取 Cosmos DB 密钥的用户进行处理。
  6. 使用 Azure Cosmos DB 的多宿主 API,应用程序始终知道最靠近的区域并将请求发送到该区域。 无需进行任何配置更改就能识别最靠近的区域。 在 Azure Cosmos 帐户中添加和删除区域时,无需重新部署或暂停应用程序,它一直保持高可用性。 在幕后,Cosmos DB 将根据定义的区域数处理数据的全局分布和复制。 此外,还应该受益于自动故障转移选项,以故障转移到具有最高故障转移优先级的区域,而如果某个区域不可用,则不会执行任何用户操作。 如果启用自动故障转移,则可修改区域优先级。

组件

  • Azure 流量管理器:为具有六种类型的基于 DNS 的流量路由选项的应用程序创建基于 DNS 的负载均衡/路由选项,这些选项可以嵌套。
  • Azure Active Directory:同步本地目录并启用单一登录。
  • Azure Cosmos DB:适用于任何规模的全局分布式多模型数据库。

备选项

可以使用多个计算和无服务器选项扩展此方案。

计算选项

  • Azure 虚拟机: (VM 创建 Linux 和Windows虚拟机,以秒为单位) 并降低成本。
  • Azure Kubernetes 服务:所有应用程序和微服务基础工作负荷的高度可用、安全且完全托管的 Kubernetes 服务。
  • App 服务:快速为 Web 和移动创建功能强大的云应用。

无服务器选项

注意事项

可用性

Cosmos DB 实例的可用性取决于多种因素。 将Cosmos复制到的区域数越大,应用程序的可用性越大。 每个区域都包含 Azure Cosmos DB 容器的所有数据分区,并且默认情况下可以提供读取。 若要提高数据层的可用性,可以启用多区域写入。 这样做会增加数据层的可用性。 还可以通过采用较弱的一致性级别和可用性区域来提高可用性。

在考虑上述方法时,如果在 Azure Cosmos DB 自动故障转移上实现高可用性,则将解决方案配置为将正在运行的应用程序保留为尽可能高的 SLA。

对于应用程序层,应使用嵌套配置文件配置流量管理员。 将此设计推送到最高级别时,可以缩放每个区域的不同应用程序选项。 每个区域部署也采用高可用性方法。

性能

系统性能受计算和数据库级别的许多因素的影响。 App 服务计划或其他计算选项的 SKU 会影响每个区域中可用的内存和核心。 此外,将部署计算层的区域数,以指示其能够处理的缩放。 部署其他位置会给现有区域带来压力,并导致应用程序可以实现的最大吞吐量呈线性增加。

应配置Cosmos DB,使其不会导致计算层资源的瓶颈。 Cosmos DB 中的每个数据库和容器都应配置为自动缩放,并且应提供最大请求单位值,以确保Cosmos DB 不会限制请求。 若要确定Cosmos DB 实体的适当最大请求单位值,可以运行接近应用程序的最大吞吐量的负载测试。 与其更强的对应项相比,较弱的一致性级别可提供更高的吞吐量和性能优势。

关键是,在代码中实现读取和写入Cosmos DB 的逻辑时,是否应使用 SDK、Azure Functions 绑定等PreferredLocations,以便每个区域 API 将请求路由到最近的Cosmos DB 区域。 根据 Azure Cosmos DB 帐户配置、当前区域可用性和指定的首选项列表,SDK 选择执行读写操作的最佳终结点。 此过程可显著提高性能。

复原

为了提高复原能力,可以将可用性区域用于 Azure Cosmos DB 部署。 复原能力还取决于对Cosmos数据库部署做出的一致性级别选择。 根据此一致性级别,你将实现不同级别的复原 (请参阅 一致性、可用性和性能权衡 ,了解详细信息) 。

可伸缩性

缩放基于此关系图中的许多级别。 Azure Cosmos DB 专为弹性缩放和可预测性能而构建。 在应用程序的级别上,需要查看所使用的计算模型。 Azure Functions和App 服务可以自动缩放。 对于 Azure 虚拟机,可以使用 Azure 虚拟机规模集。 当你意识到这一需求时,应始终考虑一个无服务器选项(如果可能)。

安全性

从安全的角度来看,推动基于标识的系统,可以使用Azure Active Directory来保护对环境的访问。 在后端中,应用程序 (通过托管标识访问的最佳设计) ,不过也可以考虑使用 Azure Active Directory 用户和 Azure 密钥保管库来保护访问的方法。 此外,应进一步保护Cosmos DB 实例,以便能够读取和写入数据库的唯一实体是部署到不同区域的各种后端。 可以使用内置 防火墙将 IP 限制应用于帐户。

我们还直接在 Cosmos DB SQL API 上支持 Azure Active Directory RBAC

后续步骤

有关 Azure Cosmos DB 的详细信息:

有关Azure 流量管理器的详细信息:

相关的解决方案理念:

相关的完整体系结构:

相关体系结构指南: