Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Устойчивые функции — это набор триггеров и привязок функций Azure, которые работают на платформе Устойчивых задач (DTFx). DTFx поддерживает различных поставщиков серверных хранилищ, в том числе поставщика хранилища Azure, используемого в Устойчивых функциях. Начиная с Durable Functions версии 2.5.0, пользователи могут настраивать свои функции-приложения для использования поставщиков хранилища DTFx, отличных от поставщика хранилища Azure.
Примечание.
Поставщик службы хранилища Azure по умолчанию для устойчивых функций является самым простым для использования, так как он не требует дополнительной настройки. Однако существуют затраты, масштабируемость и компромиссы по управлению данными, которые могут обосновывать использование альтернативного бэкенд-поставщика.
Durable Functions поддерживают два типа поставщиков серверной части: "Свои собственные (BYO)" и "управляемые Azure". К параметрам BYO относятся Azure Storage, Netherite и Microsoft SQL Server (MSSQL). Управляемая служба Azure является новым планировщиком устойчивых задач, в настоящее время доступным как предварительная версия. В этой статье описаны все поддерживаемые серверные поставщики, сравнивающие их друг с другом, а также основные сведения о том, как приступить к работе с ними.
Примечание.
Сейчас невозможно перенести данные из одного поставщика серверной части хранилища в другой. Если вы хотите использовать новый поставщик, необходимо создать новое приложение, настроенное с помощью нового поставщика.
Планировщик устойчивых задач (предварительная версия)
Планировщик долговременных задач — это полностью управляемый поставщик инфраструктуры высокой производительности для долговременных функций. Он был разработан и построен с нуля с помощью Microsoft Research. Этот новый поставщик стремится обеспечить лучший пользовательский интерфейс в таких аспектах, как управление, наблюдаемость, производительность и безопасность.
Ключевыми преимуществами планировщика устойчивых задач являются следующие:
- Снижение затрат на управление и операции по сравнению с поставщиками серверной части BYO
- Панель управления с первоклассной наблюдаемостью и управлением предоставляется из коробки.
- Поддерживает максимальную пропускную способность всех серверных компонентов сегодня.
- Поддержка проверки подлинности с помощью управляемого удостоверения.
Существующие пользователи устойчивых функций могут использовать планировщик без изменений кода. Узнайте больше о планировщике устойчивых задач и о том, как приступить к работе.
Примеры для планировщика устойчивых задач можно найти на сайте GitHub.
Хранилище Azure
Служба хранилища Azure является поставщиком хранилища по умолчанию для Устойчивых функций. Она использует очереди, таблицы и BLOB-объекты для сохранения оркестрации и состояния сущности. Для управления разделами также используются большие двоичные объекты и аренда BLOB-объектов. Во многих случаях учетная запись хранилища, используемая для хранения состояния среды выполнения Устойчивых функций, совпадает с учетной записью хранилища по умолчанию, используемой Функциями Azure (AzureWebJobsStorage
). Однако можно также настроить Устойчивые функции с помощью отдельной учетной записи хранилища. Поставщик хранилища Azure встроен в расширение Устойчивых функций и не имеет других зависимостей.
Ниже приведены основные преимущества поставщика хранилища Azure.
- Установка не требуется. Вы можете использовать учетную запись хранилища, созданную для вас в процессе установки приложения-функции.
- Модель выставления счетов для бессерверных систем с самой низкой стоимостью — в службе хранилища Azure используется модель ценообразования, основанная на потреблении, полностью зависящая от использования (дополнительные сведения).
- Лучшая поддержка инструментов: служба хранилища Azure предлагает кросс-платформенную локальную эмуляцию и интегрируется с Visual Studio, Visual Studio Code и Azure Functions Core Tools.
- Наиболее зрелым. Azure Storage был оригинальной и наиболее проверенной в реальных условиях серверной частью для Durable Functions.
- Поддержка использования удостоверения вместо секретов для подключения к поставщику хранилища.
Исходный код для компонентов DTFx поставщика хранилища Azure можно найти в репозитории GitHub Azure/durabletask.
Примечание.
Учетные записи общего назначения Azure Storage стандартного типа требуются при использовании поставщика Azure Storage. Другие типы учетных записей хранения не поддерживаются. Настоятельно рекомендуется использовать устаревшие учетные записи хранения общего назначения версии 1, так как более новые учетные записи хранения версии 2 могут быть более дорогими для рабочих нагрузок устойчивых функций. Дополнительные сведения о типах учетных записей хранения Azure см. в документации Общие сведения об учетных записях хранения Azure.
Netherite
Серверная часть хранилища Netherite спроектирована и разработана в Microsoft Research. В Netherite используются концентраторы событий Azure и более быстрая технология базы данных поверх страничных BLOB-объектов Azure. Дизайн Netherite позволяет обработку оркестраций и сущностей с более высокой пропускной способностью в сравнении с другими поставщиками. В некоторых сценариях тестирования зафиксированы более высокие значения пропускной способности по сравнению с поставщиком хранилища Azure по умолчанию.
Ниже приведены основные преимущества поставщика хранилища Netherite.
- Более высокая пропускная способность и более низкая стоимость по сравнению с другими поставщиками объектов хранения.
- Поддерживает оптимизацию соотношения цены и производительности, что позволяет масштабировать производительность по мере необходимости.
- Поддерживает до 32 разделов данных со шлюзами событий SKU базового и стандартного уровней.
- Более экономично, чем у других поставщиков, для высокопроизводительных рабочих нагрузок.
Дополнительные сведения о поставщике хранилища Netherite, включая инструкции о начале работы, см. в документации к Netherite. Исходный код поставщика хранилища Netherite можно найти в репозитории GitHub microsoft/durabletask-netherite. Более подробное ознакомление с поставщиком хранилища Netherite также доступно в следующем справочном документе: Бессерверные рабочие процессы с Устойчивыми функциями и Netherite.
Примечание.
Название Netherite происходит из мира Minecraft.
Microsoft SQL Server (MSSQL)
Поставщик хранилища Microsoft SQL Server (MSSQL) сохраняет все состояния в базе данных Microsoft SQL Server. Он совместим с локальными и облачными развертываниями SQL Server, включая базу данных SQL Azure.
Ниже приведены основные преимущества поставщика хранилища MSSQL.
- Поддерживает отключенные среды: при использовании SQL Server подключение Azure не требуется.
- Универсально совместимо с различными средами и облаками, включая размещенные в Azure и локальные системы.
- Строгая консистентность данных, обеспечивающая резервное копирование, восстановление и переключение на резервный канал без потери данных.
- Собственная поддержка пользовательского шифрования данных (функция SQL Server).
- Интегрируется с существующими приложениями баз данных с помощью встроенных хранимых процедур.
Дополнительные сведения о поставщике хранилища MSSQL, включая инструкции о начале работы, см. в документации к Microsoft SQL. Исходный код поставщика хранилища MSSQL можно найти в репозитории GitHub microsoft/durabletask-mssql.
Настройка поставщика хранилища Azure
Поставщик хранилища Azure является поставщиком хранилища по умолчанию и не требует явной настройки, ссылок на пакеты NuGet или ссылок на пакеты расширений. Полный набор параметров конфигурации host.js можно найти здесь по пути extensions/durableTask/storageProvider
.
Связи
Свойство connectionName
в host.json является ссылкой на конфигурацию среды, которая указывает, как приложение должно подключаться к службе хранилища Azure. В данном свойстве может быть указано:
- Имя общего префикса для нескольких параметров приложения, объединяющее их в подключение на основе идентификатора. Управляемые удостоверения используют проверку подлинности Microsoft Entra для обеспечения наиболее безопасного подключения к учетной записи хранения.
- Имя параметра приложения, содержащего строку подключения. Чтобы получить строку подключения, выполните действия, описанные в разделе Управление ключами доступа к учетной записи хранения.
Если настроенное значение одновременно точно соответствует одному параметру и является префиксом для других параметров, то используется точное совпадение. Если значение не указано в host.json, значение по умолчанию равно AzureWebJobsStorage
.
Подключения на основе идентификации
Если вы используете расширение версии 2.7.0 или более поздней и поставщика службы хранилища Azure, вместо использования строк подключения с секретом, вы можете настроить приложение на использование удостоверения личности Microsoft Entra. Для этого необходимо определить параметры под общим префиксом, который соответствует свойству connectionName
в конфигурации триггера и привязки.
Чтобы использовать идентификационное соединение для Durable Functions, настройте следующие параметры приложения:
Свойство | Шаблон переменной среды | Описание | Пример значения |
---|---|---|---|
URI службы BLOB-объектов | <CONNECTION_NAME_PREFIX>__blobServiceUri |
Адрес URI плоскости передачи данных службы BLOB-объектов для учетной записи хранилища, использующей схему HTTPS. | https://<storage_account_name>.blob.core.windows.net |
URI службы очередей | <CONNECTION_NAME_PREFIX>__queueServiceUri |
URI уровня данных служб очередей учетной записи хранения, использующего схему HTTPS. | https://<storage_account_name>.queue.core.windows.net |
URI службы таблиц | <CONNECTION_NAME_PREFIX>__tableServiceUri |
Универсальный код ресурса (URI) канала данных службы таблиц в учетной записи для хранения, использующий схему HTTPS. | https://<storage_account_name>.table.core.windows.net |
Для настройки подключения можно задать дополнительные свойства. См. раздел Общие свойства подключений на основе удостоверений.
При размещении в службе "Функции Azure" для подключений на основе удостоверений используется управляемое удостоверение. По умолчанию используется назначаемое системой удостоверение, однако вы можете указать назначаемое пользователем удостоверение с помощью свойств credential
и clientID
. Обратите внимание, что настройка назначаемого пользователем удостоверения с идентификатором ресурса не поддерживается. При выполнении в других контекстах, например при локальной разработке, вместо этого используется удостоверение разработчика, хотя это можно настроить. См. Локальная разработка с удостоверяющими подключениями.
Разрешение на предоставление удостоверению
Любая используемая идентификация должна иметь разрешения на выполнение запланированных действий. Для большинства служб Azure это означает, что необходимо назначить роль в Azure RBAC, используя встроенные или настраиваемые роли, которые предоставляют эти разрешения.
Внимание
Иногда целевая служба может предоставлять разрешения, которые не являются обязательными для всех контекстов. Там, где это возможно, придерживайтесь принципа минимальных привилегий, предоставляя удостоверению лишь самые необходимые привилегии. Например, если приложению требуется только возможность чтения из источника данных, используйте роль, которая имеет разрешение только на чтение. Назначение роли, которая также разрешает запись в эту службу, было бы неуместным, поскольку это предоставило бы чрезмерные права для операции чтения. Соответственно необходимо еще проверить, что область действия назначенной роли ограничена только теми ресурсами, которые необходимо прочитать.
Вам потребуется создать назначение ролей, которое предоставляет доступ к службе хранилища Azure во время выполнения. Ролей управления, таких как Владелец, недостаточно. Следующие встроенные роли рекомендуется использовать с расширением *Durable Functions* при его обычной эксплуатации.
- Вкладчик данных хранилища Blob
- Конструктор данных очереди хранилища
- Сотрудник по работе с данными в таблицах хранилища
Приложению могут потребоваться дополнительные разрешения в зависимости от создаваемого кода. Если вы используете поведение по умолчанию или явно задаете для connectionName
значение AzureWebJobsStorage, обратитесь к разделу Подключение к хранилищу узла с удостоверением, чтобы узнать об остальных рекомендациях по разрешениям.
Настройка альтернативных поставщиков хранилища
Настройка альтернативных поставщиков хранилища обычно состоит из двух этапов:
- Добавьте соответствующий пакет NuGet в приложение-функцию (это временное требование для приложений, использующих пакеты расширений).
- Обновите файл host.json, чтобы указать, какой поставщик хранилища вы хотите использовать.
Если поставщик хранилища явно не настроен в host.js, поставщик хранилища Azure будет включен по умолчанию.
Настройка планировщика устойчивых задач (предварительная версия)
См. документацию по началу работы с планировщиком устойчивых задач.
Настройка поставщика хранилища Netherite
Для включения поставщика хранилища Netherite требуется изменение host.json
конфигурации. Для пользователей C# также требуется дополнительный шаг установки.
Конфигурация host.json
В следующем примере host.js показана минимальная конфигурация, необходимая для включения поставщика хранилища Netherite.
{
"version": "2.0",
"extensions": {
"durableTask": {
"storageProvider": {
"type": "Netherite",
"storageConnectionName": "AzureWebJobsStorage",
"eventHubsConnectionName": "EventHubsConnection"
}
}
}
}
Более подробные инструкции по установке см. в документации по началу работы с Netherite.
Установите расширение Netherite (только для .NET)
Примечание.
Если приложение использует пакеты расширений, этот раздел следует игнорировать, так как пакеты расширений удаляют необходимость управления расширениями вручную.
Вам потребуется установить последнюю версию расширения Netherite в NuGet. Обычно это означает, что необходимо включить на неё ссылку в файле .csproj
и собрать проект.
Пакет расширения для установки зависит от рабочего процесса .NET, который вы используете.
- Установите
Microsoft.Azure.DurableTask.Netherite.AzureFunctions
для встроенного .NET-работника. - Для изолированного работника .NET установите
Microsoft.Azure.Functions.Worker.Extensions.DurableTask.Netherite
.
Настройка поставщика хранилища MSSQL
Для включения поставщика хранилища MSSQL требуется изменить конфигурацию в host.json
. Для пользователей C# также требуется дополнительный шаг установки.
Конфигурация host.json
В следующем примере показана минимальная конфигурация, необходимая для включения поставщика хранилища MSSQL.
{
"version": "2.0",
"extensions": {
"durableTask": {
"storageProvider": {
"type": "mssql",
"connectionStringName": "SQLDB_Connection"
}
}
}
}
Более подробные инструкции по установке см. в документации по началу работы с поставщиком MSSQL.
Установите расширение MSSQL для устойчивых задач (только для .NET)
Примечание.
Если приложение использует пакеты расширений, этот раздел следует игнорировать, так как пакеты расширений удаляют необходимость управления расширениями вручную.
Необходимо установить последнюю версию расширения поставщика хранилища MSSQL в NuGet. Обычно это означает, включая ссылку на нее в .csproj
файле и собирая проект.
Пакет расширения для установки зависит от используемого рабочего процесса .NET.
-
Microsoft.DurableTask.SqlServer.AzureFunctions
. - Для изолированного .NET работника установите
Microsoft.Azure.Functions.Worker.Extensions.DurableTask.SqlServer
.
Сравнение поставщиков хранилища
Существует множество компромиссов между различными поддерживаемыми поставщиками хранилищ. Приведенная ниже таблица поможет вам разобраться с этими компромиссами и решить, какой поставщик хранилища лучше подходит для ваших нужд.
Поставщик хранилища | Хранилище Azure | Netherite | MSSQL | DTS |
---|---|---|---|---|
Официальный статус поддержки | ✅ Общедоступная версия (GA) | ✅ Общедоступная версия (GA) | ✅ Общедоступная версия (GA) | Общедоступная предварительная версия |
Внешние зависимости | Учетная запись службы хранилища Azure (общего назначения версии 1) | Центры событий Azure Учетная запись хранилища Azure (общего назначения) |
SQL Server 2019 или база данных Azure SQL | Н/П |
Возможности локальной разработки и эмуляции | Azurite 3.12+ (кроссплатформенный) | Поддерживает эмуляцию центров задач в памяти (дополнительные сведения) | SQL Server Developer Edition (поддерживает Windows, Linux и контейнеры Docker) | Эмулятор планировщика устойчивых задач |
Настройка центра задач | Явный | Явный | Неявная по умолчанию (дополнительные сведения) | Явный |
Максимальная пропускная способность | Умеренно | Крайне высоко | Умеренно | Крайне высоко |
Максимальное горизонтальное масштабирование оркестрации или объектов (узлы) | 16 | 32 | Н/П | Н/П |
Максимальное горизонтальное масштабирование активности (узлы) | неприменимо | 32 | Н/П | не применимо |
Поддержка устойчивых сущностей | ✅ Полностью поддерживается. | ✅ Полностью поддерживается. | ⚠️ Поддерживается, за исключением случаев, когда используется .NET с изоляцией | ✅ Полностью поддерживается. |
Поддержка масштабирования KEDA 2.0 (дополнительные сведения) |
❌ Не поддерживается. | ❌ Не поддерживается. | ✅ Поддерживается с помощью масштабируемого компонента MSSQL (дополнительные сведения) | Скоро! |
Поддержка пакетов расширений (рекомендуется для приложений не на .NET) | ✅ Полностью поддерживается. | ✅ Полностью поддерживается. | ✅ Полностью поддерживается. | Скоро! |
Можно настроить соотношение цены и производительности? | ❌ Нет | ✅ Да (единицы пропускной способности и единицы емкости для центров событий) | ✅ Да (виртуальные процессоры SQL) | Скоро! |
Поддержка отключенной среды | ❌ Требуется подключение к Azure | ❌ Требуется подключение к Azure | ✅ Полностью поддерживается. | ❌ Требуется подключение к Azure |
Связи на основе идентичности | ✅ Полностью поддерживается. | ❌ Не поддерживается. | ⚠️ Требуется масштабирование, управляемое средой выполнения | ✅ Полностью поддерживается. |
План потребления Flex | ✅ Полностью поддерживается (см. заметки) | ❌ Не поддерживается. | ✅ Полностью поддерживается. | ❌ Не поддерживается. |