Partager via


Vue d’ensemble du modèle de programmation

Durable Functions est une extension de Azure Functions qui ajoute des fonctionnalités d’orchestration avec état à votre application de fonctions. Une application Durable Functions est constituée de fonctions Azure différentes, chacune jouant un rôle spécifique : orchestrateur, activité, entité ou client. Ces rôles correspondent à des types de déclencheur et de liaison spécialisés que l’extension Durable Functions fournit.

Les SDK Durable Task vous permettent de créer des applications avec état et tolérance de panne sur n'importe quelle plateforme de calcul. Votre application définit des orchestrateurs, des activités et des entités en tant que classes ou fonctions que vous enregistrez auprès d’un agent. Une API cliente distincte vous permet de démarrer et de gérer des instances d’orchestration.

Le tableau suivant récapitule les principaux composants de programmation et leurs rôles :

Composant Rôle Défini par
Orchestrateur Coordonne la logique de flux de travail Déclencheur d’orchestration
Activité Effectue une seule unité de travail Déclencheur d’activité
Entité Gère un petit état Déclencheur d’entité
Client Démarre et gère les orchestrations et les entités Liaison client durable
Composant Rôle Défini par
Orchestrateur Coordonne la logique de flux de travail Classe ou fonction inscrite auprès du worker
Activité Effectue une seule unité de travail Classe ou fonction inscrite auprès du worker
Entité Gère un petit état Classe inscrite auprès du worker
Client Démarre et gère les orchestrations et les entités DurableTaskClient Interface de Programmation d'Applications (API)

Orchestrateurs

Les orchestrateurs définissent le flux de travail : quelles actions effectuer, dans quel ordre et comment gérer les résultats. Vous écrivez une logique d’orchestrateur en tant que code ordinaire à l’aide de constructions de flux de contrôle standard telles que des boucles, des conditions et des blocs try/catch.

Un orchestrateur peut planifier plusieurs types de tâches :

Les orchestrateurs peuvent également interagir avec des entités.

Dans Durable Functions, vous définissez un orchestrateur à l’aide de la liaison du déclencheur d’orchestration. Le déclencheur fournit un objet de contexte que vous utilisez pour planifier des tâches et recevoir des résultats.

Dans les kits SDK Durable Task, vous définissez un orchestrateur en implémentant une classe ou une fonction et en l’inscrivant auprès du Worker Durable Task. L’orchestrateur reçoit un objet de contexte que vous utilisez pour planifier des tâches et recevoir des résultats.

Important

Le code Orchestrator doit être déterministe. Le runtime Durable Task utilise le sourcing d'événements et le replay pour reconstruire l’état de l’orchestrateur, ce qui signifie que le code non déterministe peut provoquer des défaillances ou des blocages. Pour obtenir des instructions détaillées, consultez contraintes de code Orchestrator.

Pour obtenir une vue d’ensemble complète du comportement d’orchestrateur, notamment la relecture, l’identité d’instance et la gestion des erreurs, consultez Orchestrations durables.

Activités

Les activités sont l’unité de base du travail dans une orchestration durable. Chaque activité représente généralement une tâche unique, telle que l’appel d’une API web, l’écriture dans une base de données ou le calcul d’un résultat. Les orchestrateurs appellent des activités pour effectuer leur véritable travail.

Les activités diffèrent des orchestrateurs de manière significative :

  • Aucune restriction de code. Les orchestrateurs doivent être déterministes, mais les activités peuvent exécuter n’importe quel code, y compris les opérations non déterministes ou longues.
  • Exécution au moins une fois. L'environnement d'exécution garantit que chaque activité s’exécute au moins une fois pendant une orchestration. Si une défaillance se produit une fois l’activité terminée, mais avant l’enregistrement du résultat, le runtime peut le réexécuter.
  • Responsabilité unique. Chaque activité reçoit une entrée et retourne une sortie. Pour passer plusieurs valeurs, utilisez un type ou une collection complexe.

