У меня есть проект с парой функций Azure на основе .NET Core, работающих по расписанию. Один из них запускается каждые 10 минут и служит для обновления количества просмотров, аналогично тому, как SO отслеживает просмотры вопросов, а другой отправляет электронные письма раз в неделю. Эти функции работали нормально около года. Недавно я обновил их для использования Azure Functions SDK v3 и среды выполнения Azure Functions v3, а также .NET Core 3.1 (в основном перешел с .NET Core 2.1 на .NET Core 3.1, поэтому мне нужно было обновить среду выполнения функций).
В какой-то момент я получил счет намного выше, чем обычно. Оказывается, функции, которые используют одну и ту же базовую учетную запись хранилища, начали делать МНОГО транзакций API в хранилище. Как и многие тысячи каждые 5 минут. Обычно каждый запуск генерирует около 100 транзакций хранения (возможно, получение файлов функций?), Но в какой-то момент транзакции резко подскочили. После перезапуска функций транзакция возвращается в нормальное состояние, и в течение нескольких дней все работает нормально, затем они снова скачут и остаются на высоком уровне до перезапуска.
Код функций не был изменен с обновлением только SDK и среды выполнения. Код функции имеет постоянное количество записей в журнал (например, 7) через регистратор, предоставляемый SDK, и никаким другим образом не взаимодействует с хранилищем.
У меня есть две идентичные среды: одна для тестирования, а другая - для производства, и обе имеют одну и ту же проблему. Интервал, который требуется для того, чтобы функция сработала, составляет пару дней, но каждый раз кажется, что она разная. Однако, если я перезапускаю и тестирование, и производство одновременно, следующий всплеск произойдет одновременно в обеих средах, так что там есть что-то детерминированное.
Согласно моему исследованию с помощью инструмента Metrics, типами транзакций-нарушителей являются Create, Close и ChangeNotify с некоторыми отменами (но реже, чем другие). Хранилище не используется ни для чего другого (на самом деле оно существует только потому, что Функциям Azure требуется резервное хранилище для хранения файлов или чего-то еще).
Вот код триггера, если он актуален
[FunctionName("ViewCountUpdater")]
public static async Task RunAsync([TimerTrigger("0 */10 * * * *"/*, RunOnStartup = true*/)]TimerInfo timer, ILogger log, ExecutionContext context)
Я считаю, что обнаружил ошибку в среде выполнения функций Azure или в пакете SDK .NET Core для функций Azure. Кто-нибудь испытал это или знает, как это обойти?