Поделиться через


Масштабирование на основе целевого объекта

Масштабирование на основе целевого объекта обеспечивает быструю и интуитивно понятную модель масштабирования для клиентов и в настоящее время поддерживается для этих расширений привязки:

Масштабирование на основе целевых объектов заменяет предыдущую Функции Azure добавочную модель масштабирования в качестве стандартной для этих типов расширений. Добавочное масштабирование добавлено или удалено не более одного рабочего на каждом новом уровне экземпляра с сложными решениями о масштабировании. В отличие от этого, масштабирование на основе целевых объектов позволяет масштабировать четыре экземпляра одновременно, а решение масштабирования основано на простом целевом уравнении:

Иллюстрация уравнения: требуемые экземпляры = длина источника события или целевые выполнения на экземпляр.

В этом уравнении длина источника событий относится к числу событий, которые должны обрабатываться. Целевые выполнения по умолчанию для каждого экземпляра получены из пакетов SDK, используемых расширениями Функции Azure. Для работы масштабирования на основе целевых целей не требуется вносить никаких изменений.

Рекомендации

При использовании масштабирования на основе целевого объекта применяются следующие рекомендации.

  • Масштабирование на основе целевого объекта по умолчанию включено для приложений-функций в плане потребления, плане потребления Flex и планах Elastic Premium. Масштабирование на основе событий не поддерживается при выполнении выделенных планов (Служба приложений).
  • Масштабирование на основе целевого объекта по умолчанию включено начиная с версии 4.19.0 среды выполнения Функций.
  • При использовании масштабирования на основе целевого объекта ограничения масштабирования по-прежнему учитываются. Дополнительные сведения см. в разделе "Ограничение масштабирования".
  • Чтобы добиться максимально точного масштабирования на основе метрик, используйте только одну целевую активируемую функцию для каждого приложения-функции. Кроме того, следует рассмотреть возможность работы в плане потребления Flex, который предлагает масштабирование для каждой функции.
  • Если несколько функций в одном приложении-функции запрашивают горизонтальное масштабирование одновременно, сумма между этими функциями используется для определения изменения в нужных экземплярах. Функции, запрашивающие горизонтальное масштабирование переопределения функций, запрашивающих масштабирование.
  • При наличии масштабируемых запросов без каких-либо запросов горизонтального масштабирования используется максимальное значение.

Отказ

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

Параметр приложения Значение
TARGET_BASED_SCALING_ENABLED 0

Настройка масштабирования на основе целевого объекта

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

В этой таблице перечислены host.json значения, которые используются для целевых выполнений для значений экземпляра и значений по умолчанию:

Расширение host.json значения Значение по умолчанию
Центры событий (расширение версии 5.x+) extensions.eventHubs.maxEventBatchSize 100*
Центры событий (расширение версии 3.x+) extensions.eventHubs.eventProcessorOptions.maxBatchSize 10
Центры событий (если определено) extensions.eventHubs.targetUnprocessedEventThreshold Н/Д
служебная шина (расширение версии 5.x+, одна диспетчеризация) extensions.serviceBus.maxConcurrentCalls 16
служебная шина (расширение версии 5.x+, на основе отдельных сеансов отправки) extensions.serviceBus.maxConcurrentSessions 8
служебная шина (расширение версии 5.x+, пакетная обработка) extensions.serviceBus.maxMessageBatchSize 1000
служебная шина (Функции версии 2.x+, одна отправка) extensions.serviceBus.messageHandlerOptions.maxConcurrentCalls 16
служебная шина (Функции версии 2.x+, на основе отдельных сеансов отправки) extensions.serviceBus.sessionHandlerOptions.maxConcurrentSessions 2000
служебная шина (Функции версии 2.x+, пакетная обработка) extensions.serviceBus.batchOptions.maxMessageCount 1000
Очередь хранилища extensions.queues.batchSize 16

* Значение по умолчанию maxEventBatchSize изменилось в версии 6.0.0 Microsoft.Azure.WebJobs.Extensions.EventHubs пакета. В более ранних версиях это значение равно 10.

Для некоторых расширений привязки целевые выполнения для каждого экземпляра задаются с помощью атрибута функции:

Расширение Параметр триггера функции Значение по умолчанию
Apache Kafka lagThreshold 1000
Azure Cosmos DB maxItemsPerInvocation 100

Дополнительные сведения см. в примерах конфигураций поддерживаемых расширений.

План "Премиум" с включенным мониторингом масштабирования среды выполнения

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

Имя расширения Минимальная версия, необходимая
Apache Kafka 3.9.0
Azure Cosmos DB 4.1.0
Event Hubs 5.2.0
Cлужебная шина 5.9.0
Очередь хранилища 5.1.0

Поддержка динамического параллелизма

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

Поддерживаемые расширения

Способ настройки масштабирования на основе целевого объекта в файле host.json зависит от конкретного типа расширения. В этом разделе приведены сведения о конфигурации расширений, которые в настоящее время поддерживают масштабирование на основе целевого объекта.

Очереди и разделы служебной шины Azure

Расширение служебная шина поддерживает три модели выполнения, определяемые и IsSessionsEnabled атрибутами IsBatched триггера служебная шина. Значение по умолчанию для IsBatched и IsSessionsEnabled имеет значение false.

Модель выполнения IsBatched IsSessionsEnabled Настройка, используемая для целевых выполнений для каждого экземпляра
Одноразовая обработка отправки false false maxConcurrentCalls
Единая обработка диспетчера (на основе сеансов) false true maxConcurrentSessions
Пакетная обработка true false maxMessageBatchSize или maxMessageCount

Примечание.

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

Одноразовая обработка отправки

В этой модели каждый вызов функции обрабатывает одно сообщение. Параметр maxConcurrentCalls управляет целевыми выполнениями на экземпляр. Конкретный параметр зависит от версии расширения служебная шина.

