Масштабирование на основе целевого объекта
Масштабирование на основе целевого объекта обеспечивает быструю и интуитивно понятную модель масштабирования для клиентов и в настоящее время поддерживается для этих расширений привязки:
- Apache Kafka
- Azure Cosmos DB
- Центры событий Azure
- Хранилище очередей Azure
- Служебная шина Azure (очередь и разделы)
Масштабирование на основе целевых объектов заменяет предыдущую Функции 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}");
}
Следующие шаги
Дополнительные сведения см. в следующих разделах: