Иногда моя функция занимает много времени для выполнения - PullRequest
2 голосов
/ 22 сентября 2019

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

Однако у меня были некоторые опасения по поводу времени.Моя функция запускается по протоколу http, она вызывается другим приложением.Большую часть времени выполнения составляет ~ 1сек, что здорово.Иногда я не знаю, почему выполнение той же функции занимает до 30 секунд.Это нормально?Может быть, холодный старт?Или это я что-то не так делаю?Я новичок, поэтому я хотел бы получить мнение экспертов.Я использую план потребления в ш.Европа.

К сожалению, для этого приложения что-либо> 4 сек неприемлемо, потому что это вызовет ошибку в вызывающем абоненте, отображаемую в свою очередь конечному пользователю.

Здесь вы можете увидеть снимок экранаЖурналы с таймингами, посмотрите внизу, какие сумасшедшие медленные времена.

Есть ли способ обеспечить синхронизацию всегда в течение 4 секунд?

enter image description here

Ответы [ 3 ]

1 голос
/ 22 сентября 2019

Такой большой разброс не ожидается при холодном старте.Обычно холодный старт составляет около 2-5 секунд и должен происходить только в том случае, если длительный период не вызывается.Также измерение здесь просто время выполнения и не включает время запуска.Я бы порекомендовал заглянуть в журналы и добавить следы, чтобы увидеть, есть ли строка кода, на которой он висит.

0 голосов
/ 23 сентября 2019

Я считаю, что размер встроенной переменной и встроенная функция являются двумя из лучших способов сократить время выполнения / запуска, но я согласен, что это звучит слишком долго.

Здесь перечислены еще несколько техник: https://www.rapitasystems.com/software_optimization_techniques_18

0 голосов
/ 22 сентября 2019

Первый шаг - понять, что происходит, когда вы достигаете одной Azure Function конечной точки, шаг за шагом:

  1. Azure должен назначить ваше приложение серверу с емкостью,
  2. .Затем на этом сервере должна запускаться среда выполнения функций,
  3. Затем необходимо выполнить ваш код.

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

Я думаю, что ответ связан с холодным стартом, следующее изображение представляет, что происходит, когда вы запускаете конечную точку приложения функции (Источник: Понимание холодного запуска без сервера ):

enter image description here

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

Когда вы используете Премиум-план, экземпляры узла Azure Functions добавляются и удаляются на основеколичество входящих событий так же, как план потребления.Премиум план поддерживает следующие функции: Постоянно теплые экземпляры, чтобы избежать холодного старта

Подробнее об этом можно прочитать: Премиум план (превью)

Дополнительная информация:

Будьте осторожны с упомянутым вариантом, потому что цены могут отличаться в зависимости от следующих факторов:

Вместо выставления счетов за выполнениеи израсходованная память, выставление счетов для плана Premium основано на количестве основных секунд, времени выполнения и памяти, используемой в необходимых и зарезервированных экземплярах.По крайней мере, один экземпляр должен быть всегда теплым.Это означает, что существует фиксированная ежемесячная стоимость за активный план, независимо от количества выполнений.

Я бы рассмотрел хотя бы в целях тестирования вышеупомянутый вариант, надеюсь, ответ поможет и даст вамидея, почему у вас медленный запуск.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...