azure - 在 Azure 中同步并行操作

标签 azure parallel-processing synchronization azure-worker-roles

我需要一些有关 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/

相关文章:

tensorflow - 通过 Tensorflow 利用多个 CPU 内核

web-applications - 我应该使用哪些库或平台来构建在客户端之间提供实时、异步数据同步的 Web 应用程序?

azure - 如何将自定义 JavaScript 添加到 Azure AD B2C 登录流程

.net - 在一个租户中创建多个企业应用程序注册到同一 Web 应用程序

powershell - Azure ARM 模板部署中的 DSC ConfigurationData 参数

c++ - bool 乘法

c - 使用 #pragma parashare 在 OpenMP 中并行化嵌套循环

java - 同步块(synchronized block)中的静态与非静态锁定对象

java - 类的静态方法之间的同步

用于订阅管理员的 Azure MFA