Leer en inglés

Compartir a través de

防止 Azure Cosmos DB for Apache Cassandra 操作发生速率限制错误

适用对象: 卡珊德拉

所有数据库操作的成本将由 Azure Cosmos DB 规范化,并以“请求单位”(RU) 表示。 可将请求单位视为性能货币,它抽象化了执行 Azure Cosmos DB 支持的数据库操作所需的系统资源,例如 CPU、IOPS 和内存。

如果 Azure Cosmos DB for Apache Cassandra 操作超过表的吞吐量限制 (RU),则这些操作可能会失败并发生速率限制 (OverloadedException/429) 错误。 客户端可以处理此情况,如此处所述。 如果无法实现客户端重试策略来处理因速率限制错误而导致的失败,则我们可以利用服务器端重试 (SSR) 功能,在这种情况下,超过表吞吐量限制的操作将在短暂的延迟后自动重试。 这是一个帐户级设置,将应用于帐户中的所有密钥空间和表。

使用 Azure 门户

  1. 登录到 Azure 门户

  2. 访问你的 Azure Cosmos DB for Apache Cassandra 帐户。

  3. 转到“设置”部分下面的“功能”窗格 。

  4. 选择“服务器端重试”。

  5. 选择 “启用 ”,为帐户中的所有集合启用此功能。

适用于Azure Cosmos DB for Apache Cassandra 的服务器端重试功能的屏幕截图

使用 Azure CLI

  1. 检查是否已为你的帐户启用了 SSR:

    az cosmosdb show --name accountname --resource-group resourcegroupname
    
  2. 为数据库帐户中的所有表启用 SSR。 此更改生效可能需要长达 15 分钟的时间。

    az cosmosdb update --name accountname --resource-group resourcegroupname --capabilities EnableCassandra DisableRateLimitingResponses
    
  3. 以下命令将通过从功能列表中删除,来禁用数据库帐户中所有表的服务器端重试。 此更改生效可能需要长达 15 分钟的时间。

    az cosmosdb update --name accountname --resource-group resourcegroupname --capabilities EnableCassandra
    

常见问题

如何重试请求?

请求会持续重试(反复),直到达到 60 秒的超时。 如果达到超时,客户端会相应地收到读写超时错误信息。

SSR 在哪种情况下最有用?

短时间内出现低于1分钟的突发峰值时,服务器端重试(SSR)最为有利,可以避免出现限制错误。 如果工作负载已增加,并且会一直保持在指定的 RU 之上,则 SSR 将无济于事。 建议相应地提高 RU。

建议的客户端设置是什么?

启用 SSR 后,客户端应用应将读取超时设置增加到超过服务器重试设置的 60 秒。 建议为安全起见,保持 90 秒的时间。

代码示例驱动程序 3

SocketOptions socketOptions = new SocketOptions()
	.setReadTimeoutMillis(90000); 

代码示例驱动程序 4

ProgrammaticDriverConfigLoaderBuilder configBuilder = DriverConfigLoader.programmaticBuilder()
	.withDuration(DefaultDriverOption.REQUEST_TIMEOUT, Duration.ofSeconds(90)); 

如何监视服务器端重试的效果?

可以在“Azure Cosmos DB 指标”窗格中查看服务器端重试的速率限制错误 (429)。 启用 SSR 后,这些错误不会转到客户端,因为它们已处理并重试服务器端。

可以在 Azure Cosmos DB 资源日志中搜索包含“estimatedDelayFromRateLimitingInMilliseconds”的日志条目。

服务器端重试是否会影响我的一致性级别?

服务器端重试不会影响一致性级别。 如果请求速率有限(错误 429),则会重试服务器端请求。

服务器端重试是否影响客户端可能收到的任何类型的错误?

否。由于是在服务器端重试,服务器端重试只会影响速率限制错误 (429)。 有了此功能,就不必在客户端应用程序中处理速率限制错误。 所有其他错误将转到客户端。

后续步骤

若要了解有关排除常见错误的更多信息,请参阅此文:

请参阅以下文章,了解如何在 Azure Cosmos DB 中预配吞吐量: