
In-process
Le mode In-process existe depuis la premi�re version du runtime Azure Functions (Functions 1.0). Ce mode permet de cr�er une application de fonctions en utilisant un projet de type biblioth�que de classes. De ce fait, notre fonction est �troitement int�gr�e avec son environnement d�ex�cution dans Azure. L�avantage de cette approche est le fait que les fonctions pourront partager des API et des types de liaison. Mais, ce couplage fort fait en sorte que :
� les fonctions doivent s�ex�cuter sur la m�me version .NET que le runtime Azure Functions ;
� pas de prise en charge native de l�injection de d�pendances. Il est toutefois possible de mettre cela en place, mais vous devez passer par un mod�le d�injection de d�pendances personnalis� qui demande un certain effort de mise en place ;
� aucune prise en charge des intergiciels ;
� pas de contr�le au niveau du processus (d�marrage de l�application, configuration d�intergiciel, etc.) ;
� moins de flexibilit� : vous devez utiliser les m�mes versions d�assemblys que le processus h�te.
Il faut noter que .NET est le seul SDK d�Azure Functions qui utilise le mode In-process. Les autres SDK dont Java, Python ou encore JavaScript reposent sur le mode isolated process (out of process)
Isolated process
Le mode hors processus a �t� introduit avec le runtime Azure Functions 3.x. Cette version du runtime supporte .NET 5.0 et .NET 3.1. Mais le mode hors processus est uniquement disponible � partir de .NET 5.0.
Ce mode permet d�sormais de cr�er et ex�cuter des fonctions C# dans le processus isol�, comme cela est le cas pour JavaScript, PowerShell, etc.
Avec ce mode, nous avons un contr�le total du processus : vous contr�lez le d�marrage de l�application, ainsi que les configurations utilis�es et l�intergiciel d�marr�.
La mise en place de l�injection de d�pendances est tr�s simplifi�e. �tant donn� que vous contr�lez totalement le processus, vous pouvez utiliser les comportements .NET actuels pour injecter des d�pendances et incorporer l�intergiciel dans votre application de fonctions.
Par ailleurs, ce mode offre moins de conflits : les fonctions s�ex�cutant dans un processus distinct, les assemblys utilis�es dans votre application ne sont pas en conflit avec une version diff�rente des m�mes assemblys utilis�es par le processus h�te.

A la sortie de .NET 5 avec le mode Isolated process, Microsoft a programm� la fin du mode In-process qui allait encore �tre disponible pour la derni�re fois avec .NET 6.

Le mode Isolated process �tait encore d�pourvu des fonctionnalit�s essentielles comme le support des fonctions durables. C�est d�sormais le cas avec .NET 7.0 qui est sorti en fin d�ann�e derni�re et qui n�offre pas de prise en charge du mode in-process.

Dans ce billet de blog, nous verrons comment cr�er une fonction durable en utilisant .NET 7.0
Introduction aux fonctions durables
Durable Functions est une extension d�Azure Functions. Alors qu�Azure Functions s�ex�cute dans un environnement sans �tat, Durable Functions peut conserver les informations d��tat entre les appels de fonction. Cette approche vous permet de simplifier les ex�cutions avec �tat complexes dans un environnement serverless.
Durable Functions s�adapte en fonction des besoins et constitue un moyen �conomique d�impl�menter des workflows complexes dans le cloud.
Les fonctions durables vous permettent d��crire du code bas� sur des �v�nements. Une fonction durable peut attendre de fa�on asynchrone un ou plusieurs �v�nements externes, puis effectuer une s�rie de t�ches en r�ponse � ces �v�nements.
Il est possible de chainer plusieurs fonctions entre elles. Vous pouvez impl�menter des mod�les courants, comme le mod�le fan-out/fan-in qui utilise une fonction pour appeler d�autres fonctions en parall�le et ensuite cumuler les r�sultats.
Vous pouvez orchestrer et coordonner plusieurs fonctions, et sp�cifier leur ordre d�ex�cution.
L��tat des fonctions est g�r� automatiquement. Vous n�avez pas besoin d��crire votre propre code pour enregistrer les informations d��tat d�une fonction durable.

