Масштабирование и размещение Функций AzureAzure Functions scale and hosting

При создании приложения-функции в Azure необходимо выбрать план размещения для приложения.When you create a function app in Azure, you must choose a hosting plan for your app. Для функций Azure доступны три плана размещения: план потребления, план Premiumи план службы приложений.There are three hosting plans available for Azure Functions: Consumption plan, Premium plan, and App Service plan.

Выбранный план размещения определяет следующие варианты поведения:The hosting plan you choose dictates the following behaviors:

  • Как масштабируется приложение-функция.How your function app is scaled.
  • Ресурсы, доступные для каждого экземпляра приложения функции.The resources available to each function app instance.
  • Поддержка дополнительных функций, таких как подключение к виртуальной сети.Support for advanced features, such as VNET connectivity.

Планы потребления и Premium автоматически добавляют мощность вычислений при выполнении кода.Both Consumption and Premium plans automatically add compute power when your code is running. Приложение масштабируется при необходимости для его загрузки и масштабирования при остановке выполнения кода.Your app is scaled out when needed to handle load, and scaled down when code stops running. Для плана потребления также не нужно платить за бездействующие виртуальные машины или резервировать емкость заранее.For the Consumption plan, you also don't have to pay for idle VMs or reserve capacity in advance.

План Premium предоставляет дополнительные функции, такие как экземпляры вычислений Premium, возможность непрерывного сохранения экземпляров и подключения к виртуальной сети.Premium plan provides additional features, such as premium compute instances, the ability to keep instances warm indefinitely, and VNet connectivity.

План службы приложений позволяет воспользоваться преимуществами выделенной инфраструктуры, которыми вы управляете.App Service plan allows you to take advantage of dedicated infrastructure, which you manage. Приложение-функция не масштабируется на основе событий, то есть никогда не масштабируется до нуля.Your function app doesn't scale based on events, which means is never scales down to zero. (Требует включения Always on .)(Requires that Always on is enabled.)

Поддержка планов размещенияHosting plan support

Поддержка функций делится на две следующие категории:Feature support falls into the following two categories:

  • _Общедоступная_версия: полностью поддерживается и утверждено для использования в рабочей среде.Generally available (GA): fully supported and approved for production use.
  • Предварительная версия: пока не полностью поддерживается и не утверждена для использования в рабочей среде.Preview: not yet fully supported and approved for production use.

В следующей таблице указывается текущий уровень поддержки для трех планов размещения при работе в Windows или Linux:The following table indicates the current level of support for the three hosting plans, when running on either Windows or Linux:

План потребленияConsumption plan План "Премиум"Premium plan Выделенный планDedicated plan
WindowsWindows Общая доступностьGA Общая доступностьGA Общая доступностьGA
LinuxLinux Общая доступностьGA Общая доступностьGA Общая доступностьGA

План потребленияConsumption plan

Если вы используете план потребления, экземпляры узла функций Azure динамически добавляются и удаляются в зависимости от числа входящих событий.When you're using the Consumption plan, instances of the Azure Functions host are dynamically added and removed based on the number of incoming events. Этот бессерверный план автоматически масштабируется, и вы платите за вычислительные ресурсы только тогда, когда ваши функции запущены.This serverless plan scales automatically, and you're charged for compute resources only when your functions are running. В плане потребления функция должна выполняться в течение настроенного времени (время ожидания).On a Consumption plan, a function execution times out after a configurable period of time.

Плата начисляется на основе числа операций выполнения, времени выполнения и объема использованной памяти.Billing is based on number of executions, execution time, and memory used. Плата начисляется совокупно за использование всех функций приложения-функции.Billing is aggregated across all functions within a function app. Дополнительные сведения см. на странице цен на Функции Azure.For more information, see the Azure Functions pricing page.

План потребления является планом размещения по умолчанию. Он включает следующие преимущества:The Consumption plan is the default hosting plan and offers the following benefits:

  • вы платите, только если функции выполняются;Pay only when your functions are running
  • масштабирование выполняется автоматически, даже во время периодов высокой нагрузки.Scale out automatically, even during periods of high load

