0

我正在Change Feed使用Azure Functions. 我为每个单独的容器CosmosDBTrigger分配了一个唯一的. 这似乎工作正常,但我不太清楚当基于消费的运行时决定扩展并创建多个活动工作者时会发生什么。LeaseCollectionPrefixFunctions

我需要确保多个工作人员不会收到同一个逻辑分区键的更改,因为我更新了一些聚合信息并且不希望并发把这搞砸。推送模型是否会Change Feed自动为每个活动工作人员分配逻辑分区键范围?还是会将更改传递给第一个可用的工作人员,从而使相同的逻辑分区键可以出现在多个工作人员中?

4

1 回答 1

0

更改提要触发器使用更改提要处理器,有关更多详细信息,请参阅本文

为简单起见,我们将其范围缩小到 1 个容器。对于特定容器,您的租约集合中有一组租约。

当动态扩展决定添加或删除实例时,基本上租约在实例之间平均分配。每个租约代表容器中的一系列分区键值。一个租约只能由一个实例拥有,一个实例可以拥有多个租约。

这意味着,在正常情况下,更改将始终传递给一个实例(拥有包含文档分区键值的范围的租约的实例)。

虽然,触发器具有“至少一次交付”保证,因为如果正在处理租约(读取一组更改)同时出现新实例并且负载平衡启动,则有可能在新实例上读取相同的更改。

底线是,您应该始终考虑在分布式系统中的两个实例中发生更改的可能性,即使这种可能性很小。

于 2020-10-14T19:56:44.177 回答