Partage via


Fournisseurs de stockage Durable Functions

Durable Functions est un ensemble de déclencheurs et de liaisons Azure Functions qui sont alimentés en interne par Durable Task Framework (DTFx). DTFx prend en charge différents fournisseurs de stockage principal, y compris le fournisseur Stockage Azure utilisé par Durable Functions. À partir de Durable Functions v2.5.0, les utilisateurs peuvent configurer leurs applications de fonction pour utiliser des fournisseurs de stockage DTFx autres que le fournisseur Stockage Azure.

Notes

Pour de nombreuses applications de fonction, le fournisseur de stockage Azure par défaut pour Durable Functions est susceptible de suffire et est le plus simple à utiliser, car il ne nécessite aucune configuration supplémentaire. Cependant, il existe des compromis en matière de coût, d'évolutivité et de gestion des données qui peuvent favoriser l'utilisation d'un autre fournisseur de stockage.

Deux fournisseurs de stockage de remplacement ont été développés pour être utilisés avec Durable Functions et le Cadre Durable Task, le fournisseur de stockage Netherite et le fournisseur de stockage Microsoft SQL Server (MSSQL). Cet article décrit les trois fournisseurs pris en charge, les compare les uns avec les autres et fournit des informations de base sur leur prise en main.

Notes

Il n’est pas possible actuellement de migrer des données d’un fournisseur de stockage vers un autre. Si vous souhaitez utiliser un nouveau fournisseur de stockage, vous devez créer une nouvelle application configurée avec le nouveau fournisseur de stockage.

Stockage Azure

Stockage Azure est le fournisseur de stockage par défaut pour Durable Functions. Il utilise des files d’attente, des tables et des objets blob pour conserver l’état de l’orchestration et de l’entité. Il utilise également des objets blob et des baux d’objets blob pour gérer les partitions. Dans de nombreux cas, le compte de stockage utilisé pour stocker l’état d’exécution de Durable Functions est le même que le compte de stockage par défaut utilisé par Azure Functions (AzureWebJobsStorage). Toutefois, il est également possible de configurer Durable Functions avec un compte de stockage distinct. Le fournisseur Stockage Azure est intégré à l’extension Durable Functions et n’a pas d’autres dépendances.

Les principaux avantages du fournisseur Stockage Azure sont les suivants :

  • Aucune configuration requise : vous pouvez utiliser le compte de stockage qui a été créé pour vous par l’expérience d’installation d’application de fonction.
  • Modèle de facturation sans serveur à faible coût : Stockage Azure dispose d’un modèle de tarification basé sur la consommation reposant entièrement sur l’utilisation (plus d’informations).
  • Meilleure prise en charge des outils : Stockage Azure offre une émulation locale interplateforme et s’intègre à Visual Studio, Visual Studio Code et le Azure Functions Core Tools.
  • Plus mature : Stockage Azure est le stockage principal d’origine et le plus éprouvé pour Durable Functions.
  • Prise en charge de l’utilisation de l’identité à la place des secrets pour la connexion au fournisseur de stockage.

Le code source des composants DTFx du fournisseur Stockage Azure se trouve dans le référentiel GitHub Azure/durabletask.

Notes

Des comptes Stockage Azure standard à usage général sont requis lors de l’utilisation du fournisseur Stockage Azure. Tous les autres types de compte de stockage ne sont pas pris en charge. Nous vous recommandons vivement d’utiliser des comptes de stockage à usage général v1 hérités, car les comptes de stockage v2, plus récents, peuvent être beaucoup plus onéreux pour les charges de travail de Durable Functions. Pour plus d’informations sur les types de comptes de stockage Azure, consultez l’article Vue d’ensemble du compte de stockage.

Netherite

Le stockage principal Netherite a été conçu et développé par Microsoft Research. Il utilise Azure Event Hubs et la technologie de base de données FASTER en plus d’objets blob de pages Azure. La conception de Netherite permet un traitement à débit beaucoup plus élevé des orchestrations et des entités par rapport aux autres fournisseurs. Dans certains scénarios de test, le débit a augmenté d’un ordre de grandeur supérieur à celui du fournisseur Stockage Azure par défaut.