Приложениям функций в одном регионе можно назначить один и тот же план потребления.Function apps in the same region can be assigned to the same Consumption plan. Отсутствие недостатка или влияния на наличие нескольких приложений, работающих в одном плане потребления.There's no downside or impact to having multiple apps running in the same Consumption plan. Назначение нескольких приложений одному плану потребления не влияет на устойчивость, масштабируемость и надежность каждого приложения.Assigning multiple apps to the same consumption plan has no impact on resilience, scalability, or reliability of each app.

Дополнительные сведения об оценке затрат при работе в плане потребления см. в разделе Основные сведения о затратах на план потребления.To learn more about how to estimate costs when running in a Consumption plan, see Understanding Consumption plan costs.

План PremiumPremium plan

При использовании плана Premium экземпляры узла функций Azure добавляются и удаляются в зависимости от числа входящих событий, как в плане потребления.When you're using the Premium plan, instances of the Azure Functions host are added and removed based on the number of incoming events just like the Consumption plan. План Premium поддерживает следующие функции:Premium plan supports the following features:

  • Бессрочные экземпляры, чтобы избежать холодного запускаPerpetually warm instances to avoid any cold start
  • Подключение виртуальных сетейVNet connectivity
  • Неограниченная длительность выполненияUnlimited execution duration
  • Размеры экземпляров класса Premium (одно ядро, два ядра и четыре основных экземпляра)Premium instance sizes (one core, two core, and four core instances)
  • Более прогнозируемые ценыMore predictable pricing
  • Распределение приложений с высокой плотностью для планов с несколькими приложениями-функциямиHigh-density app allocation for plans with multiple function apps

Сведения о том, как можно настроить эти параметры, можно найти в документе план функций Azure Premium.Information on how you can configure these options can be found in the Azure Functions premium plan document.

Вместо выставления счетов за выполнение и потребление памяти, выставление счетов за план Premium зависит от количества ядер и объема памяти, используемых в необходимых и предварительно занятых экземплярах.Instead of billing per execution and memory consumed, billing for the Premium plan is based on the number of core seconds and memory used across needed and pre-warmed instances. По крайней мере, один экземпляр должен быть горячий на каждый план времени.At least one instance must be warm at all times per plan. Это означает, что для каждого активного плана существует минимальная ежемесячная стоимость, независимо от числа выполнений.This means that there is a minimum monthly cost per active plan, regardless of the number of executions. Помните, что все приложения-функции в плане Premium имеют предварительно заданный и активный экземпляры.Keep in mind that all function apps in a Premium plan share pre-warmed and active instances.

Рассмотрим план функций Azure уровня "Премиум" в следующих ситуациях.Consider the Azure Functions premium plan in the following situations:

  • Приложения-функции выполняются непрерывно или почти непрерывно.Your function apps run continuously, or nearly continuously.
  • У вас большое количество небольших выполнений и у вас высокий счет за использование, но не менее ГБ второго счета в плане потребления.You have a high number of small executions and have a high execution bill but low GB second bill in the consumption plan.
  • Требуется больше параметров ЦП или памяти, чем предоставлено планом потребления.You need more CPU or memory options than what is provided by the Consumption plan.
  • Код должен выполняться дольше, чем Максимальное время выполнения, разрешенное в плане потребления.Your code needs to run longer than the maximum execution time allowed on the Consumption plan.
  • Требуются функции, доступные только в плане Premium, например подключение к виртуальной сети или VPN.You require features that are only available on a Premium plan, such as VNET/VPN connectivity.

При выполнении функций JavaScript в плане Premium следует выбрать экземпляр с меньшим числом виртуальных ЦП.When running JavaScript functions on a Premium plan, you should choose an instance that has fewer vCPUs. Дополнительные сведения см. в статье Выбор одноядерных планов Premium.For more information, see the Choose single-core Premium plans.

Выделенный план (служба приложений)Dedicated (App Service) plan

Приложения-функции также могут выполняться на тех же выделенных виртуальных машинах, что и другие приложения службы приложений (базовый, Стандартный, премиум и изолированный SKU).Your function apps can also run on the same dedicated VMs as other App Service apps (Basic, Standard, Premium, and Isolated SKUs).