Vous définissez une fonction d’activité à l’aide de la liaison de déclencheur d’activité. Le déclencheur fournit les données d'entrée que l'orchestrateur a passées lors de la planification de l'activité.

Vous définissez une activité en implémentant une classe ou une fonction et en l'enregistrant auprès du service de tâches durables. L’activité reçoit les données d'entrée que l’orchestrateur a passées lors de sa planification.

Note

Étant donné que les activités garantissent une exécution au moins une fois, rendez votre logique d’activité idempotente dans la mesure du possible. Par exemple, utilisez des « upserts » au lieu des insertions, ou vérifiez les résultats existants avant de créer des ressources.

Les activités peuvent s’exécuter en série, en parallèle ou dans une combinaison des deux.

Entities

Les entités gèrent de petits éléments d’état durables. Chaque entité a une identité unique et un ensemble d’opérations nommées qui peuvent lire ou mettre à jour son état interne. Les entités diffèrent des orchestrateurs en ce sens qu’elles gèrent explicitement l’état par le biais d’opérations au lieu de passer implicitement par le flux de contrôle. Ils diffèrent également des orchestrateurs dans le fait qu’ils n’ont pas les mêmes restrictions de code : les opérations d’entité peuvent exécuter n’importe quel code, y compris les opérations non déterministes ou longues.

Les utilisations courantes pour les entités sont les suivantes :

  • Agrégation de données provenant de plusieurs sources
  • Implémentation de verrous distribués ou de sémaphores
  • Modélisation d’objets avec état, tels que des paniers d’achat ou des sessions de jeu.

Les entités exécutent des opérations en série : une seule opération s’exécute à la fois pour une instance d’entité donnée. Cette exécution série empêche les conflits d’accès concurrentiel sans nécessiter de verrouillage explicite.

Vous définissez une fonction d’entité en utilisant la liaison de déclencheur d’entité.

Note

Les fonctions d’entité sont prises en charge dans .NET, JavaScript/TypeScript, Python et Java, mais pas dans PowerShell.

Vous définissez une entité en implémentant une classe et en l’inscrivant auprès du worker Durable Task.

Note

La prise en charge des entités est disponible dans les SDK .NET, JavaScript/TypeScript et Python. Le SDK Java ne prend actuellement pas en charge les entités.

Pour obtenir un guide complet sur la définition, l’appel et la gestion des entités, consultez Entités durables.

Client

Le composant client est la façon dont vous interagissez avec les orchestrations et les entités en dehors de l’orchestration. Les opérations clientes courantes sont les suivantes :

  • Planification de nouvelles instances d’orchestration
  • Requête de l’état des orchestrations en cours d’exécution ou terminées
  • Déclenchement d’événements vers des orchestrations en attente
  • Suspension et reprise des instances d’orchestration
  • Fin des instances d’orchestration
  • Opérations d'entité de signalisation et lecture de l'état de l'entité

Toute fonction non orchestrateur peut agir en tant que fonction cliente. Ce qui en fait un client est l’utilisation de la liaison de sortie client durable. Par exemple, vous pouvez démarrer une orchestration à partir d’une fonction déclenchée par HTTP, d’une fonction déclenchée par une file d’attente ou d’une fonction déclenchée par un minuteur.

La liaison client durable met également à disposition des API permettant d’interagir avec les entités, notamment pour signaler des opérations sur celles-ci et consulter leur état. Pour plus d’informations, consultez le binding du client d'entité.

Dans les kits SDK Durable Task, vous interagissez avec les orchestrations et les entités via la DurableTaskClient classe. Vous créez une instance cliente dans votre code d’application et appelez ses méthodes pour démarrer, interroger ou gérer des instances d’orchestration et d’entité. Le client peut être utilisé à partir de n’importe quelle partie de votre application : un point de terminaison HTTP, un service en arrière-plan, une application console ou tout autre code.

Pour plus d’informations sur toutes les opérations de gestion d’instance, notamment des exemples de code pour chaque langage, consultez Gérer les instances d’orchestration.

Étapes suivantes

Commencez par créer votre première application Durable Function :