IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)

Vous �tes nouveau sur Developpez.com ? Cr�ez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et �tre connect� pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Cr�ez-en un en quelques instants, c'est enti�rement gratuit !

Si vous disposez d�j� d'un compte et qu'il est bien activ�, connectez-vous � l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oubli� ?
Cr�er un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Azure Functions : apprendre � cr�er des fonctions durables isol�es
Un billet blog d'Hinault Romaric

Le , par Hinault Romaric

0PARTAGES

Depuis .NET 5.0, le SDK Azure Functions offre deux approches pour cr�er et ex�cuter des applications de fonctions Azure : in-process et isolated process.

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}!");
        }
    }
}
La fonction d�orchestration

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

Source : https://modern-ti.com/2023/01/07/azu...ables-isolees/
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.

Une erreur dans cette actualit� ? Signalez-nous-la !