Необъяснимые транзакции хранения от Azure Функции - PullRequest
6 голосов
/ 07 февраля 2020

У меня есть проект с парой. NET Основан на ядре Azure Функции выполняются по расписанию. Один из них запускается каждые 10 минут и служит для обновления счетчиков просмотров, аналогично тому, как SO отслеживает представления вопросов, а другой отправляет электронные письма раз в неделю. Эти функции работали в течение года или около того. Я недавно обновил их, чтобы использовать Azure Функции SDK v3 и Azure Функции времени выполнения v3, а также. NET Core 3.1 (в основном перешел с. NET Core 2.1 на. NET Core 3.1, поэтому мне нужно было обновить время выполнения функций).

В какой-то момент я получил счет намного выше, чем обычно. Оказывается, функции, которые совместно используют одну и ту же базовую учетную запись хранения, начали совершать МНОГО API-транзакций в хранилище. Как много тысяч каждые 5 минут. Обычно каждый прогон генерирует около 100 транзакций хранения (возможно, получение функциональных файлов?), Но в какой-то момент транзакции резко скачут. После перезапуска функций транзакция сбрасывается до нормального состояния, и в течение нескольких дней все становится нормальным, затем они снова прыгают и остаются высокими до перезапуска.

Код функций не был изменен при обновлении только SDK и среды выполнения. Код функции имеет постоянное количество записей журнала (например, 7) через предоставленный SDK регистратор и не взаимодействует с хранилищем каким-либо другим способом.

У меня есть две идентичные среды: одна для тестирования и одна для производства и у обоих одна и та же проблема. Интервал, который требуется для функции до go rogue, составляет пару дней, но, кажется, каждый раз отличается. Однако, если я перезапущу одновременно и тестирование, и производство, то следующий всплеск произойдет одновременно в обеих средах, так что там будет что-то определенное c.

Согласно моему исследованию с помощью инструмента "Метрики", типы транзакций, вызывающих сбой, - это Создать. , Закрыть и ChangeNotify с некоторыми Отмена (но меньше, чем другие). Хранилище не используется ни для чего другого (на самом деле оно существует только потому, что Azure функциям требуется резервное хранилище для хранения своих файлов или чего-либо еще)

Вот код триггера на тот случай, если он уместен

[FunctionName("ViewCountUpdater")]
public static async Task RunAsync([TimerTrigger("0 */10 * * * *"/*, RunOnStartup = true*/)]TimerInfo timer, ILogger log, ExecutionContext context)

Мне кажется, что я столкнулся с ошибкой во время выполнения Azure функций или Azure функций. NET Core SDK. Кто-нибудь испытывал это или знает, как обойти это?

Ответы [ 2 ]

2 голосов
/ 07 февраля 2020

У вас есть AzureWebJobsDashboard включен? Если да, вы должны отключить его (удалить строку подключения в настройках приложения) и переключиться на понимание приложения. Известно, что этот параметр вызывает неожиданные записи в хранилище, которые не могут быть должным образом объяснены.

https://github.com/Azure/Azure-Functions/issues/832

1 голос
/ 16 апреля 2020

После нескольких недель расследования команда поддержки Azure и, я думаю, мы нашли строку, которая вызывает проблему, и вот она:

.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)

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

  • Почему ошибка возникает вообще
  • Это регрессия в. NET В ядре или во время выполнения функций?
  • Почему ошибка возникает случайно, а не при каждом запуске?

Обратите внимание, что для тестирования требуется время, так как мне приходится ждать дни в течение случайного скачка, и я никогда не могу быть уверен, что он исчез навсегда, поэтому я не 100% уверены, что в какой-то момент в будущем всплеск не повторится, и выяснится, что проблема была в другом.

...