azure - CosmosDB:使用时间触发的 FunctionApp 优化 RU?
问题描述
我们有一个 FunctionApp,它每 6 分钟在 CosmosDb 中插入大约 8k 个文档。目前我们将 Cosmos 设置为自动缩放,但由于我们的 RU 非常可预测,我觉得我们可以节省一些钱,因为它非常昂贵。我发现可以手动设置吞吐量,根据这篇文章,我可以使用计时器减少/增加 RU。但是现在我想知道这是否是一个好主意,因为我们的时间间隔很短,即使我正确地为 FunctionApp 计时(容易出错?)也可能有 3 分钟的时间可以降低吞吐量。另一件事是手动吞吐量成本降低了 50% 的 RU。
您认为,是否值得实施一个时间触发的 FunctionApp 来增加/减少吞吐量,或者在容易出错等方面不是一个好主意?你有这方面的经验吗?
解决方案
具有手动吞吐量的计时器可能会为您节省资金,因为吞吐量按每小时 RU/s 的最高量计费。由于您的工作负载需要每 6 分钟扩展一次,因此您的成本是该小时内最高的 RU/s。鉴于自动缩放要贵 50%,您可以通过手动缩放来节省费用。
但是,如果您能够将此数据流式传输到 Cosmos 而不是批处理,您将节省更多。吞吐量是每秒测量的。您能够在更长的时间内分摊使用量越多,在任何给定时间点所需的吞吐量就越少。因此,如果您能够使用消息队列并在 Cosmos 前进行负载均衡并将更改流式传输,您将获得更好的整体吞吐量利用率,从而降低总成本。当然,您需要评估使用消息队列来执行此操作的成本,但总的来说,流式传输比批处理更具成本效益。
推荐阅读
- concurrency - 如何在不使用数据库的情况下将每个用户的持久对象存储在服务器端?
- r - 更改不带引号的函数体
- powershell - 忽略powershell函数中的错误路径的问题
- sql-server - 过程需要类型为“ntext/nchar/nvarchar”SQL Server 的参数“@params”
- angular - 如何有条件地删除包装 div 并保留其子项?
- firebase - 无法处理sails.js 会话
- common-lisp - 使用函数'append'时如何在LISP中保留元素的括号?
- c++ - 当我将 DLL 注入现有进程时,DLLMain 不执行任何操作
- linear-algebra - 如何在 MuPAD 中计算特征向量
- python - 用户输入后如何从列表中验证正确猜测?