【问题标题】:Scale CosmosDB binding for Azure Functions per logical partition为每个逻辑分区缩放 Azure Functions 的 CosmosDB 绑定
【发布时间】:2019-07-29 12:36:32
【问题描述】:

我希望我的 Azure 函数按逻辑分区而不是按物理分区进行扩展。我已经测试了 Azure 函数绑定,当我有多个物理分区时它确实可以扩展(在我的测试中,我需要将我们的 RU 从 2000 增加到 20000)。但我不需要那么多 RU,因为我将它用作事件存储。我不是在查询数据,只是通过我的 Azure 函数处理每条消息。所以我想知道是否有办法让 Azure Functions 按分区向外扩展。我看到在新的 v3 库中有一个 ChangeFeedOptions.PartitionKey 属性,但该类是内部的,我不确定它是否符合我的要求。

我基本上希望运行与每个逻辑分区分组的新消息一样多的 Azure Functions。实现这一目标的最佳方法是什么?

【问题讨论】:

  • 我非常想知道您的用例。该功能究竟在执行什么操作?我已经为 azure 功能构建了一个非常可配置的节流器,这绝对是 OOB 不可用的东西
  • 我们使用 Azure 函数来处理来自我们的事件存储的事件以创建一个投影(针对读取数据存储进行了优化;有关更多信息,请参阅“事件源”)。还是您的意思是操作在功能级别上执行的操作?
  • 确实,我是在功能层面上询问的,但我希望在事件驱动的解决方案上进行更多合作。你用什么做活动商店?所以基本上你使用 cosmosdb 作为服务中不同操作的触发器?您如何选择何时写入 cosmosdb 与写入表存储?
  • 我们有一个特定客户的员工数据流(可能是大约 50.000 个事件)。处理它可能需要一段时间,因此我们不希望其他客户等待这些事件得到处理。由于更改提要,我们希望使用 Cosmos 作为我们的事件存储,但由于它不能完全满足我们的需要(在我们的小规模上),我们可能会使用表存储和其他形式的队列来更新预测(可能是服务总线主题,因为我们已经开始运行了)。
  • 如果更改提要不支持,您究竟需要做什么?

标签: azure azure-functions azure-cosmosdb


【解决方案1】:

截至今天,这是不可能的。不由 CF SDK 的用户来进行租约管理。 CF SDK 将为我们做到这一点,我们无法改变它。

理论上实际上每个逻辑分区有一个租约的唯一方法是有一个足够大的逻辑分区来占据整个物理分区。然而,这意味着您将在单个分区中达到 10GB 的数据,这将是您此时的主要关注点。

不过,我不会担心缩放问题。 CF 将生成无缝扩展所需的尽可能多的租约,而这种扩展仅取决于数据库中的数据量和分配的 RU 数量。

【讨论】:

  • 感谢您的快速回答!我只是将它用作事件存储,我们不需要那么多 RU(我们估计大约 2000 个),所以这会将我们限制为只有 1 个 PartitionKeyRange,然后 1 个 Azure 函数实例将在该单个分区键范围上拥有租约,所以它实际上并没有扩展。好吧,它会启动更多实例,但它们都不能获得租约;请参阅此问题的第一段:stackoverflow.com/q/48392463/151025。所以实际上我们的函数只有一个实例在处理更改提要。
  • @Zenuka 很遗憾是的。您需要更多分区键范围来生成更多租约,而对于更多分区键范围,您需要更多数据和更多 RU。这是 Cosmos DB 的先有鸡还是先有蛋的问题。
猜你喜欢
  • 2021-12-23
  • 1970-01-01
  • 2019-01-23
  • 2021-02-10
  • 1970-01-01
  • 2021-12-26
  • 1970-01-01
  • 1970-01-01
  • 2021-10-22
相关资源
最近更新 更多