Les principaux avantages du fournisseur de stockage Netherite comprennent les suivants :

  • Débit nettement plus élevé à moindre coût par rapport aux autres fournisseurs de stockage.
  • Prend en charge l’optimisation des performances, ce qui vous permet de mettre à l’échelle les performances en fonction des besoins.
  • Prend en charge jusqu’à 32 partitions de données avec les références SKU De base et Standard d’Event Hubs.
  • Plus rentable que les autres fournisseurs pour les charges de travail à débit élevé.

Vous pouvez en apprendre plus sur les détails techniques du fournisseur de stockage Netherite, notamment sa prise en main, dans la documentation de Netherite. Le code source du fournisseur de stockage Netherite se trouve dans le référentiel GitHub Microsoft/durabletask-netherite. Une évaluation plus approfondie du fournisseur de stockage Netherite est également disponible dans le document de recherche suivant : Workflows sans serveur avec Durable Functions et Netherite.

Notes

Le nom Netherite provient du monde de Minecraft.

Microsoft SQL Server (MSSQL)

Le fournisseur de stockage Microsoft SQL Server (MSSQL) conserve tout l’état dans une base de données Microsoft SQL Server. Il est compatible avec les déploiements locaux et hébergés sur le cloud de SQL Server, y compris les bases de données Azure SQL.

Les principaux avantages du fournisseur de stockage MSSQL sont les suivants :

  • Prend en charge les environnements déconnectés : aucune connectivité Azure n’est requise lors de l’utilisation d’une installation SQL Server.
  • Portable dans plusieurs environnements et clouds, y compris Azure et en local.
  • Forte cohérence des données, permettant la sauvegarde/restauration et le basculement sans perte de données.
  • Prise en charge native du chiffrement de données personnalisé (une fonctionnalité de SQL Server).
  • S’intègre avec les applications de base de données existantes via des procédures stockées intégrées.

Vous pouvez en apprendre plus sur les détails techniques du fournisseur de stockage MSSQL, notamment sa prise en main, dans la documentation du fournisseur Microsoft SQL. Le code source du fournisseur de stockage MSSQL se trouve dans le référentiel GitHub Microsoft/durabletask-mssql.

Configuration de fournisseurs de stockage alternatifs

La configuration de fournisseurs de stockage alternatifs est généralement un processus en deux étapes :

  1. Ajoutez le package NuGet approprié à votre application de fonction (cette exigence est temporaire pour les applications qui utilisent des packs d’extension).
  2. Mettez à jour le fichier host.json pour spécifier le fournisseur de stockage que vous souhaitez utiliser.

Si aucun fournisseur de stockage n’est explicitement configuré dans host.json, le fournisseur Stockage Azure est activé par défaut.

Configurer le fournisseur Stockage Azure

Le fournisseur Stockage Azure est le fournisseur de stockage par défaut et n’a besoin d’aucune configuration explicite, de références de package NuGet ou de références de pack d’extensions. Vous pouvez trouver l’ensemble complet d’options de configuration de host.jsonici, sous le chemin d’accès extensions/durableTask/storageProvider.

Connexions

La propriété connectionName dans host.json est une référence à la configuration de l’environnement qui spécifie la façon dont l’application doit se connecter au stockage Azure. Elle peut spécifier :

Si la valeur configurée est à la fois une correspondance exacte pour un paramètre unique et une correspondance de préfixe pour d’autres paramètres, la correspondance exacte est utilisée. Si aucune valeur n’est spécifiée dans host.json, la valeur par défaut est « AzureWebJobsStorage ».

Connexions basées sur l’identité

Si vous utilisez la version 2.7.0 ou ultérieure de l’extension et le fournisseur de stockage Azure, au lieu d’utiliser une chaîne de connexion avec un secret, vous pouvez faire en sorte que l’application utilise une identité Microsoft Entra. Pour ce faire, vous devez définir les paramètres sous un préfixe commun qui correspond à la propriété connectionName dans le déclencheur et la configuration de liaison.

