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


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

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

Масштабирование на основе целевых объектов заменяет предыдущую Функции 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.0Microsoft.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 можно также включить динамическое параллелизм. В этой конфигурации значение _target для каждого экземпляра определяется автоматически функцией динамического параллелизма. Он начинается с ограниченной параллелизма и определяет лучший параметр с течением времени.

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

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

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

Расширение служебная шина поддерживает три модели выполнения, определяемые и IsBatched атрибутами IsSessionsEnabled триггера служебная шина. Значение по умолчанию для 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
        }
    }
}

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

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

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

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

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

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

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

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

Event Hubs

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

Масштабирование поведения и стабильности

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

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

Допустимые счетчики экземпляров для центров событий

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

Число секций Допустимые счетчики экземпляров
1 [1]
2 [1, 2]
4 [1, 2, 4]
8 [1, 2, 3, 4, 8]
10 [1, 2, 3, 4, 5, 10]
16 [1, 2, 3, 4, 5, 6, 8, 16]
32 [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 16, 32]

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

Примечание.

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

Параметры Центров событий

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

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

{
    "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}");
}

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

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