Azure Webjobs vs Azure Functions : comment choisir

Azure Webjobs vs Azure Functions : comment choisir

Il y a quelques options ici au sein d’App Service. Je n’aborderai pas Logic Apps ou Azure Automation, qui touchent également à ce domaine.

Azure WebJobs

Cet article est honnêtement la meilleure explication, mais je vais résumer ici.

WebJobs à la demande, aussi appelés WebJobs planifiés ou WebJobs déclenchés

Les WebJobs déclenchés sont des WebJobs qui s’exécutent une seule fois lorsqu’une URL est appelée ou lorsque la propriété schedule est présente dans schedule.job. Les WebJobs planifiés sont simplement des WebJobs pour lesquels un job Azure Scheduler a été créé pour appeler notre URL selon un planning, mais nous prenons également en charge la propriété schedule, comme mentionné précédemment.

Résumé :

    • Exécutable/Script à la demande
    • Exécutions planifiées
    • Doivent être déclenchés via le point de terminaison .scm
    • La mise à l’échelle est manuelle
    • Une VM est toujours nécessaire

WebJobs continus (sans SDK)

Ces jobs s’exécutent en permanence et nous les relançons quand ils plantent. Vous devez activer Always On pour que ceux-ci fonctionnent, ce qui signifie les exécuter au minimum dans le niveau Basic et au-dessus.

Résumé :

    • Exécutable/Script toujours en cours d’exécution
    • Nécessite Always On - niveau Basic et au-dessus
    • Une VM est toujours nécessaire

WebJobs continus avec le SDK WebJobs

Ce ne sont rien de particulier du point de vue de la fonctionnalité “WebJobs”. Essentiellement, nous avons écrit ce SDK génial ciblant les WebJobs qui vous permet d’exécuter du code basé sur des déclencheurs simples. J’en parlerai davantage plus tard.

Résumé :

    • Exécutable/Script toujours en cours d’exécution
    • Journalisation/tableau de bord plus riches
    • Déclencheurs pris en charge avec les tâches de longue durée
    • Nécessite Always On - niveau Basic et au-dessus
    • La mise à l’échelle nécessite une configuration manuelle
    • Le démarrage peut être un peu fastidieux
    • Une VM est toujours nécessaire

SDK Azure WebJobs

Le SDK Azure WebJobs est un SDK complètement séparé de la fonctionnalité plateforme WebJobs. Il est conçu pour être exécuté dans un WebJob, mais peut en réalité être exécuté n’importe où. Nous avons des clients qui l’exécutent

(Réponse tronquée)

Bonjour,

Le choix entre Azure WebJobs et Azure Functions est une question que beaucoup d’architectes et développeurs se posent lors de la conception d’une solution Azure. Ces deux services permettent d’exécuter du code en arrière-plan, mais ils répondent à des besoins différents. Je vais vous fournir une analyse complète pour vous aider à faire le bon choix.

Vue d’ensemble des deux services

Azure WebJobs

Les WebJobs sont une fonctionnalité d’Azure App Service qui permet d’exécuter des programmes ou des scripts en arrière-plan dans le même contexte qu’une application web App Service. Ils partagent les ressources de l’App Service Plan associé.

Caractéristiques principales :

  • Intégrés à App Service (même plan, même VM)
  • Peuvent être continus (s’exécutent en permanence) ou déclenchés (à la demande ou selon un planning)
  • Supportent de nombreux types de fichiers : .exe, .cmd, .bat, .sh, .php, .py, .js, .jar
  • Peuvent utiliser le SDK WebJobs pour une intégration avancée avec Azure Storage

Azure Functions

Azure Functions est un service de calcul serverless indépendant qui exécute du code en réponse à des événements, sans gestion de serveur. Il facture uniquement le temps d’exécution effectif (en mode Consumption).

Caractéristiques principales :

  • Modèle serverless ou dédié (Elastic Premium, Dedicated Plan)
  • Large éventail de déclencheurs (HTTP, Timer, Queue, Blob, Event Hub, Service Bus, Cosmos DB, etc.)
  • Plusieurs langages supportés : C#, JavaScript/TypeScript, Python, Java, PowerShell, Go (custom handler)
  • Mise à l’échelle automatique et élastique
  • Modèle de facturation à l’exécution (Consumption Plan)

Tableau comparatif détaillé

Critère Azure WebJobs Azure Functions
Modèle d’hébergement Intégré à App Service Indépendant (serverless ou plan dédié)
Facturation Inclus dans l’App Service Plan À l’exécution (Consumption) ou plan dédié
Mise à l’échelle Manuelle (scale out App Service) Automatique et élastique
Déclencheurs Timer, continu, manuel 20+ déclencheurs natifs
Langages Tout exécutable, SDK C#/Node C#, JS/TS, Python, Java, PowerShell, Go
Durée max d’exécution Illimitée 5 min (Consumption), 10 min extensible, illimité (Premium/Dedicated)
Accès au système de fichiers Oui (partage App Service) Limité (temporaire)
Monitoring Application Insights (basique) Application Insights (avancé, intégré)
CI/CD Via App Service deployment Via Azure DevOps, GitHub Actions natif
Local development Via WebJobs SDK Via Azure Functions Core Tools
Orchestration Non Oui (Durable Functions)
Cold start Non (si App Service actif) Oui (Consumption Plan)
Maturité Stable, maintenance uniquement Actif, nouvelles fonctionnalités régulières

Quand choisir Azure WebJobs ?

Cas d’usage favorables aux WebJobs

1. Vous avez déjà une App Service existante

Si votre application web tourne sur un App Service Plan, les WebJobs sont une extension naturelle sans coût supplémentaire :