Mod�les d�application de fonctions durables
Chainage de fonctions
Dans le mod�le chainage de fonctions, le workflow ex�cute une s�quence de fonctions dans un ordre sp�cifi�. La sortie d�une fonction est appliqu�e � l�entr�e de la fonction suivante dans la s�quence. La sortie de la fonction finale est utilis�e pour g�n�rer un r�sultat.

Le mod�le Fan out/fan in
Le mod�le Fan out/fan in ex�cute plusieurs fonctions en parall�le et attend ensuite que toutes les fonctions aient fini de s�ex�cuter. Les r�sultats des ex�cutions parall�les peuvent �tre agr�g�s ou utilis�s pour calculer un r�sultat final.

Le mod�le interaction humaine
Le mod�le Interaction humaine combine des processus automatis�s et des actions � faire manuellement. Inclure un processus manuel dans un processus automatis� est d�licat, car les gens ne sont g�n�ralement pas autant disponibles et r�actifs que des ordinateurs. Une interaction humaine peut �tre int�gr�e � l�aide d�une logique de d�lais d�attente et de compensation qui s�ex�cute si personne n�interagit correctement dans un d�lai de r�ponse sp�cifi�e. Un processus d�approbation est un exemple de processus impliquant une interaction humaine.

Le mod�le surveillance
Le mod�le surveillance impl�mente un processus p�riodique dans un workflow, �ventuellement pour d�tecter un changement d��tat. Par exemple, vous pouvez utiliser ce mod�le pour continuer l�interrogation jusqu�� ce que certaines conditions soient remplies.

Le mod�le API HTTP Async
Le mod�le API HTTP Async apporte une solution au probl�me de coordination de l��tat des op�rations de longue dur�e avec des clients externes. Un appel HTTP peut d�clencher l�action de longue dur�e. Ensuite, il peut rediriger le client vers un point de terminaison d��tat. Le client peut interroger ce point de terminaison pour savoir quand l�op�ration est termin�e.

Cr�er une fonction durable avec .NET 7.0
La prise en charge du d�veloppement des applications de fonctions durables dans .NET 7.0 souffre encore de plusieurs manquements :
�Disponible encore au stade de pr�version;
�Aucun mod�le dans .NET 7;
�Manque de plusieurs fonctionnalit�s.
Pour commencer, nous allons cr�er une application de fonctions avec Visual Studio 2022. Nous allons prendre le mod�le vide comme il n�existe aucun mod�le pour les fonctions durables :

Une fois le projet cr�er, nous devons ajouter la prise en charge des fonctions durables en installant les packages Microsoft.Azure.Functions.Worker.Extensions.DurableTask et Microsoft.DurableTask.Generators :

Nous allons �galement installer l�extension pour le d�clencheur HTTP via le package Microsoft.Azure.Functions.Worker.Extensions.Http.
Il faudra aussi mettre � jour le Worker pour utiliser au minimum la version 1.10. Pour cela, vous devez mettre � jour le package Microsoft.Azure.Functions.Worker.

