J'ai créé des Azure Webjobs qui utilisent des déclencheurs et je viens tout juste d'en apprendre plus sur Azure Functions .
D'après ce que je comprends, Azure Functions semble se chevaucher avec les fonctionnalités Azure Webjobs et j'ai du mal à comprendre quand choisir entre Function et Webjob:
À la différence des Webjobs, les fonctions ne peuvent être déclenchées que par un logiciel, il n'a pas été conçu pour exécuter un processus continu (mais vous pouvez écrire du code pour créer une fonction continue).
Vous pouvez écrire des fonctions Web et des fonctions dans de nombreux langages (C #, node.js, python ...), mais vous pouvez écrire votre fonction à partir du portail Azure afin qu'il soit plus facile et plus rapide de développer et de déployer une fonction. .
Les tâches Web s'exécutent en tant que processus d'arrière-plan dans le contexte d'une application Web, d'une API ou d'une application mobile App Service, alors que les fonctions s'exécutent à l'aide d'un plan de service Classic/Dynamic App.
En ce qui concerne la mise à l'échelle, Functions semble offrir davantage de possibilités, car vous pouvez utiliser un plan de services d'application dynamique et vous pouvez redimensionner une seule fonction, tandis que pour un travail Web, vous devez redimensionner l'ensemble de l'application Web.
Donc, bien sûr, il y a une différence de prix. Si une application Web existante est en cours d'exécution, vous pouvez l'utiliser pour exécuter une tâche Web sans aucun coût supplémentaire, mais si je n'ai pas d'application Web existante et que je dois écrire du code pour déclencher une file d'attente. devrais-je utiliser un webjob ou une fonction?
Y a-t-il d'autres considérations à garder à l'esprit lorsque vous devez choisir?
Il y a quelques options ici dans App Service. Je ne parlerai pas des applications logiques ou d'Azure Automation, qui touchent également cet espace.
Cet article est honnêtement la meilleure explication, mais je vais résumer ici.
Les WebJobs déclenchés sont des WebJobs qui ne sont exécutés qu'une fois qu'une URL est appelée ou que la propriété schedule est présente dans schedule.job . Les tâches Web planifiées ne sont que des tâches Web pour lesquelles un travail de planificateur Azure a été créé pour appeler notre URL sur une planification, mais nous prenons également en charge la propriété de planification, comme mentionné précédemment.
Sommaire:
+
Exécutable/Script à la demande+
Exécutions planifiées-
Doit se déclencher via un noeud final .scm-
La mise à l'échelle est manuelle-
VM est toujours requisCes emplois durent éternellement et nous les réveillerons quand ils tomberont en panne. Vous devez activer Always On pour que ces éléments fonctionnent, ce qui signifie qu'ils doivent être exécutés au niveau de base et supérieur.
Sommaire:
+
Exécutable/Script toujours actif-
Requiert toujours activé - Niveau de base et supérieur-
VM est toujours requisCe ne sont pas du point de vue "WebJobs the feature". Pour résumer, nous avons écrit ce kit de développement logiciel ciblant WebJobs qui vous permet d’exécuter du code basé sur des déclencheurs simples. J'en reparlerai plus tard.
Sommaire:
+
Exécutable/Script toujours actif+
Enregistrement plus riche/tableau de bord+
Déclencheurs pris en charge avec des tâches longues-
Requiert toujours activé - Niveau de base et supérieur-
La mise à l'échelle est manuelle à configurer-
Se lancer peut être un peu fastidieux-
VM est toujours requisAzure WebJobs SDK est un SDK complètement distinct de WebJobs, la fonctionnalité de plate-forme. Il est conçu pour être exécuté dans un WebJob, mais peut vraiment être exécuté n'importe où. Nous avons des clients qui les gèrent sur des rôles de travail et même sur des prems ou d'autres clouds, bien que l'assistance ne soit qu'un effort maximum.
Le Kit de développement logiciel (SDK) facilite l’exécution de code en réaction à un événement et permet de lier les services/etc. facile. C’est honnêtement ce qui est le mieux traité dans certains docs , mais le cœur de celui-ci est cette nature "événement" + "code". Nous avons également effectué des travaux d’extensibilité intéressants, mais c’est un objectif secondaire.
Sommaire:
+
Vous pouvez étendre et exécuter ce que vous voulez. Controle total.-
Les trucs HTTP sont un peu débiles, mais ça marcheAzure Functions consiste à exploiter cet objectif principal du kit de développement WebJobs SDK, à l'héberger en tant que service et à faciliter la mise en route pour d'autres langues. Nous présentons également ici le concept "Serverless", car il était tout à fait logique de le faire. Nous savons comment notre SDK évolue pour pouvoir faire des choses intelligentes pour vous.
Azure Functions est une expérience très lourdement gérée. Nous ne soutenons pas le fait d’apporter votre propre hôte. Actuellement, nous ne prenons pas en charge les extensions personnalisées, mais nous en enquêtons. Nous avons des opinions sur ce que vous pouvez et ne pouvez pas faire, mais pour les choses que nous activons, elles sont lisses, faciles à utiliser et à gérer.
La plupart des choses "framework" que nous avons faites pour améliorer les fonctions passent par WebJobs SDK. Par exemple, nous allons télécharger un nouveau NuGet pour WebJobs, ce qui augmente considérablement la vitesse de journalisation, ce qui offre d’énormes avantages pour les utilisateurs du kit de développement WebJobs. Dans les fonctions d’expédition "WebJobs SDK as a Service", nous avons vraiment amélioré de nombreux problèmes d’expérience.
+
Beaucoup de langues supportées+
Mise à l'échelle dynamique entièrement gérée+
Portail facile à utiliser avec UX pour la gestion des connexions/etc.-
Hôte non personnalisable~
S'exécute dans une "application" distincte nécessitant une certaine configuration dans votre référentiel, mais simplifiant considérablement la maintenance à long terme.~
Je suis probablement biaisé puisque Functions est notre dernier et meilleur, mais n'hésitez pas à tirer plus de inconvénients pour Functions my way.
Je vais probablement finir par publier un blog qui en explique un peu plus, mais j'ai essayé de le garder le plus succinct possible pour ce forum.
Les fonctions Azure reposant sur le kit de développement WebJobs SDK fournissent la plupart des fonctionnalités déjà disponibles dans WebJobs, mais avec quelques nouvelles fonctionnalités intéressantes.
En termes de déclencheurs , en plus de ceux déjà disponibles pour WebJobs (par exemple, Service Bus, Files d'attente de stockage, Blobs de stockage, Planifications CRON, WebHooks, EventHub, etc.). File Cloud Storage), les fonctions Azure peuvent être déclenchées en tant qu'API. Et les appels HTTP ne nécessitent pas d'informations d'identification kudu, mais peuvent être authentifiés via Azure AD et des fournisseurs d'identité tiers.
En ce qui concerne les sorties , la seule différence est que les fonctions peuvent renvoyer une réponse lorsqu'elles sont appelées via HTTP.
Les deux prennent en charge une grande variété de langues , notamment: bash (.sh), batch (.bat/.cmd), C #, F #, Node.Js , PHP, PowerShell et Python.
Être Fonctions actuellement dans Aperçu, l'outillage n'est toujours pas idéal. Mais Microsoft y travaille. Espérons que nous aurons la même flexibilité de développement et de test des fonctions localement que nous le faisons actuellement pour WebJobs avec Visual Studio.
L’un des avantages les plus importants et les plus intéressants apportés par Functions est la possibilité d’avoir un plan de service dynamique avec un "= Server (sans serveur)" . model , dans lequel il n'est pas nécessaire de gérer VM instances ou la mise à l'échelle; tout est géré pour nous. De plus, en ne disposant pas d'instances dédiées, nous ne payons que pour les ressources que nous utilisons réellement.
Une comparaison plus détaillée entre les deux ici: https://blog.kloud.com.au/2016/09/14/Azure-functions-or-webjobs/
HTH :)
Selon docs , Azure Functions contient les éléments suivants que WebJobs n'a pas:
Autrement dit: Azure Functions est l'animal le plus récent. Si vous ne possédez pas déjà de plan App Service, je choisirais Fonctions, car pour le long terme, je ne vois aucune raison pour laquelle commencer avec WebJobs serait préférable (les outils de Fonctions ne sont peut-être pas encore aussi stables).
Je voudrais ajouter deux autres points aux anciens et longs messages ci-dessus. si vous choisissez un plan de consommation dans les fonctions Azure, voici les limitations.
Si vous souhaitez exécuter des tâches de plus de 10 minutes, choisissez Webjobs. Azure fonctionne uniquement pendant 5 minutes par défaut, si votre processus dépasse 5 minutes, la fonction Azure lève une exception de délai d'expiration. Vous pouvez augmenter le délai d'attente jusqu'à 10 minutes dans Host.json.
Remarque: Il n'y a pas de problème de délai si vous utilisez les fonctions Azure du plan de services de l'application.
Une autre raison de distinguer est. Si vous utilisez la fonction Azure, votre heure de début initiale sera lente car les machines (conteneurs) sont créées à la volée et détruites une fois utilisées.
Pour éviter tout démarrage à froid, Azure Function Application propose un plan premium dans lequel une instance fonctionnera à tout moment et en fonction du chargement. L'application fonctionnelle démarrera la mise à l'échelle et vous serez facturé pour une instance et d'autres instances basées sur la consommation.
Je me rends compte que je suis très en retard pour le jeu avec cette réponse, mais comme il s’agit toujours d’un excellent résultat de recherche sur Google, je souhaitais donner des indications précises sur ce sujet du point de vue des coûts car il semble que le PO ait des inquiétudes concernant les coûts. Il y a déjà quelques bonnes réponses ici qui parlent des limitations techniques et des détails sur le fonctionnement de chaque service, alors je ne vais pas les reformuler.
Si vous avez absolument besoin de quelque chose qui fonctionne pour "gratuitement" (sans aucun coût supplémentaire à ce que vous avez déjà payé pour votre application Web), alors vous avez deux options:
Si vous êtes préoccupé par les coûts mais non limité à aucun coût , vous avez plus d'options disponibles.
Si vous êtes intéressé par la lecture de certains scénarios spécifiques et par la raison pour laquelle je choisirais l'un (Webjobs, fonctions, services cloud) plutôt que l'autre, j'ai récemment écrit un article de blog sur webjobs vs fonctions vs services cloud .