gpt4 book ai didi

azure - 如何在Azure中创建 "distinct"队列?

转载 作者:行者123 更新时间:2023-12-04 00:46:07 26 4
gpt4 key购买 nike

我有以下理论问题。

我希望能够在我的 Azure 应用程序中为每个角色创建多个实例。至少 2 个,以确保其 24/7(或接近 24/7)工作。

这对于客户端前端和监听数据的角色来说很容易。

对于处理数据并将结果保存在 blob/表存储中的辅助角色来说,假设每个辅助角色处理自己的数据集来创建单个结果,这也很容易。

但是我对该应用程序的“中间”遇到了问题。

在最简单的情况下,如果我可以创建一个 Azure 存储“不同”队列(没有两条消息是相同的),那么这会很容易。但据我所知,这是不可能的,特别是因为你一次只能下载 32 条消息。

所以,我认为我需要某种 Controller 角色。该角色将确保工作角色不会互相干扰。

但是,这意味着 Controller 角色不能有多个实例!

我应该如何解决这个问题?

编辑:

我发现我提供的有关我的问题的信息可能太少。

我知道 Azure 队列的工作原理;我知道消息一旦出队,在一段时间内或直到被删除之前,其他角色将无法使用它。

问题是,我不能只用随机的、唯一的数据(例如 GUID)填充队列。

这是对该问题的更实际的解释。

  • 监听器角色监听客户端数据,并将该数据放入基表中,然后通过队列通知该表的特定部分已更改。
  • 监听器角色可能会报告表的同一部分已被多次修改 - 它们不会跟踪队列中发生的情况以及队列中已有的内容,因此它们只是按照“嘿,我为这个客户修改了这一点”(例如)。
  • 工作人员根据监听器提供的消息创建或刷新特定文件(主要是 blob)。目前,有一个工作人员下载整个队列,检查不同的消息,然后根据需要刷新所有文件。添加第二个工作线程会导致问题:由于队列通常不包含不同的值,因此两个工作线程可能会开始处理同一个输出文件,并互相中断。

因此,我正在寻找一个独特的队列,或者至少提供一种方法来检查特定消息是否尚未放入其中。

如果服务总线是唯一的出路,那就这样吧,但最好让解决方案尽可能简单。 ;)

最佳答案

服务总线队列确实具有唯一消息的概念(这可能就是您所说的独特的意思)。这里对两种类型的队列进行了很好的比较:

http://preps2.wordpress.com/2011/09/17/comparison-of-windows-azure-storage-queues-and-service-bus-queues/

弹性基础设施中的单一进程问题可以使用锁定来解决。您可以使用 blob 存储作为锁,如 smarx 的 blob 帖子所示:

http://blog.smarx.com/posts/managing-concurrency-in-windows-azure-with-leases

但是,我会考虑您的整个架构,并尝试减少您正在使用的角色数量。我在最近的一篇博客文章中对此提出了一些论点:

http://coderead.wordpress.com/2012/03/23/three-tier-architecture-in-the-cloud/

关于azure - 如何在Azure中创建 "distinct"队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9907502/

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