Une application de fonctions durables est compos�e d�au minimum trois fonctions :
- Une fonction d�clencheur : il s�agit de la fonction qui d�marre une instance de l�orchestration et retourne une r�ponse d��tat de v�rification.
- Une fonction d�orchestration : c�est la fonction qui g�re l�orchestration. L�orchestration d�marre suite � son ex�cution par la fonction d�clencheur et ex�cute la ou les fonctions d�activit�s en fonctions du mod�le utilis� (chaine de fonctions, Fan out/fan in, etc.).
- Une ou plusieurs fonctions d�activit�s : cette fonction contient la logique m�tier qui sera orchestr�e.
Cr�ation de la fonction d�activit�s
Nous allons commencer par la fonction d�activit�s, car c�est celle qui n�a aucune d�pendance avec les autres fonctions. Cette fonction va impl�menter la logique m�tier de notre application. Pour cet exemple, nous voulons mettre en place une simple fonction qui retourne � Hello �
Nous allons donc cr�er une classe SayHello.cs avec le code suivant :
Code : | S�lectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | using Microsoft.DurableTask; using Microsoft.Extensions.Logging; namespace DurableFunctions { [DurableTask(nameof(SayHello))] public class SayHello : TaskActivity<string, string> { readonly ILogger logger; public SayHello(ILoggerFactory loggerFactory) { logger = loggerFactory.CreateLogger<SayHello>(); } public override Task<string> RunAsync(TaskActivityContext context, string cityName) { logger.LogInformation("Saying hello to {name}", cityName); return Task.FromResult($"Hello, {cityName}!"); } } } |
Nous allons utiliser le mod�le chainage de fonctions. La fonction d�orchestration appelle successivement � plusieurs reprises la fonction d�activit�s.
Pour impl�menter la fonction d�orchestration, nous allons cr�er une nouvelle classe HelloOrchestration avec le code suivant :
Code : | S�lectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | using Microsoft.DurableTask; namespace DurableFunctions { [DurableTask(nameof(HelloOrchestration))] public class HelloOrchestration : TaskOrchestrator<string?, string> { public async override Task<string> RunAsync(TaskOrchestrationContext context, string? input) { string result = ""; result += await context.CallSayHelloAsync("Tokyo") + " "; result += await context.CallSayHelloAsync("London") + " "; result += await context.CallSayHelloAsync("Seattle"); return result; } } } |
La package Microsoft.DurableTask.Generators ajoute des fonctionnalit�s permettant de disposer des m�thodes d�extension dynamiques (CallSayHelloAsync) qui sont d�riv�es des noms des classes/fonctions d�activit�s et pouvant �tre utilis�es pour ex�cuter celles-ci.
La fonction d�clencheur
Nous allons maintenant cr�er notre fonction d�clencheur qui sera ex�cut�e suite � une requ�te HTTP. Pour cela, nous allons ajouter au projet une nouvelle classe HelloStarter avec le code suivant :
Code : | S�lectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | using Microsoft.DurableTask; using Microsoft.Azure.Functions.Worker.Http; using Microsoft.Azure.Functions.Worker; using Microsoft.Extensions.Logging; namespace DurableFunctions { public class HelloStarter { [Function(nameof(StartHelloCities))] public static async Task<HttpResponseData> StartHelloCities( [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequestData req, [DurableClient] DurableClientContext durableContext, FunctionContext executionContext) { ILogger logger = executionContext.GetLogger(nameof(StartHelloCities)); string instanceId = await durableContext.Client.ScheduleNewHelloOrchestrationInstanceAsync(); logger.LogInformation("Created new orchestration with instance ID = {instanceId}", instanceId); return durableContext.CreateCheckStatusResponse(req, instanceId); } } } |
La m�thode d�extension ScheduleNewHelloOrchestrationInstanceAsync() est �galement g�n�r�e dynamiquement par le g�n�rateur de source (Microsoft.DurableTask.Generators). Son nom est d�riv� du nom de la classe d�orchestration. Cette m�thode permettra d�appeler la fonction d�orchestration.
Il ne nous reste plus qu�� ex�cuter et tester notre application de fonctions.

Conclusion
Nous venons de mettre en place une fonction durable isol�e en utilisant .NET 7.0. L�extension pour Durable Functions est encore au stade de pr�version, donc ne devrait pas �tre utilis�e dans un environnement de production. Microsoft envisage de sortir la version stable avec .NET 8.0 LTS qui sera disponible en fin de cette ann�e.
Le code source de cet exemple est disponible sur mon GitHub � l�adresse suivante : https://github.com/hinault/durable-f...tions-isolated

Vous avez lu gratuitement 0 articles depuis plus d'un an.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer � vous proposer des publications.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer � vous proposer des publications.