【问题标题】:At what maximum rate a webjob can process queue storage messages?webjob 可以处理队列存储消息的最大速率是多少?
【发布时间】:2017-07-10 02:24:02
【问题描述】:

我正在使用存储资源管理器(连接到本地模拟存储)在本地开发环境中工作,并且我的网络作业是在新队列消息上触发的。为了测试,我发布了 100 条队列消息,并且我的 webjob 函数将计数器值打印到控制台日志:

        Interlocked.Increment(ref counter);
        log.WriteLine($"counter: {counter}");

(计数器是静态整数)

浏览 100 条消息需要 30 秒。速率/速度是预期的吗?考虑到该函数的操作相当简单并且不写入数据库/表,有什么方法可以使其更快?

我发布这个与我目前没有解决方案的原始问题有关: Slow azure queue webjob performance (local dev)

【问题讨论】:

  • 您是否正在针对本地存储模拟器运行?还是您在本地针对实际的 Azure 存储队列运行?
  • 针对存储模拟器在本地运行

标签: c# performance azure-storage azure-webjobs azure-queues


【解决方案1】:

本地存储模拟器绝不表示您将看到与真正的 Azure 存储队列相比的性能。本地存储模拟器使用它在幕后创建的本地 SQL Server 实例来模拟存储服务。相比之下就慢了。它对并发的支持也有限。

要获得真正的测试,请在 Azure 中预配一个存储队列。为获得最佳性能,您可以通过在同一 Azure 数据中心运行正在入队和出队的进程来避免网络延迟。

【讨论】:

    【解决方案2】:

    当然,这取决于您的消息的大小,但我怀疑基础设施和硬件也会发挥作用。您的网络作业在什么应用服务计划上运行?您的消息有多大?

    根据文档https://docs.microsoft.com/en-us/azure/storage/storage-performance-checklist#queues

    单个队列每秒可以处理大约 2,000 条消息(每个 1KB)(此处每个 AddMessage、GetMessage 和 DeleteMessage 都算作一条消息)。

    如果没有更多细节,例如您的流程的完整代码,很难判断,但理论上您应该能够获得更高的吞吐量。

    【讨论】:

    • 嗨,彼得,顺便说一句,我没有否决您的评论。当我上次查看答案时,我发现我的问题因缺乏研究等而被否决。我认为您的答案有很好的信息,至少就我的目的而言,因为现在我知道队列/webjob 处理在部署时的吞吐量到天青。根据 Rob 的回答,我的表现似乎受到了影响,因为我正在本地开发/测试所有内容,并且存储模拟器在 Ms SQL 上运行。将应用程序部署到 Azure 后,我将检查我的性能。
    猜你喜欢
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 2016-04-24
    • 2019-07-12
    • 2019-09-03
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    相关资源
    最近更新 更多