Рассмотрим план службы приложений в следующих ситуациях.Consider an App Service plan in the following situations:

  • У вас есть неиспользуемые виртуальные машины, в которых уже запущены другие экземпляры служб приложений.You have existing, underutilized VMs that are already running other App Service instances.
  • Необходимо предоставить пользовательский образ для выполнения функций.You want to provide a custom image on which to run your functions.

Вы оплачиваете те же функции для приложений-функций в плане службы приложений, что и для других ресурсов службы приложений, таких как веб-приложения.You pay the same for function apps in an App Service Plan as you would for other App Service resources, like web apps. Дополнительную информацию о том, как действует план службы приложений, см. в статье Подробный обзор планов службы приложений Azure.For details about how the App Service plan works, see the Azure App Service plans in-depth overview.

С помощью плана службы приложений можно вручную выполнить масштабирование, добавив дополнительные экземпляры виртуальных машин.With an App Service plan, you can manually scale out by adding more VM instances. Также можно включить Автомасштабирование.You can also enable autoscale. Дополнительные сведения см. в статье Масштабирование числа экземпляров вручную или автоматически.For more information, see Scale instance count manually or automatically. Вы можете также увеличивать масштаб, используя разные планы службы приложений.You can also scale up by choosing a different App Service plan. Дополнительные сведения см. в статье Увеличение масштаба приложения в Azure.For more information, see Scale up an app in Azure.

При запуске функций JavaScript в плане службы приложений нужно выбрать план с меньшим количеством виртуальных ЦП.When running JavaScript functions on an App Service plan, you should choose a plan that has fewer vCPUs. Дополнительные сведения см. в статье Выбор планов службы приложений с одним ядром.For more information, see Choose single-core App Service plans.

Always OnAlways On

При использовании плана службы приложений следует включить параметр Всегда включено, чтобы ваше приложение-функция выполнялось правильно.If you run on an App Service plan, you should enable the Always on setting so that your function app runs correctly. В плане службы приложений среда выполнения функции переходит в состояние бездействия через несколько минут отсутствия активности, поэтому только триггеры HTTP могут на самом деле "пробудить" ваши функции.On an App Service plan, the functions runtime goes idle after a few minutes of inactivity, so only HTTP triggers will "wake up" your functions. Параметр "Всегда включено" доступен только для плана службы приложений.Always on is available only on an App Service plan. В плане потребления платформа активирует приложения-функции автоматически.On a Consumption plan, the platform activates function apps automatically.

Длительность ожидания приложения-функцииFunction app timeout duration

Длительность времени ожидания для приложения-функции определяется свойством Функтионтимеаут в файле проекта Host. JSON .The timeout duration of a function app is defined by the functionTimeout property in the host.json project file. В следующей таблице показаны значения по умолчанию и максимальное значение в минутах для обоих планов и в обеих версиях среды выполнения:The following table shows the default and maximum values in minutes for both plans and in both runtime versions:

ПланPlan Версия среды выполненияRuntime Version значение по умолчаниюDefault МаксимальнаяMaximum
ПотреблениеConsumption 1.x1.x 55 1010
ПотреблениеConsumption 2.x2.x 55 1010
ПотреблениеConsumption 3.x3.x 55 1010
App ServiceApp Service 1.x1.x НеограниченнаяUnlimited НеограниченнаяUnlimited
App ServiceApp Service 2.x2.x 3030 НеограниченнаяUnlimited
App ServiceApp Service 3.x3.x 3030 НеограниченнаяUnlimited

Примечание

Независимо от параметра времени ожидания приложения-функции 230 секунд — это максимальное время, которое функция, активируемая HTTP, может реагировать на запрос.Regardless of the function app timeout setting, 230 seconds is the maximum amount of time that an HTTP triggered function can take to respond to a request. Это связано с тем, что время ожидания простоя по умолчанию Azure Load Balancer.This is because of the default idle timeout of Azure Load Balancer. Для более длительной обработки можно использовать шаблон асинхронного устойчивые функции или отложить фактическую работу и вернуть немедленный ответ.For longer processing times, consider using the Durable Functions async pattern or defer the actual work and return an immediate response.

Даже с включенным параметром "Всегда включено" время ожидания выполнения для отдельных функций управляется с помощью параметра functionTimeout в файле проекта host.json.Even with Always On enabled, the execution timeout for individual functions is controlled by the functionTimeout setting in the host.json project file.

