Рекомендации по обеспечению надежности Функций Azure

Функции Azure — это решение для выделения вычислительных мощностей по требованию, в частности при возникновении определенных событий. Решение добавляет в существующую платформу приложений Службы приложений Azure возможности выполнения кода после событий, которые происходят в Azure, сторонних службах и локальных системах. Функции позволяют создавать решения путем подключения к источникам данных или службам обмена сообщениями, что упрощает обработку событий и реагирование на них. Функции выполняются в центрах обработки данных Azure, которые являются сложными и содержат множество интегрированных компонентов. В размещенной облачной среде предполагается, что виртуальные машины могут периодически перезапускаться или перемещаться и что будет происходить обновление систем. Кроме того, приложения-функции обычно зависят от внешних API, служб Azure и других баз данных, которые также подвержены периодической недоступности.

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

Выбор подходящего плана размещения

При создании приложения-функции в Azure необходимо выбрать план размещения для приложения. Выбор плана влияет на производительность, надежность и стоимость. Для Функций доступны три плана размещения:

Все планы размещения являются общедоступными (GA) при работе на Linux или Windows.

В контексте платформы Службы приложений план "Премиум", используемый для динамического размещения функций — это план "Эластичный премиум" (EP). Существуют и другие планы категории "Выделенный" (Служба приложений), называемые "Премиум". Дополнительные сведения приведены в статье Планы категории "Премиум".

Выбранный план размещения определяет следующие варианты поведения:

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

Дополнительные сведения о выборе правильного плана размещения и подробное сравнение планов приведены в разделе Варианты размещения Функций Azure.

При создании приложения-функции важно правильно выбрать план. Функции предоставляют ограниченную возможность переключения на другой план размещения, в первую очередь между планами "Потребление" и "Эластичный премиум". Дополнительные сведения приведены в разделе Планирование миграции.

Правильная настройка хранилища

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

Неправильно настроенная файловая система или учетная запись хранения в приложении-функции может повлиять на производительность и доступность функций. Дополнительные сведения по устранению неполадок с неправильно настроенной учетной записью хранения приведены в статье Устранение неполадок с хранилищем.

Параметры подключения хранилища

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

Эти параметры поддерживаются только при выполнении планов категории "Премиум" или "Потребление" в Windows.

При создании приложения-функции на портале Azure или с помощью Azure CLI или Azure PowerShell эти параметры создаются для приложения-функции при необходимости. При создании ресурсов из шаблона Azure Resource Manager (шаблон ARM) необходимо также включить WEBSITE_CONTENTAZUREFILECONNECTIONSTRING в шаблон.

В первом развертывании с помощью шаблона ARM не включайте WEBSITE_CONTENTSHARE, который создается автоматически.

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

Конфигурация учетной записи хранения Azure

При создании приложения-функции необходимо создать или привязать учетную запись хранения Azure общего назначения, поддерживающую хранилища BLOB-объектов, очередей и таблиц. Для внутренних операций, таких как управление триггерами и ведение журнала выполнения функций, Функции Azure используют службу хранилища Azure. Строка подключения учетной записи хранения для приложения-функции находится в параметрах приложения AzureWebJobsStorage и WEBSITE_CONTENTAZUREFILECONNECTIONSTRING.

При создании этой учетной записи хранения учитывайте следующее:

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

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

  • Для функций, активированных Центром событий, не используйте учетную запись с включенным Data Lake Storage.

Управление большими наборами данных

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

Организация функций

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

Для планов "Потребление" и "Премиум" все функции в приложении-функции динамически масштабируются.

Дополнительные сведения о том, как упорядочить функции, приведены в статье Рекомендации по организации Функций.

Оптимизация развертываний

При развертывании приложения-функции важно помнить, что единицей развертывания функций в Azure является приложение-функция. Все функции в приложении-функции развертываются одновременно, как правило, из одного пакета развертывания.

Рассмотрите следующие варианты для успешного развертывания:

  • Запустите функции из пакета развертывания. Этот подход на основе запуска из пакета обеспечивает следующие преимущества:

    • Снижается риск возникновения проблем из-за блокировки копирования файлов.
    • Развертывание можно осуществить непосредственно в рабочем приложении, которое активирует перезапуск.
    • Вы будете знать, что все файлы в пакете доступны вашему приложению.
    • Производительность развертываний шаблонов ARM повышается.
    • Может сократиться время "холодного запуска", особенно для функций JavaScript с большими деревьями пакетов npm.
  • Рассмотрите возможность использования непрерывного развертывания для подключения развертываний к решению системы управления версиями. Непрерывные развертывания также обеспечивают возможность выполнения из пакета развертывания.

  • Для размещения плана "Премиум" рекомендуется добавить триггер прогрева, чтобы уменьшить задержку при добавлении новых экземпляров. Дополнительные сведения приведены в разделе Триггер прогрева Функций Azure.

  • Чтобы свести к минимуму время простоя развертывания и выполнить откат развертываний, рассмотрите возможность использования слотов развертывания. Дополнительные сведения приведены в статье Слоты развертывания Функций Azure.