Pour utiliser une connexion basée sur une identité pour Durable Functions, configurez les paramètres d’application suivants :

Propriété Modèle de variable d’environnement Description Valeur d'exemple
URI du service blob <CONNECTION_NAME_PREFIX>__blobServiceUri URI de plan de données du service BLOB du compte de stockage, utilisant le schéma HTTPS. https://<storage_account_name>.blob.core.windows.net
URI du service de file d’attente <CONNECTION_NAME_PREFIX>__queueServiceUri URI de plan de données du service File d’attente du compte de stockage, utilisant le schéma HTTPS. https://<storage_account_name>.queue.core.windows.net
URI du service de table <CONNECTION_NAME_PREFIX>__tableServiceUri URI de plan de données d’un service Table du compte de stockage, utilisant le schéma HTTPS. https://<storage_account_name>.table.core.windows.net

Des propriétés supplémentaires peuvent être définies pour personnaliser la connexion. Consultez Propriétés communes pour les connexions basées sur l’identité.

Quand elles sont hébergées dans le service Azure Functions, les connexions basées sur une identité utilisent une identité managée. L’identité attribuée par le système est utilisée par défaut, bien qu’une identité attribuée par l’utilisateur puisse être spécifiée avec les propriétés credential et clientID. Notez que la configuration d’une identité affectée par l’utilisateur avec un ID de ressource n’est pas prise en charge. Lors d’une exécution dans d’autres contextes, tels que le développement local, votre identité de développeur est utilisée à la place, même si cela peut être personnalisé. Consultez Développement local avec connexions basées sur une identité.

Accorder l’autorisation à l’identité

Quelle que soit l’identité utilisée, elle doit avoir les autorisations nécessaires pour effectuer les actions prévues. Pour la plupart des services Azure, cela signifie que vous devez attribuer un rôle dans Azure RBAC en utilisant des rôles intégrés ou personnalisés qui fournissent ces autorisations.

Important

Parmi les autorisations exposées par le service cible, certaines ne sont peut-être pas nécessaires pour tous les contextes. Dans la mesure du possible, adhérez au principe du privilège minimum, en accordant à l’identité uniquement les privilèges nécessaires. Par exemple, si l’application a juste besoin de pouvoir lire à partir d’une source de données, utilisez un rôle qui a uniquement l’autorisation de lecture. Il serait inapproprié d’attribuer un rôle qui autorise aussi l’écriture dans ce service, car ce serait une autorisation excessive pour une opération de lecture. De même, vous voudrez vous assurer que l’attribution de rôle est limitée aux seules ressources qui doivent être lues.

Vous devrez créer une attribution de rôle qui donne accès à votre stockage Azure au moment de l’exécution. Les rôles de gestion comme Propriétaire ne sont pas suffisants. Les rôles intégrés suivants sont recommandés lors de l’utilisation de l’extension Durable Functions pour un fonctionnement normal :

Votre application peut nécessiter des autorisations supplémentaires en fonction du code que vous écrivez. Si vous utilisez le comportement par défaut ou si vous définissez explicitement connectionName sur « AzureWebJobsStorage », consultez Connexion au stockage hôte avec une identité pour d’autres considérations relatives aux autorisations.

Configuration du fournisseur de stockage Netherite

L’activation du fournisseur de stockage Netherite nécessite une modification de configuration dans votre host.json. Pour les utilisateurs de C#, une étape d’installation supplémentaire est également nécessaire.

host.json Configuration

L’exemple de host.json ci-dessous montre la configuration minimale requise pour activer le fournisseur de stockage Netherite.

{
  "version": "2.0",
  "extensions": {
    "durableTask": {
      "storageProvider": {
        "type": "Netherite",
        "storageConnectionName": "AzureWebJobsStorage",
        "eventHubsConnectionName": "EventHubsConnection"
      }
    }
  }
}

Pour obtenir des instructions d’installation plus détaillées, consultez la documentation de prise en main de Netherite.

Installer l’extension Netherite (.NET uniquement)

Notes

