gpt4 book ai didi

azure - 在 Azure 中同步并行操作

转载 作者:行者123 更新时间:2023-12-03 01:11:59 25 4
gpt4 key购买 nike

我需要一些有关 Azure 应用程序的架构建议。因此,有一个包含项目的队列,假设它是 [A, B, A, B, D]。

队列中的每个不同项目都会分配一个随机类别,并且队列中可能会多次出现相同的项目。类别分配由一些辅助角色完成,这些角色执行以下操作:如果该项目已经分配了类别,则它将将该项目添加到该类别中,否则它将创建一个新类别并添加该项目。所以它是这样的:

D: has category? no. Create category 123. Assign [D, 123]
B: has category? no. Create category 435. Assign [B, 435]
A: has category? no. Create category 154. Assign [A, 154]
B: has category? yes. Assign [B, 435] (category already created)
... etc ...

我的困境是:如何同步工作人员以使同一项目不会获得两个类别?如果两个 worker 挑选 B 项,则“B”可能有两个类别。

最佳答案

确保不会重复的唯一方法是锁定可从​​两个实例访问的类别的分配。在 Azure 中执行此操作的最流行方法是租用存储中的 Blob。如果您的项目属于 Foo 类型,并且您通过队列传递 Foo 的 Id,则伪代码将如下所示:

int fooId = GetIdFromQueue();

Foo myFoo = LoadFooFromStorage(fooId);

if (myFoo.Category == null)
{
CreateLockBlobIfNoExistForFoo(fooId);

while (not GetLockOnBlobForFoo(fooId))
{
WaitForSomeTime();
}

// Need to reload the underlying item as another thread may have
// been assigning the category while we were waiting on the lock
Foo myFoo = LoadFooFromStorage(fooId);

if (myFoo.Category == null)
{
myFoo.Category = GetRandomCategory();

SaveFoo(myFoo);
}

ReleaseLease(fooId);
}

您需要查找有关 blob 租赁的一些详细信息,但希望这足以帮助您入门。

关于azure - 在 Azure 中同步并行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14129653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com