Azure Cosmos DB for NoSQL 的复原建议

本文包含有关实现 Azure Cosmos DB for NoSQL 复原的建议。 许多建议包含支持 Azure Resource Graph (ARG) 查询,以帮助你识别不合规的资源。

复原建议影响矩阵

每项建议根据以下影响矩阵进行标记:

映像 影响 说明
需要立即修复。
在 3-6 个月内修复。
需要审查。

复原建议摘要

类别 优先级 建议
可用性 配置至少两个区域以实现高可用性
灾难恢复 为具有单个写入区域的多区域帐户启用服务托管的故障转移
评估多区域写入功能
选择反映数据持久性要求的适当一致性模式
配置连续备份模式
系统效率 确保查询结果已完全清空
在客户端维护单一实例模式
应用程序复原能力 在客户端实现重试逻辑
监视 监视 Cosmos DB 运行状况并设置警报

可用性

配置至少两个区域以实现高可用性

必须在 Cosmos DB 上启用次要区域以实现更高的 SLA。 这样做不会导致任何停机,而且只需在地图上选择图钉即可。 使用强一致性的 Cosmos DB 实例至少需要配置三个区域,以便在一个区域发生故障时保持写入可用性。

潜在优势:增强 SLA 和复原能力

详细了解:Cosmos DB for No SQL 的可靠性(高可用性)

Resources
| where type =~ 'Microsoft.DocumentDb/databaseAccounts'
| where
     array_length(properties.locations) < 2 or
    (array_length(properties.locations) < 3 and properties.consistencyPolicy.defaultConsistencyLevel == 'Strong')
| project recommendationId='cosmos-1', name, id, tags

灾难恢复

为具有单个写入区域的多区域帐户启用服务托管的故障转移

Cosmos DB 拥有较高的运行时间和复原能力。 即便如此,问题也会不时地出现。 借助服务托管的故障转移,如果某个区域发生故障,Cosmos DB 会自动切换到下一个可用性区域,而无需用户执行任何操作。

Resources
| where type =~ 'Microsoft.DocumentDb/databaseAccounts'
| where
    array_length(properties.locations) > 1 and
    tobool(properties.enableAutomaticFailover) == false and
    tobool(properties.enableMultipleWriteLocations) == false
| project recommendationId='cosmos-2', name, id, tags

评估多区域写入功能

使用多区域写入功能可以设计跨多个区域高度可用的应用程序,不过,这需要注意一致性要求和冲突解决方法。 不正确的设置可能会降低可用性并因存在未处理的冲突而导致数据损坏。

潜在优势:增强高可用性

了解详细信息:

Resources
| where type =~ 'Microsoft.DocumentDb/databaseAccounts'
| where
    array_length(properties.locations) > 1 and
    properties.enableMultipleWriteLocations == false
| project recommendationId='cosmos-3', name, id, tags

选择反映数据持久性要求的适当一致性模式

在全局分布式数据库中,一致性级别会影响区域中断期间的数据持久性。 了解数据丢失容限以规划恢复。 除非需要更强的一致性级别,否则请使用“会话”一致性,这样可以接受更高的写入延迟,以及只读中断对写入区域造成的潜在影响。

潜在优势:增强数据持久性和恢复

详细了解:Azure Cosmos DB 中的一致性级别

配置连续备份模式

Cosmos DB 的备份始终会打开,提供针对数据事故的保护。 连续模式允许自助还原到事故发生前的还原点,这与定期模式不同,后者需要联系 Azure 支持人员,从而导致还原时间变得更长。

潜在优势:更快的自助数据还原

详细了解:使用 Azure Cosmos DB 中的时间点还原功能进行连续备份

Resources
| where type =~ 'Microsoft.DocumentDb/databaseAccounts'
| where
    properties.backupPolicy.type == 'Periodic' and
    properties.enableMultipleWriteLocations == false and
    properties.enableAnalyticalStorage == false
| project recommendationId='cosmos-5', name, id, tags

系统效率

确保查询结果已完全清空

Cosmos DB 具有 4 MB 响应限制,导致大型或跨分区查询出现分页的结果。 每个页面会显示可用性并提供下一个页面的延续令牌。 代码中需要使用 while 循环来遍历所有页面,直至完成。

潜在优势:最大限度地提高数据检索效率

详细了解:Azure Cosmos DB for No SQL 中的分页

在客户端维护单一实例模式

为每个帐户和应用程序使用 SDK 客户端的单个实例至关重要,因为连接与客户端绑定。 计算环境对开放连接施加了限制,超过此限制会影响连接。

潜在优势:优化连接和效率

详细了解:通过 Azure Cosmos DB SDK 设计可复原的应用程序

应用程序复原能力

在客户端实现重试逻辑

Cosmos DB SDK 通过重试来自动管理许多暂时性错误。 尽管如此,应用程序必须针对 SDK 无法以常规方式解决的特定情况实现附加的重试策略,以确保更可靠的错误处理。

潜在优势:增强错误处理和复原能力

详细了解:通过 Azure Cosmos DB SDK 设计可复原的应用程序

监视

监视 Cosmos DB 运行状况并设置警报

监视 Azure Cosmos DB 资源的可用性和响应能力并针对工作负载设置警报是一种良好做法。 这可以确保在处理不可预见的事件时保持主动。

潜在优势:主动问题管理

详细了解:使用 Azure Monitor 为 Azure Cosmos DB 创建警报