Поставщики хранилищ для Устойчивых функций

Устойчивые функции — это набор триггеров и привязок функций Azure, которые работают на платформе Устойчивых задач (DTFx). DTFx поддерживает различных поставщиков серверных хранилищ, в том числе поставщика хранилища Azure, используемого в Устойчивых функциях. Начиная с версии 2.5.0 пользователи Устойчивых функций могут настроить в своих приложениях-функциях использование поставщиков хранилища DTFx, отличных от поставщика хранилища Azure.

Примечание.

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

Для использования с Устойчивыми функциями и Устойчивой платформой задач были разработаны два альтернативных поставщика хранилища: Netherite и Microsoft SQL Server (MSSQL). В этой статье описываются все три поддерживаемых поставщика, они сравниваются друг с другом, а также приводятся основные сведения о том, как приступить к их использованию.

Примечание.

В настоящее время невозможно перенести данные из одного поставщика хранилища в другой. Если вы хотите использовать новый поставщик хранилища, следует создать новое приложение, для которого настроен новый поставщик хранилища.

Хранилище Azure

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

Ниже приведены основные преимущества поставщика хранилища Azure.

  • Установка не требуется. Вы можете использовать учетную запись хранилища, созданную для вас в процессе установки приложения-функции.
  • Бессерверная модель выставления счетов: в службе хранилища Azure используется модель ценообразования на основе потребления, полностью основанная на использовании (дополнительные сведения).
  • Лучшая поддержка инструментов: служба хранилища Azure предлагает кросс-платформенную локальную эмуляцию и интегрируется с Visual Studio, Visual Studio Code и Azure Functions Core Tools.
  • Соответствие современным требованиям. Служба хранилища Azure была исходной и наиболее интенсивно проверенной серверной частью хранилища для Устойчивых функций.
  • Поддержка (предварительная версия) использования удостоверений вместо секретов для подключения к поставщику хранилища.

Исходный код для компонентов DTFx поставщика хранилища Azure можно найти в репозитории GitHub Azure/durabletask.

Примечание.

Учетные записи хранения Azure общего назначения (цен. категория "Стандартный") требуются при использовании поставщика хранилища Azure. Другие типы учетных записей хранения не поддерживаются. Настоятельно рекомендуется использовать устаревшие учетные записи хранилища общего назначения версии 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.

Настройка альтернативных поставщиков хранилища

Настройка альтернативных поставщиков хранилища обычно состоит из двух этапов:

  1. Добавьте соответствующий пакет NuGet в приложение-функцию (это временное требование для приложений, использующих пакеты расширений).
  2. Обновите файл host.json, чтобы указать, какой поставщик хранилища вы хотите использовать.

Если поставщик хранилища явно не настроен в host.js, поставщик хранилища Azure будет включен по умолчанию.

Настройка поставщика хранилища Azure

Поставщик хранилища Azure является поставщиком хранилища по умолчанию и не требует явной настройки, ссылок на пакеты NuGet или ссылок на пакеты расширений. Полный набор параметров конфигурации host.js можно найти здесь по пути extensions/durableTask/storageProvider.

Связи

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

Если настроенное значение одновременно точно соответствует одному параметру и является префиксом для других параметров, то используется точное совпадение. Если в файле host.json значение не указано, по умолчанию используется значение AzureWebJobsStorage.

Подключения на основе удостоверений

Если вы используете расширение версии 2.7.0 или более поздней версии, а поставщик службы хранилища Azure вместо использования строка подключения с секретом, вы можете использовать удостоверение Microsoft Entra. Для этого необходимо определить параметры под общим префиксом, который соответствует свойству connectionName в конфигурации триггера и привязки.

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

Свойство Шаблон переменной среды Description Пример значения
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 во время выполнения. Ролей управления, таких как Владелец, недостаточно. Следующие встроенные роли, которые рекомендуется использовать вместе с расширением "Устойчивые функции" при обычной работе.

Приложению могут потребоваться дополнительные разрешения в зависимости от создаваемого кода. Если вы используете поведение по умолчанию или явно задаете для connectionName значение AzureWebJobsStorage, обратитесь к разделу Подключение к хранилищу узлов с удостоверением, где приведены дополнительные рекомендации для разрешений.

Настройка поставщика хранилища 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:

Настройка поставщика хранилища 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:

Сравнение поставщиков хранилища

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

Поставщик хранилища Хранилище Azure Netherite MSSQL
Официальное состояние поддержки ✅ Общедоступная версия (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 Неприменимо
Поддержка масштабирования KEDA 2.0
(дополнительные сведения)
❌ Не поддерживается. ❌ Не поддерживается. ✅ Поддерживается с помощью масштабируемого компонента MSSQL (дополнительные сведения)
Поддержка пакетов расширений (рекомендуется для приложений не на .NET) ✅ Полностью поддерживается. ✅ Полностью поддерживается. ✅ Полностью поддерживается.
Оптимизация цены под производительность? ❌ Нет ✅ Да (единицы пропускной способности и единицы емкости для центров событий) ✅ Да (виртуальные ЦП SQL)
Поддержка отключенной среды ❌ Требуется подключение к Azure ❌ Требуется подключение к Azure ✅ Полностью поддерживается.
Подключения на основе удостоверений ✅ Полностью поддерживается. ❌ Не поддерживается. ⚠️ Требуется масштабирование, управляемое средой выполнения

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