Определение плана размещения существующего приложенияDetermine the hosting plan of an existing application

Чтобы определить план размещения, используемый приложением-функцией, на портале Azure просмотрите для приложения-функции раздел План службы приложений/ценовая категория на вкладке Обзор.To determine the hosting plan used by your function app, see App Service plan / pricing tier in the Overview tab for the function app in the Azure portal. Для планов службы приложений также указывается ценовая категория.For App Service plans, the pricing tier is also indicated.

Просмотр плана масштабирования на портале

Для определения плана можно также использовать Azure CLI, как показано ниже:You can also use the Azure CLI to determine the plan, as follows:

appServicePlanId=$(az functionapp show --name <my_function_app_name> --resource-group <my_resource_group> --query appServicePlanId --output tsv)
az appservice plan list --query "[?id=='$appServicePlanId'].sku.tier" --output tsv

Если в результате выполнения команды возвращается значение dynamic, ваше приложение-функция находится в плане потребления.When the output from this command is dynamic, your function app is in the Consumption plan. Когда выходные данные этой команды ElasticPremium, приложение-функция находится в плане Premium.When the output from this command is ElasticPremium, your function app is in the Premium plan. Все остальные значения указывают на различные уровни плана службы приложений.All other values indicate different tiers of an App Service plan.

Требования к учетной записи храненияStorage account requirements

В любом плане для приложения-функции требуется общая учетная запись хранения Azure, которая поддерживает хранилище больших двоичных объектов, очередей, файлов и таблиц Azure.On any plan, a function app requires a general Azure Storage account, which supports Azure Blob, Queue, Files, and Table storage. Это связано с тем, что Функции Azure используют службу хранилища Azure для таких операций, как управление триггерами и ведение журнала выполнения функций, но некоторые учетные записи хранения не поддерживают очереди и таблицы.This is because Functions relies on Azure Storage for operations such as managing triggers and logging function executions, but some storage accounts do not support queues and tables. Эти учетные записи, которые включают учетные записи хранения только для больших двоичных объектов (включая хранилище класса Premium) и учетные записи хранения общего назначения с репликацией ZRS, отфильтровываются на основе выбранных вариантов учетной записи хранения при создании приложения-функции.These accounts, which include blob-only storage accounts (including premium storage) and general-purpose storage accounts with zone-redundant storage replication, are filtered-out from your existing Storage Account selections when you create a function app.

Одна и та же учетная запись хранения, используемая приложением функции, может также использоваться триггерами и привязками для хранения данных приложения.The same storage account used by your function app can also be used by your triggers and bindings to store your application data. Однако для операций с интенсивным хранением данных следует использовать отдельную учетную запись хранения.However, for storage-intensive operations, you should use a separate storage account.

Дополнительные сведения о типах учетных записей хранилища см. в разделе Введение в службы хранилища Azure.To learn more about storage account types, see Introducing the Azure Storage services.

Как работают планы потребления и PremiumHow the consumption and premium plans work

В планах потребления и Premium инфраструктура функций Azure масштабирует ресурсы ЦП и памяти, добавляя дополнительные экземпляры узла функций в зависимости от числа событий, на которые запускаются функции.In the consumption and premium plans, the Azure Functions infrastructure scales CPU and memory resources by adding additional instances of the Functions host, based on the number of events that its functions are triggered on. Каждый экземпляр узла функций в плане потребления ограничен 1,5 ГБ памяти и одним ЦП.Each instance of the Functions host in the consumption plan is limited to 1.5 GB of memory and one CPU. Экземпляром узла является полное приложение-функция, означающее, что все функции в приложении-функции совместно используют ресурс в экземпляре и масштабируются в то же время.An instance of the host is the entire function app, meaning all functions within a function app share resource within an instance and scale at the same time. Приложения функций, которые используют один и тот же план потребления, масштабируются независимо друг от друга.Function apps that share the same consumption plan are scaled independently. В плане "Премиум" Размер плана определит доступную память и ЦП для всех приложений в этом плане на этом экземпляре.In the premium plan, your plan size will determine the available memory and CPU for all apps in that plan on that instance.

