HTTP-триггер по запросу. Лазурная функция, вызывающая себя несколько раз.

Я добавил функцию Azure, запускаемую http, и развернул ее в приложении-функции. Приложение-функция содержит только одну эту функцию HTTP-триггера по запросу. Приложение-функция имеет план обслуживания приложений, а не план потребления.

Кроме того, версия приложения-функции ~ 1. так что тайм-аут неограничен.

В коде функции azure я читаю один файл, содержащий тысячи исторических записей, и обрабатываю эти записи. эта задача занимает более часа времени. это разовая задача.

когда я вызываю эту функцию Azure после развертывания, она вызывается, и через некоторое время я заметил, что она снова вызывается и снова обрабатывает уже обработанные записи.

Может ли кто-нибудь помочь мне понять стратегию вызова функции azure, если функция azure работает долгое время без какого-либо статуса, будет ли она выполнять обратный вызов?

если да, то как остановить этот обратный вызов, пока он не завершит свою обработку.


person Priyanka Mane    schedule 21.01.2020    source источник
comment
кажется, что тайм-аут является виновником stackoverflow.com/questions/50349161/   -  person Sajeetharan    schedule 21.01.2020
comment
Итак, если я перенесу обработку в асинхронную функцию и вызову ее без ожидания и отправлю HTTP-триггер с успешным ответом, решит ли это мою проблему?   -  person Priyanka Mane    schedule 21.01.2020
comment
Вы используете тарифный план для приложений. Но независимо от настройки тайм-аута приложения-функции 230 секунд - это максимальное время, в течение которого функция, запускаемая HTTP, может ответить на запрос. Это связано с тайм-аутом простоя по умолчанию для балансировщика нагрузки Azure. Для увеличения времени обработки рассмотрите возможность использования асинхронного шаблона Durable Functions или отложите фактическую работу и верните немедленный ответ.   -  person Bowman Zhu    schedule 21.01.2020


Ответы (1)


Предполагается, что функции должны быть недолговечными, они не должны работать долгое время. Сильной стороной функций является кратковременное выполнение с небольшой или переменной пропускной способностью.

По возможности реорганизуйте большие функции в более мелкие наборы функций, которые работают вместе и быстро возвращают ответы. Например, функция веб-перехватчика или триггера HTTP может потребовать ответа с подтверждением в течение определенного периода времени; веб-перехватчики часто требуют немедленного ответа. Вы можете передать полезную нагрузку триггера HTTP в очередь для обработки функцией триггера очереди. Такой подход позволяет отложить фактическую работу и немедленно получить ответ.

Взгляните на это:

https://docs.microsoft.com/en-us/azure/azure-functions/functions-best-practices#avoid-long-running-functions

С помощью Durable Functions вы можете легко поддерживать длительные процессы, применяя Async HTTP API. Если вы имеете дело с функциями, которым требуется некоторое время для обработки полезной нагрузки или запроса, правильным решением будет работа в рамках «Плана службы приложений, веб-задания или долговременных функций».

Как предлагает @Thiago Custodio, вам также необходимо разделить большие файлы на более мелкие и передать их действиям в рабочем процессе устойчивых функций.

person Bowman Zhu    schedule 21.01.2020
comment
отличный ответ. Всего одного момента, только переключением на долговечные функции недостаточно. Я рекомендую вам разделить большие файлы на более мелкие и передать их действиям в рабочем процессе устойчивых функций. - person Thiago Custodio; 21.01.2020