Функции Azure корректно закрывают существующие вызовы функций при развертывании нового приложения-функции? - PullRequest
0 голосов
/ 23 января 2019

Мне бы хотелось понять последствия развертывания нового выпуска приложения-функции Azure, поскольку оно связано с существующими вызовами / потоками функций. Я понимаю, что с такими фреймворками, как asp.net, были такие опции, как добавление app_office.htm в корень.

Как мы можем гарантировать, что мы не завершаем активные потоки и не позволяем приложению корректно завершить работу перед развертыванием?

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Опция 1: Изящное отключение достигается с помощью токенов отмены . Похоже, я не могу определить, что у вас есть льготный период после выдачи токена отмены: (

public static class AsyncExample
{
    [FunctionName("BlobCopy")]
    public static async Task RunAsync(
        [BlobTrigger("sample-images/{blobName}")] Stream blobInput,
        [Blob("sample-images-copies/{blobName}", FileAccess.Write)] Stream blobOutput,
        CancellationToken token,
        ILogger log)
    {
        log.LogInformation($"BlobCopy function processed.");
        await blobInput.CopyToAsync(blobOutput, 4096, token);
    }
}

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

Вариант 3 - использовать слоты развертывания и иметь слот Prod1 и Prod2 и альтернативное развертывание. Это позволит вам создать подход «сток-стоп», чтобы сохранить запущенные экземпляры до завершения. Вам по-прежнему нужно будет обрабатывать сбойные и неизвестные исключения с помощью долговременных функций или токена отмены.

Опция 4 - использовать два экземпляра приложения функций и использовать балансировщик нагрузки для управления трафиком между ними.

0 голосов
/ 23 января 2019

Да , если вы используете токен отмены.

Таким образом, по умолчанию, если ваш AF отключится, он уведомит потоки об отключении, если вы не используете токен отмены, тогда он будет ждать некоторое время (я не могу найти как долго) и уничтожать ваши потоки, даже если работа не завершено.

...