Файлы кода функции хранятся в общих папках службы файлов Azure в основной учетной записи хранения функции.Function code files are stored on Azure Files shares on the function's main storage account. При удалении основной учетной записи хранения приложения-функции, файлы кода функции будут удалены без возможности восстановления.When you delete the main storage account of the function app, the function code files are deleted and cannot be recovered.

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

Решение "Функции Azure" использует компонент, называемый контроллером масштабирования, чтобы отслеживать скорость событий и определять, необходимо ли выполнять масштабирование.Azure Functions uses a component called the scale controller to monitor the rate of events and determine whether to scale out or scale in. Контроллер масштабирования использует эвристику для каждого типа триггеров.The scale controller uses heuristics for each trigger type. Например, при использовании триггера хранилища очередей Azure масштабирование выполняется в зависимости от длины запроса и возраста самого старого сообщения в очереди.For example, when you're using an Azure Queue storage trigger, it scales based on the queue length and the age of the oldest queue message.

Единицей масштабирования для функций Azure является приложение-функция.The unit of scale for Azure Functions is the function app. При масштабировании приложения-функции выделяются дополнительные ресурсы для выполнения нескольких экземпляров узла службы "Функции Azure".When the function app is scaled out, additional resources are allocated to run multiple instances of the Azure Functions host. И наоборот, когда потребность в вычислительных ресурсах уменьшается, контроллер масштабирования удаляет экземпляры узла функции.Conversely, as compute demand is reduced, the scale controller removes function host instances. Число экземпляров в конечном итоге масштабируется до нуля, если в приложении-функции не выполняются никакие функции.The number of instances is eventually scaled in to zero when no functions are running within a function app.

Мониторинг событий и создание экземпляров с помощью контроллера масштабирования

Основные сведения о действиях при масштабированииUnderstanding scaling behaviors

Масштабирование может зависеть от ряда факторов и выполняться по-разному в зависимости от выбранного триггера и языка.Scaling can vary on a number of factors, and scale differently based on the trigger and language selected. Существует несколько тонкостей поведения масштабирования, которые следует учитывать:There are a few intricacies of scaling behaviors to be aware of:

  • Отдельное приложение-функция масштабируется максимум до 200 экземпляров.A single function app only scales up to a maximum of 200 instances. Один экземпляр может обрабатывать одновременно более одного сообщения или запроса, поэтому для количества одновременных выполнений не установлено ограничение.A single instance may process more than one message or request at a time though, so there isn't a set limit on number of concurrent executions.
  • Для триггеров HTTP новые экземпляры будут выделяться только один раз в 1 секунду.For HTTP triggers, new instances will only be allocated at most once every 1 second.
  • Для триггеров, отличных от HTTP, новые экземпляры будут выделяться только один раз в 30 секунд.For non-HTTP triggers, new instances will only be allocated at most once every 30 seconds.

Для различных триггеров также могут быть установлены разные ограничения масштабирования, а также ограничения, указанные в следующем документе:Different triggers may also have different scaling limits as well as documented below:

Рекомендации и шаблоны для масштабируемых приложенийBest practices and patterns for scalable apps

В приложении-функции существует множество аспектов, влияющих на качество его масштабирования, в том числе конфигурация узла, используемый объем среды выполнения и эффективность использования ресурсов.There are many aspects of a function app that will impact how well it will scale, including host configuration, runtime footprint, and resource efficiency. Дополнительные сведения см. в разделе Рекомендации по масштабируемости.For more information, see the scalability section of the performance considerations article. Вам также следует учитывать поведение подключений при масштабировании приложения-функции.You should also be aware of how connections behave as your function app scales. См. дополнительные сведения об управлении подключениями в службе "Функции Azure".For more information, see How to manage connections in Azure Functions.

Модель оплатыBilling model

Сведения о выставлении счетов для разных планов подробно описаны на странице цен на функции Azure.Billing for the different plans is described in detail on the Azure Functions pricing page. Использование вычисляется на уровне приложения-функции. При этом учитывается только время выполнения кода функции.Usage is aggregated at the function app level and counts only the time that function code is executed. Счета выставляются по следующим единицам:The following are units for billing:

  • Потребление ресурсов в гигабайтах в секунду (ГБ/с) .Resource consumption in gigabyte-seconds (GB-s). Вычисляется как сочетание объема памяти и времени выполнения для всех функций, выполняемых в приложении-функции.Computed as a combination of memory size and execution time for all functions within a function app.
  • Выполнения.Executions. Вычисляются при каждом выполнении функции в ответ на событие.Counted each time a function is executed in response to an event trigger.

