Azure Functions:当存在多个活动工作人员时,Change Feed 的行为如何?

Azure Functions: How does Change Feed behave when multiple active workers exist?

我正在使用 Change FeedAzure Functions。我有一个 CosmosDBTrigger 分配给 每个 个具有唯一 LeaseCollectionPrefix 的单独容器。这似乎工作正常,但我不太清楚当基于消费的 Functions 运行时决定扩展并创建多个活跃的工作人员时会发生什么。

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

更改源触发器使用 Change Feed Processor, see this article for more details

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

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

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

尽管如此,触发器具有“至少一次交付”保证,因为如果在处理租约(读取一组更改)的同时出现一个新实例并且负载平衡开始,那么有可能在新实例上读取相同的更改。

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