自动按比例放大/缩小Cosmos DB RU

Sar*_*nan 7 azure azure-cosmosdb

由于一段时间内流量激增,我们遇到节流(429)。为了缓解此问题,我们目前在天蓝色门户中增加了RU,后来又降低了。

我想根据指标向上/向下缩放,但是,它没有公开为文档数据库容器创建的物理分区的数量。

  • 如何获得文档数据库容器的物理分区数?
  • 如果该组中的某人解决了自动缩放问题,我很想知道如何?

Imr*_*vel 5

所需RU限制的依据是什么

我根本不会进入物理分区级别,因为无论如何,负载可能不会在各个分区之间平均分配。我认为您可能不在乎平均分区吞吐量,但需要照顾最坏的分区吞吐量。

因此,如果您需要完全自动缩放,那么我将专注于跟踪节流事件(在事后发生)或监视总RU使用情况(分区魔术)。两条路径都可能变得非常复杂,无法获得真正的自动缩放,可能需要将它们组合起来。升级似乎是可以实现的,然后决定何时降级以及降低到哪个级别比较棘手。

很难期望意外的事情在事情发生之前能够可靠地做出反应。与简单的解决方案相比,绝对要考虑在您的方案中是否值得。

基于日历的RU限制基准

甚至更简单的解决方案是按照平均峰值负载趋势,通过准备好的时间表(即工作日+一天中的时间)来设置RU限制。

这不会针对意外的峰值或下降进行自动缩放,并且需要进行一些监视以适应意外的情况,但是无论如何您都可以,对吗?这种简单的解决方案将为您提供灵活的吞吐量限制,并以最小的工作量实现每天的可预测成本。

更改RU限制

一旦知道了在任何给定时间想要的RU限制,那么执行它就很容易。增减或RU限制可以进行编程,例如通过Azure函数运行。实际更改限制的C#示例如下:

var offer = client.CreateOfferQuery()
    .Where(r => r.ResourceLink == collection.SelfLink).Single();
offer = new OfferV2(offer, newthroughput);
client.ReplaceOfferAsync(offer);
Run Code Online (Sandbox Code Playgroud)

您的Azure功能可能会定期打勾,并根据您配置的计划或收集的事件进行newthroughput相应调整。

注意事项

无论您实施哪种自动缩放解决方案,都要考虑为您愿意达到的水平设置合理的硬性限制。否则,如果发生事故或恶意活动(DDOS),您可能会从Azure获得意外账单。节流有时会更好。