Мой webapi должен выполнить набор тяжелых операций, чтобы заполнить запрос. Чтобы свести к минимуму время обработки, я разгружаю «инкремент счетчика просмотров» на веб-сайт.Медленная лазурная работа webjob (локальный разработчик)
То, как я это делаю, заключается в том, что в конце каждого запроса помещается сообщение с именем userId и productId для хранения очереди в лазурной области. Функция webjob запускает новые сообщения в очереди и после разбора сообщения добавляет значения (добавляет или добавляет новые) в статический параллельный словарь.
Я не увеличиваю и не пишу на лазурную таблицу, потому что хотел бы использовать другой веб-сайт на основе таймера, чтобы сохранить значения из параллельного словаря в таблицу, чтобы избежать чрезмерной записи.
В то время как никакие сообщения не теряются, и все значения записываются/добавляются должным образом в dict, я вижу очень низкую производительность. Для обработки 1000 сообщений требуется более 5 минут. сообщения приходят в пачках и обрабатываются медленнее параллельно, чем когда я устанавливаю BATCHSIZE 1. Мои настройки webjob являются:
config.Queues.BatchSize = 32;
config.Queues.NewBatchThreshold = 100;
config.Queues.MaxPollingInterval = TimeSpan.FromSeconds(2);
config.Queues.MaxDequeueCount = 3;
Спектакля, кажется, не страдает из-за столкновения словаря, как те, кажется, быстро обрабатывается. Мой таймер показывает, что для обработки каждого приращения требуется от 0 до 9 мс, поэтому 1000 сообщений должны занимать не более 9 секунд. Является ли webjob отстающим/холостым, и это по дизайну? При какой максимальной скорости веб-процесс может обрабатывать очередь? Есть ли какие-либо другие настройки, которые я могу настроить, чтобы заставить webjob работать быстрее? Существуют ли другие способы решения этой задачи «увеличить число просмотров», учитывая, что у меня может быть много сообщений с разными userIds/productIds?
'' Сообщения поступают в пакеты и обрабатываются медленнее параллельно, чем когда я устанавливаю BatchSize в 1.'', вы имеете в виду, что это быстрее, если параметр BatchSize равен 1? сколько минут требуется для обработки этих 1000 сообщений с помощью BatchSize = 1? –
Привет, Фред, спасибо за ответ. Я просто перезапустил свой тест для сообщений 1k с BatchSize = 1 и увидел, что для обработки требуется 6 минут, поэтому параллельно это происходит быстрее. Я перечеркнула свое первоначальное заявление из вопроса. Считаете ли вы, что по-прежнему можно обрабатывать сообщения быстрее, чем текущая скорость 1k/5min параллельно? –
Вы включили ведение журнала очереди, чтобы узнать, что вы можете получить оттуда? Инструкции приведены на странице https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/enabling-storage-logging-and-accessing-log-data. Кроме того, является ли процесс размещением сообщений в одном центре данных? –