Si votre application utilise des packs d’extensions, ignorez cette section. En effet, les packs d’extensions évitent d’avoir à effectuer une gestion manuelle des extensions.

Vous devez installer la dernière version de l’extension Netherite sur NuGet. Cela signifie généralement inclure une référence à celle-ci dans votre fichier .csproj et de générer le projet.

Le package d’extension à installer dépend du worker .NET que vous utilisez :

Configuration du fournisseur de stockage MSSQL

L’activation du fournisseur de stockage MSSQL nécessite une modification de configuration dans votre host.json. Pour les utilisateurs de C#, une étape d’installation supplémentaire est également nécessaire.

host.json Configuration

L’exemple ci-dessous montre la configuration minimale requise pour activer le fournisseur de stockage MSSQL.

{
  "version": "2.0",
  "extensions": {
    "durableTask": {
      "storageProvider": {
        "type": "mssql",
        "connectionStringName": "SQLDB_Connection"
      }
    }
  }
}

Pour obtenir des instructions d’installation plus détaillées, consultez la documentation de prise en main du fournisseur MSSQL.

Installer l’extension MSSQL de tâche durable (.NET uniquement)

Notes

Si votre application utilise des packs d’extensions, ignorez cette section. En effet, les packs d’extensions évitent d’avoir à effectuer une gestion manuelle des extensions.

Vous devez installer la dernière version de l’extension du fournisseur de stockage MSSQL sur NuGet. Cela signifie généralement inclure une référence à celle-ci dans votre fichier .csproj et de générer le projet.

Le package d’extension à installer dépend du worker .NET que vous utilisez :

Comparaison des fournisseurs de stockage

Il existe de nombreux compromis significatifs entre les différents fournisseurs de stockage pris en charge. Le tableau suivant peut être utilisé pour vous aider à comprendre ces compromis et déterminer quel fournisseur de stockage est le mieux adapté à vos besoins.

Fournisseur de stockage Stockage Azure Netherite MSSQL
État du support officiel ✅ Disponibilité générale (GA) ✅ Disponibilité générale (GA) ✅ Disponibilité générale (GA)
Dépendances externes Un compte Stockage Azure (usage général v1) Hubs d'événements Azure
Un compte Stockage Azure (usage général)
SQL Server 2019 ou Azure SQL Database
Options de développement et d’émulation locales Azurite v3.12+ (multiplateforme) Prend en charge l’émulation en mémoire des hubs de tâches (plus d’informations) SQL Server Développeur (prend en charge les conteneurs Windows, Linux et Docker)
Configuration du hub de tâches Explicit (Explicite) Explicit (Explicite) Implicite par défaut (plus d’informations)
Débit maximal Modéré Très élevée Modéré
Taille maximale de l’orchestration/de l’entité (nœuds) 16 32 N/A
Taille maximale de l’activité (nœuds) N/A 32 S/O
Prise en charge des entités durables ✅ Entièrement pris en charge ✅ Entièrement pris en charge ️⚠ pris en charge, sauf quand .NET Isolé es utilisé
Prise en charge de la mise à l’échelle de KEDA 2.0
(plus d’informations)
❌ Non pris en charge ❌ Non pris en charge ✅ Pris en charge avec l’outil de mise à l’échelle MSSQL (plus d’informations)
Prise en charge des packs d’extensions (recommandé pour les applications hors .NET) ✅ Entièrement pris en charge ✅ Entièrement pris en charge ✅ Entièrement pris en charge
Prix-performances configurables ? ❌ Non ✅ Oui (TU et CU Event Hubs) ✅ Oui (processeurs virtuels SQL)
Prise en charge des environnements déconnectés ❌ Connectivité Azure requise ❌ Connectivité Azure requise ✅ Entièrement pris en charge
Connexions basées sur l’identité ✅ Entièrement pris en charge ❌ Non pris en charge ⚠Nécessite des mises à l’échelle basées sur le runtime
Plan Consommation flexible ✅ Entièrement pris en charge (voir les notes) ❌ Non pris en charge ❌ Non pris en charge

Étapes suivantes