【问题标题】:Azure Functions: How does Change Feed behave when multiple active workers exist?Azure Functions:当存在多个活动工作人员时,更改源的行为如何?
【发布时间】:2020-10-14 17:46:03
【问题描述】:

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

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

【问题讨论】:

    标签: azure azure-functions azure-cosmosdb azure-cosmosdb-changefeed


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 谢谢。这正是我一直在寻找的。有没有可配置的空间?对于我的一个容器,我需要序列化处理(意味着一个租约和一个实例,即使扩展决定添加更多实例)。我怎样才能做到这一点?
    • 遗憾的是,没有定义严格的一次性交付的配置,如果涉及到许多实例,这是由于分布式系统的性质。如果您的实例数保持不变,这意味着没有重新调整租约,那么您应该只收到一次物品。但是如果实例开始上升/下降,那么重复是可能的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多