// Exemple de WebJob avec SDK - traitement de messages Queue
public class Functions
{
    public static async Task ProcessQueueMessage(
        [QueueTrigger("maqueue")] string message,
        ILogger logger)
    {
        logger.LogInformation($"Message reçu : {message}");
        // Traitement du message
        await TraiterMessage(message);
    }
}

2. Tâches de longue durée nécessitant une exécution continue

Les WebJobs continus s’exécutent en permanence sans limite de temps, idéal pour :

  • Les listeners de files d’attente avec faible latence
  • Les processus de synchronisation permanents
  • Les tâches de monitoring continu

3. Accès nécessaire au système de fichiers de l’App Service

Les WebJobs partagent le système de fichiers avec l’application web parente, permettant d’accéder aux mêmes fichiers et répertoires.

4. Migration d’applications existantes

Si vous migrez une application .NET Framework legacy avec des traitements en arrière-plan, les WebJobs offrent une voie de migration simple.

Quand choisir Azure Functions ?

Cas d’usage favorables aux Functions

1. Architecture serverless et microservices

Pour des architectures découplées et event-driven :

// Azure Function avec Timer Trigger
[FunctionName("TraitementNocturne")]
public static async Task Run(
    [TimerTrigger("0 0 2 * * *")] TimerInfo myTimer,
    ILogger log,
    [CosmosDB(
        databaseName: "MaBDD",
        collectionName: "Commandes",
        ConnectionStringSetting = "CosmosDBConnection")] IAsyncCollector<dynamic> outputDocument)
{
    log.LogInformation($"Traitement nocturne démarré : {DateTime.Now}");

    var commandes = await RecupererCommandesNonTraitees();
    foreach (var commande in commandes)
    {
        await outputDocument.AddAsync(new { id = commande.Id, statut = "Traité" });
    }
}

2. Réponse à des événements multiples et variés

Azure Functions supporte nativement plus de 20 types de déclencheurs :

// Function déclenchée par un message Service Bus
[FunctionName("TraiterCommande")]
public static async Task Run(
    [ServiceBusTrigger("commandes", Connection = "ServiceBusConnection")] string message,
    [Table("CommandesTable", Connection = "StorageConnection")] CloudTable table,
    ILogger log)
{
    var commande = JsonConvert.DeserializeObject<Commande>(message);
    // Traitement...
}

3. Optimisation des coûts avec une charge variable

Le Consumption Plan d’Azure Functions inclut 1 million d’exécutions gratuites par mois et ne facture que ce qui est consommé :

Coût = (Nombre d'exécutions × 0,20 €/million) + (GB-secondes × 0,000016 €/GB-s)

4. Orchestration de workflows complexes avec Durable Functions

// Orchestrateur Durable Functions
[FunctionName("OrchestrateurCommande")]
public static async Task<List<string>> RunOrchestrator(
    [OrchestrationTrigger] IDurableOrchestrationContext context)
{
    var outputs = new List<string>();

    // Exécution parallèle
    var tache1 = context.CallActivityAsync<string>("ValiderPaiement", "commande-123");
    var tache2 = context.CallActivityAsync<string>("VerifierStock", "commande-123");

    await Task.WhenAll(tache1, tache2);

    outputs.Add(await tache1);
    outputs.Add(await tache2);

    // Puis exécution séquentielle
    outputs.Add(await context.CallActivityAsync<string>("ExpedierCommande", "commande-123"));

    return outputs;
}

5. Exposition d’API légères

// HTTP Trigger pour une API simple
[FunctionName("GetProduit")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", Route = "produits/{id}")] HttpRequest req,
    string id,
    ILogger log)
{
    var produit = await _repository.GetProduitAsync(id);
    return produit != null
        ? new OkObjectResult(produit)
        : new NotFoundResult();
}

Arbre de décision

Pour vous aider à choisir rapidement, voici un arbre de décision :

Avez-vous déjà un App Service Plan ?
├── OUI → Votre tâche dure plus de 10 minutes ou est continue ?
│   ├── OUI → WebJobs
│   └── NON → Les deux conviennent, préférez Functions pour l'évolutivité
└── NON → Vous avez besoin de serverless (pas de gestion serveur) ?
    ├── OUI → Azure Functions (Consumption Plan)
    └── NON → Votre charge est imprévisible ?
        ├── OUI → Azure Functions (Elastic Premium)
        └── NON → Évaluez App Service + WebJobs vs Functions Dedicated

Migration de WebJobs vers Azure Functions

Si vous souhaitez migrer des WebJobs existants vers Functions :

# Installer Azure Functions Core Tools
npm install -g azure-functions-core-tools@4

# Créer un nouveau projet Functions
func init MonProjetFunctions --dotnet

# Ajouter une fonction depuis un template
func new --name MonTraitement --template "Timer trigger"

# Tester localement
func start

Le WebJobs SDK est d’ailleurs la base sur laquelle Azure Functions a été construit, ce qui facilite la migration du code métier.

Recommandation finale

  • Choisissez WebJobs si vous avez un App Service existant, besoin d’exécution continue, ou contraintes de migration legacy.
  • Choisissez Azure Functions pour tout nouveau développement, les architectures event-driven, la mise à l’échelle automatique et l’optimisation des coûts.

Dans la majorité des projets nouveaux, Azure Functions est le choix recommandé par Microsoft et offre une feuille de route produit plus active.


Si vous nous donnez plus de détails sur votre cas d’usage spécifique (type de traitement, fréquence, durée, contraintes d’infrastructure), je pourrai affiner cette recommandation et vous aider à concevoir l’architecture optimale.