Написание надежных функций

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

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

Проектирование для безопасности

Безопасность лучше учитывать на этапе планирования, а не после того, как функции будут готовы к работе. Сведения о безопасной разработке и развертывании функций приведены в разделе Обеспечение безопасности Функций Azure.

Рассмотрите возможность параллелизма

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

Планы категории "Выделенный" (Служба приложений) требуют предоставления возможности масштабирования приложений-функций.

Число рабочих процессов

В некоторых случаях более эффективным способом обработки нагрузки является создание ряда процессов, называемых языковыми рабочими процессами, в экземпляре перед горизонтальным увеличением масштаба. Максимально допустимое количество языковых рабочих процессов контролируется параметром FUNCTIONS_WORKER_PROCESS_COUNT. Значение по умолчанию для этого параметра — 1, что означает, что множественные процессы не используются. После достижения максимального количества процессов приложение-функция масштабируется горизонтально до большего числа экземпляров для обработки нагрузки. Этот параметр не применяется к функциям библиотеки класса C#, которые выполняются в хост-процессе.

При использовании FUNCTIONS_WORKER_PROCESS_COUNT плана категории "Премиум" или "Выделенный" (Служба приложений) учитывайте количество ядер, предоставляемых планом. Например, EP2 плана "Премиум" предоставляет два ядра, поэтому при необходимости следует начинать со значения 2, увеличивая его по мере необходимости на два ядра до достижения максимума.

Конфигурация триггера

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

Дополнительные сведения о том, как Функции обрабатывают потоки сообщений, приведены в статье Надежная обработка событий Функций Azure.

Планирование подключений

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

Специфика для конкретных языков

Для выбранного языка учитывайте следующие аспекты:

Максимальная доступность

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

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

План Руководство
План категории "Премиум" Реализация триггера прогрева в приложении-функции
Установка значений для экземпляров Always-Ready и предела максимального ускорения
Использование поддержки триггеров виртуальной сети при использовании триггеров, отличных от HTTP в виртуальной сети
Планы "Выделенный" Запуск по крайней мере на двух экземплярах с включенной проверкой работоспособности Службы приложений Azure
Реализация автомасштабирования
План потребления • Проверьте использование одноэлементных шаблонов и параметров параллелизма для привязок и триггеров во избежание искусственного ограничения на масштабирование приложения-функции.
Проверьте параметр functionAppScaleLimit, который может ограничить горизонтальное масштабирование
• Проверьте, установлена ли квота на ежедневное использование (ГБ/с) во время разработки и тестирования. Рассмотрите возможность удаления этого ограничения в рабочих средах.

Эффективное отслеживание

Функции Azure обеспечивают встроенную интеграцию с Azure Application Insights для мониторинга выполнения функций и трассировок, написанных из кода. Дополнительные сведения см. в статье Мониторинг Функций Azure. Azure Monitor также предоставляет средства для мониторинга работоспособности самого приложения-функции. Дополнительные сведения см. в статье Мониторинг с помощью Azure Monitor.

При использовании интеграции с Application Insights для мониторинга функций следует учитывать следующие рекомендации:

  • Убедитесь, что параметр приложения AzureWebJobsDashboard удален. Этот параметр поддерживается в более ранней версии Функций. При его наличии удаление AzureWebJobsDashboard повысит производительность функций.

  • Просмотрите журналы Application Insights. Если данные, которые вы ожидаете найти, отсутствуют, рассмотрите возможность настройки параметров выборки для лучшего отслеживания сценария мониторинга. С помощью параметра excludedTypes можно исключить из выборки определенные типы, например, Request или Exception. Дополнительные сведения см. в разделе о настройке выборки.

Функции Azure также позволяют осуществлять отправку журналов, создаваемых системой и пользователем, из Функций Azure в журналы Azure Monitor. Интеграция журналов Azure Monitor в настоящее время находится на этапе предварительной версии.

Встроенная избыточность

Потребности вашего бизнеса могут подразумевать постоянную доступность функций, даже во время сбоя в работе центра обработки данных. Сведения об использовании многорегионного подхода для постоянного выполнения критически важных функций приведены в статье Геоизбыточное аварийное восстановление и высокий уровень доступности Функций Azure.

Дальнейшие действия

Управление приложением-функцией