1

我的webapi必须执行一组繁重的操作才能填写请求。为了最小化处理时间,我将“查看计数器增量”卸载到webjob。缓慢的azure队列webjob性能(本地开发)

我目前的做法是在每次请求结束时将具有userId和productId的消息排入队列Azure存储。 webjob函数触发新的队列消息,解析消息后,它向静态并发字典中添加值(增加或增加新的值)。

我不增加和写入到天蓝色的表,因为我想使用另一个基于计时器的webjob将值从并发字典持久化到表以避免过度写入。

尽管没有消息丢失,并且所有值都被正确记录/添加到字典中,但我看到性能很差。处理1000条消息需要5分钟的时间。 消息都在群和并行比我的BATCHSIZE设置为1处理速度较慢我webjob设置:

config.Queues.BatchSize = 32; 
config.Queues.NewBatchThreshold = 100; 
config.Queues.MaxPollingInterval = TimeSpan.FromSeconds(2); 
config.Queues.MaxDequeueCount = 3; 

似乎表现不遭受由于字典碰撞那些似乎是处理速度快。我的计时器显示处理每个增量需要0到9ms,所以1000条消息最多需要9秒。网络作业是滞后/怠速,并且是否按设计进行? Webjob能够以什么最高速度处理队列?有没有其他设置可以调整以使webjob运行更快?考虑到我可以使用不同的userIds/productIds有很多消息,是否还有其他方法可以解决这个“查看增量”任务?

+0

''''当消息进入突发时,并行处理速度比当我将BatchSize设置为1时慢。“您是否认为将BatchSize设置为1会更快?用BatchSize = 1处理这1000条消息需要多少分钟? –

+0

嗨弗雷德,谢谢你的回复。我只是用BatchSize = 1重新运行我的1k邮件测试,看到处理需要6分钟,所以并行速度确实更快。我从问题中删除了我原来的陈述。你是否认为处理消息的速度比目前1k/5min的速度还要快? –

+0

您是否启用了队列日志记录功能,以查看可从中收集的内容?请访问https://docs.microsoft.com/zh-CN/rest/api/storageservices/fileservices/enabling-storage-logging-and-accessing-log-data。另外,排队位于同一数据中心的消息的过程是什么? –

回答

0

似乎有一组消息后webjob的过程中的延迟处理,并先下一盘取得

据我所知,WebJobs队列的查询与特定轮询算法。当找到消息时,SDK等待两秒钟,然后检查另一条消息;当找不到消息时,它会等待约四秒钟,然后重试。有关详细信息,请检查轮询算法题目this article

此外,您可以尝试在Azure App Service Web应用程序中运行WebJobs,并将WebJobs缩放到多个实例。