Полезные запросы и сведения о том, как узнать счет о потреблении, можно найти в статье вопросы и ответы по выставлению счетов.Useful queries and information on how to understand your consumption bill can be found on the billing FAQ.

Ограничения службыService limits

В следующей таблице указаны ограничения, которые применяются к приложениям функций при выполнении в различных планах размещения.The following table indicates the limits that apply to function apps when running in the various hosting plans:

Resource (Ресурс)Resource План потребленияConsumption plan План PremiumPremium plan План службы приложений1App Service plan1
МасштабированиеScale out Управляемые событиямиEvent driven Управляемые событиямиEvent driven Ручная или автомасштабированиеManual/autoscale
Максимальное число экземпляровMax instances 200200 100100 10-2010-20
Длительность ожидания по умолчанию (мин.)Default time out duration (min) 55 3030 302302
Максимальная Длительность истечения времени ожидания (мин.)Max time out duration (min) 1010 6060 без привязки3unbounded3
Максимальное число исходящих подключений (на экземпляр)Max outbound connections (per instance) 600 активна (всего 1200)600 active (1200 total) unboundedunbounded unboundedunbounded
Максимальный размер запроса (МБ)4Max request size (MB)4 100100 100100 100100
Максимальная длина строки запроса4Max query string length4 40964096 40964096 40964096
Максимальная длина URL-адреса запроса4Max request URL length4 81928192 81928192 81928192
ACU на экземплярACU per instance 100100 210-840210-840 100-840100-840
Максимальный объем памяти (ГБ на экземпляр)Max memory (GB per instance) 1.51.5 3,5-143.5-14 1,75-141.75-14
Приложения функций на планFunction apps per plan 100100 100100 без привязки5unbounded5
Планы службы приложенийApp Service plans 100. США за регион100 per region 100 шт. на одну группу ресурсов100 per resource group 100 шт. на одну группу ресурсов100 per resource group
Хранилище6Storage6 1 GB1 GB 250 ГБ250 GB 50-1000 ГБ50-1000 GB
Количество личных доменов на одно приложениеCustom domains per app 50075007 500500 500500
личных доменов Поддержка SSLCustom domain SSL support включена неограниченное подключение SNI SSLunbounded SNI SSL connection included неограниченные протоколы SNI SSL и 1 SSL на основе IP подключенийunbounded SNI SSL and 1 IP SSL connections included неограниченные протоколы SNI SSL и 1 SSL на основе IP подключенийunbounded SNI SSL and 1 IP SSL connections included

1 для определенных ограничений для различных параметров плана службы приложений см. раздел ограничения плана службы приложений.1 For specific limits for the various App Service plan options, see the App Service plan limits.
2 по умолчанию время ожидания для выполнения функций 1. x в плане службы приложений не ограничено.2 By default, the timeout for the Functions 1.x runtime in an App Service plan is unbounded.
3 требует, чтобы план службы приложений был установлен в Always on.3 Requires the App Service plan be set to Always On. Оплата по стандартным тарифам.Pay at standard rates.
4 эти ограничения задаются в узле.4 These limits are set in the host.
5 фактическое число приложений функций, которые можно разместить, зависит от активности приложений, размера экземпляров компьютера и соответствующего использования ресурсов.5 The actual number of function apps that you can host depends on the activity of the apps, the size of the machine instances, and the corresponding resource utilization.
6 предел хранилища — это общий размер содержимого во временном хранилище во всех приложениях в том же плане службы приложений.6 The storage limit is the total content size in temporary storage across all apps in the same App Service plan. План потребления использует службы файлов Azure для временного хранения.Consumption plan uses Azure Files for temporary storage.
7 если приложение-функция размещено в плане потребления, поддерживается только параметр CNAME.7 When your function app is hosted in a Consumption plan, only the CNAME option is supported. Для приложений-функций в плане Premium или в плане службы приложенийможно сопоставлять личный домен с помощью записи CNAME или a.For function apps in a Premium plan or an App Service plan, you can map a custom domain using either a CNAME or an A record.