如果Azure COSMOS容器用完RU会怎样?

时间:2020-08-15 03:54:18

标签: azure azure-cosmosdb

示例-每小时1000卢布和一小时内吃光1000卢布,那么1001请求会怎样?

2 个答案:

答案 0 :(得分:1)

这是一个非常有趣的问题。一些信息表明,如果您对任何操作或查询都达到预定的RU / s速率限制,则Cosmos DB服务将不会执行该操作,并且API会抛出DocumentClientException异常,并将HttpStatusCode属性设置为429。此HTTP状态代码表示对Azure Cosmos DB的请求已超出预配置的吞吐量,因此无法执行。

429请求太多
该集合已超出预配置的吞吐量限制。服务器指定持续时间后重试

后,重试请求

Cosmos DB智能地节流您的请求 当您超出RU配额时,Cosmos DB不会仅通过尖叫ERROR来拒绝您的其他请求!它不仅使用HTTP状态代码429显式标记这些受限制的请求,而且响应还提供了一个非常有用的标头:x-ms-retry-after-ms。顾名思义,此标头告诉您重试之前应等待的时间。 尽管此提示有其自身的局限性(如果多个客户端同时超载您的RU配额可能并不十分可靠),但它对于定义冷静期仍是非常有用的信息,应等待并避免重试过于激进的政策。

参考

https://docs.microsoft.com/en-us/rest/api/cosmos-db/http-status-codes-for-cosmosdb#:~:text=429%20Too%20many%20requests,more%20information%2C%20see%20request%20units

https://medium.com/@thomasweiss_io/how-i-learned-to-stop-worrying-and-love-cosmos-dbs-request-units-92c68c62c938

答案 1 :(得分:1)

Cosmos DB请求单位是每秒,而不是每小时。 因此,以1000 RU / s的速度,您可以每秒运行1000个查询,每个查询占用1 RU,或者每秒可以运行100个查询,每个查询占用10 RU。

您可能会感到困惑,因为计费是基于每小时中您在该小时中定义的最大RU数量来进行的。 因此,如果您在一个集合上设置1000 RU,然后更改为400 RU,则您仍需为当前小时支付1000 RU的费用。

如果超出该数字,则与其他答案状态一样,您会从Cosmos DB返回429错误。 如果您使用Cosmos DB SDK,则通常无需担心,因为如果收到429,他们会在一段时间后自动重试查询。 此重试策略是可配置的,因此您可以决定应尝试重试多少次。

通常希望获得429秒的时间,否则您可能会在Cosmos DB中过度配置吞吐量。