Измените host.json параметр maxConcurrentCalls, как показано в следующем примере:

{
    "version": "2.0",
    "extensions": {
        "serviceBus": {
            "maxConcurrentCalls": 16
        }
    }
}

Единая обработка диспетчера (на основе сеансов)

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

Измените параметрmaxConcurrentSessions, чтобы задать целевые host.json выполнения для каждого экземпляра, как показано в следующем примере:

{
    "version": "2.0",
    "extensions": {
        "serviceBus": {
            "maxConcurrentSessions": 8
        }
    }
}

Пакетная обработка

В этой модели каждый вызов функции обрабатывает пакет сообщений. Конкретный параметр зависит от версии расширения служебная шина.

Измените параметрmaxMessageBatchSize, чтобы задать целевые host.json выполнения для каждого экземпляра, как показано в следующем примере:

{
    "version": "2.0",
    "extensions": {
        "serviceBus": {
            "maxMessageBatchSize": 1000
        }
    }
}

Event Hubs

Для Центры событий Azure масштабируется Функции Azure на основе количества необработанных событий, распределенных по всем секциям в концентраторе событий. По умолчанию атрибуты, используемые для целевых выполнений для каждого экземпляра, host.json и maxEventBatchSize maxBatchSize. Однако если вы решили точно настроить масштабирование на основе целевого объекта, можно определить отдельный параметр targetUnprocessedEventThreshold , переопределяющий задание целевых выполнений на экземпляр без изменения параметров пакетной службы. Если targetUnprocessedEventThreshold задано, общее количество необработанных событий делится на это значение, чтобы определить количество экземпляров, которое затем округляется до числа рабочих экземпляров, создающих сбалансированное распределение секций.

Примечание.

Так как Центры событий — это секционированная рабочая нагрузка, число целевых экземпляров для Центров событий ограничивается количеством секций в концентраторе событий.

Конкретный параметр зависит от версии расширения Центров событий.

Измените параметрmaxEventBatchSize, чтобы задать целевые host.json выполнения для каждого экземпляра, как показано в следующем примере:

{
    "version": "2.0",
    "extensions": {
        "eventHubs": {
            "maxEventBatchSize" : 100
        }
    }
}

При определении в host.jsonкачестве targetUnprocessedEventThreshold целевых выполнений для каждого экземпляра maxEventBatchSize используется, как показано в следующем примере:

{
    "version": "2.0",
    "extensions": {
        "eventHubs": {
            "targetUnprocessedEventThreshold": 153
        }
    }
}

Очереди службы хранилища

Для расширения хранилища версии 2.x+ измените host.json параметр batchSize , чтобы задать целевые выполнения для каждого экземпляра:

{
    "version": "2.0",
    "extensions": {
        "queues": {
            "batchSize": 16
        }
    }
}

Примечание.

Эффективность масштабирования. Для расширения очереди хранилища сообщения с видимостьюTimeout по-прежнему учитываются в исходной длине событий API очереди хранилища. Это может привести к чрезмерному масштабированию приложения-функции. Рассмотрите возможность использования служебная шина очередей que запланированных сообщений, ограничения масштабирования или не использования видимостиTimeout для вашего решения.

Azure Cosmos DB

Azure Cosmos DB использует атрибут уровня функции. MaxItemsPerInvocation Способ установки этого атрибута уровня функции зависит от языка функции.

Для скомпилированной функции C# задайте MaxItemsPerInvocation в определении триггера, как показано в следующих примерах для функции C# в процессе:

namespace CosmosDBSamplesV2
{
    public static class CosmosTrigger
    {
        [FunctionName("CosmosTrigger")]
        public static void Run([CosmosDBTrigger(
            databaseName: "ToDoItems",
            collectionName: "Items",
            MaxItemsPerInvocation: 100,
            ConnectionStringSetting = "CosmosDBConnection",
            LeaseCollectionName = "leases",
            CreateLeaseCollectionIfNotExists = true)]IReadOnlyList<Document> documents,
            ILogger log)
        {
            if (documents != null && documents.Count > 0)
            {
                log.LogInformation($"Documents modified: {documents.Count}");
                log.LogInformation($"First document Id: {documents[0].Id}");
            }
        }
    }
}

Примечание.

Так как Azure Cosmos DB — это секционированная рабочая нагрузка, число целевых экземпляров для базы данных ограничивается количеством физических секций в контейнере. Дополнительные сведения о масштабировании Azure Cosmos DB см. в разделах физической секции и собственности на аренду.

Apache Kafka

Расширение Apache Kafka использует атрибут LagThresholdуровня функции. Для Kafka количество требуемых экземпляров вычисляется на основе общего задержки потребителей, разделенных LagThreshold на параметр. Для заданной задержки снижение порогового значения задержки увеличивает количество требуемых экземпляров.

Способ установки этого атрибута уровня функции зависит от языка функции. В этом примере задано пороговое значение 100.

Для скомпилированной функции C# задайте LagThreshold в определении триггера, как показано в следующих примерах для функции C# в процессе для триггера Центров событий Kafka:

[FunctionName("KafkaTrigger")]
public static void Run(
    [KafkaTrigger("BrokerList",
                  "topic",
                  Username = "$ConnectionString",
                  Password = "%EventHubConnectionString%",
                  Protocol = BrokerProtocol.SaslSsl,
                  AuthenticationMode = BrokerAuthenticationMode.Plain,
                  ConsumerGroup = "$Default",
                  LagThreshold = 100)] KafkaEventData<string> kevent, ILogger log)
{            
    log.LogInformation($"C# Kafka trigger function processed a message: {kevent.Value}");
}

Следующие шаги

Дополнительные сведения см. в следующих разделах: