Symfony ExpressionLanguage : Comment utiliser ce composant ?
Le composant Symfony ExpressionLanguage : qu'est-ce que c'est ? Quand et comment l'utiliser ? Comment créer des expressions lors de cas plus complexes ?
Sommaire
Voilà maintenant des années que l'on parle des architectures Serverless. Mais qu'est-ce que cela veut dire précisément ? Et comment développer des applications PHP que l'on peut déployer sur cette architecture ?
L’architecture Serverless est un modèle dans lequel le fournisseur de services Cloud (bien qu'il est possible d'héberger sa propre infrastructure Serverless, nous y reviendrons) est responsable de l’exécution d’un morceau de code en allouant les ressources de manière dynamique.
Le code est généralement exécuté dans des conteneurs Stateless et peut être déclenché par divers événements (requête HTTP, crons, téléchargement d'un document, etc.). Il se présente généralement sous la forme d’une fonction, ainsi Serverless est parfois appelé “Functions as a Service” ou “FaaS”.
L'architecture Serverless peut s'avérer utile dans plusieurs cas :
Le premier avantage que l'on peut constater est qu'il n'y a aucune gestion d'infrastructure et de ressources à réaliser. Vous n'avez pas besoin de faire le provisionning et les upgrades des serveurs car c'est le fournisseur Cloud qui s'en occupe.
Ensuite, vous ne payez que les ressources que vous utilisez. On appelle ça Pay as you go. C'est à dire que vous ne payez les ressources que lorsqu'elles sont en train d'être utilisées. Les containers s’éteignent si aucune fonction n'est appelée pendant un temps donné, vous permettant de faire des économies.
Un autre avantage est la scalabilité de votre plateforme. L'infrastructure s'adapte automatiquement en fonction de la charge.
Il est également simple de faire des déploiements de nouvelles versions de vos applications, ce qui peut contribuer à accélérer les cycles de release.
De plus, cela permet à l'équipe de se concentrer sur le développement de l'application et investir leur énergie et ressources dans le bon fonctionnement de celle-ci.
Enfin, ne pas avoir de containers qui tournent sans qu'il y en ait besoin permet d'économiser de l'énergie et c'est mieux pour la planète !
Un des gros inconvénients que l'on peut constater est le cold start, c'est à dire le temps que mettent les containers à démarrer s'ils étaient éteints lors de l'appel d'une fonction. Actuellement, il varie entre quelques centaines de millisecondes et une seconde. Bien que cela dépende du langage de votre application et de la taille de vos fonctions.
Une autre contrainte est la durée d'exécution maximale d'une fonction. Elle varie en fonction des fournisseurs Cloud (9 min chez Google function, 15 minutes chez AWS Lambda). Il faut donc en tenir compte dans les différents traitements de votre application.
Il existe aussi des limitations liées à la mémoire, la taille maximum des packages que vous déployez et à l'espace disque disponible. Ci-dessous un extrait des limitations d'AWS Lambda pour vous donner une idée.
Un autre point à garder en tête est que le prix de notre infrastructure peut être imprévisible. Etant donné que le fournisseur Cloud s'occupe de tout, nous n'avons aucun contrôle sur la façon dont il gère les ressources. En cas d’événement imprévu qui solliciterait beaucoup nos fonctions serverless, le prix pourrait alors grimper. Rassurez-vous, il est néanmoins possible de créer des alertes et d'être notifié par votre fournisseur Cloud si vous dépassez un certain montant.
Un dernier inconvénient est lié aux tests et à la résolution de bugs de vos fonctions. Cela demande une certaine habitude et parfois l'utilisation de services supplémentaires, tels que AWS SAM par exemple.
Nous allons voir maintenant les principaux acteurs Cloud permettant de déployer des applications PHP sur des infrastructures Serverless.
Actuellement, il est possible de déployer des applications PHP sur des infrastructures Cloud suivantes :
Il existe plusieurs frameworks permettant de déployer une infrastructure Serverless sur Kubernetes. Les plus connus sont :
Je fais ici une mention spéciale à la plateforme Apache OpenWhisk. Il s'agît d'un projet open source supportant nativement le PHP (parmi d'autres langages de programmation), qui est disponible via :
Chaque solution vue ci-dessus vient avec son propre SDK avec lequel il faut se familiariser. Ainsi, si vous changez de plateforme, il faut refaire toutes les configurations et toutes les installations.
Il existe une solution que essaie de centraliser toutes les configurations et d'être aussi agnostique de la plateforme que possible : le framework Serverless.
Le framework Serverless comprend un CLI open source qui permet d'éviter l'installation de multiples SDK.
L'installation du framework Serverless est très rapide et simple :
$ npm install -g serverless $ serverless -v Framework Core: 1.67.3 (standalone) Plugin: 3.6.6 SDK: 2.3.0 Components: 2.29.0
La mise en place et le paramétrage de ce framework dans votre application se font via un fichier serverless.yml
qui ressemble à ceci :
# serverless.yml service: my-service provider: name: aws runtime: nodejs12.x functions: # Your functions hello: events: # The events that trigger this function - http: get hello usersCreate: events: - http: post users/create usersDelete: events: - http: delete users/delete plugins: - serverless-offline
Le plugin serverless-offline
sert à émuler AWS Lambda sur votre machine et vous permet de faire des tests de vos fonctions.
Bien sûr, la configuration n'est pas complètement agnostique du provider que vous auriez choisi, car les options dépendent fortement de celui-ci.
Pour déployer et appeler une fonction avec le framework serverless nous utilisons les commandes suivantes :
$ serverless deploy -v $ serverless invoke -f hello -l
Dans l'article suivant, nous verrons en détails comment déployer une application PHP sur AWS Lambda avec Bref.
Auteur(s)
Marie Minasyan
Astronaute Raccoon @ ElevenLabs_🚀 De retour dans la Galaxie.
Vous souhaitez en savoir plus sur le sujet ?
Organisons un échange !
Notre équipe d'experts répond à toutes vos questions.
Nous contacterDécouvrez nos autres contenus dans le même thème
Le composant Symfony ExpressionLanguage : qu'est-ce que c'est ? Quand et comment l'utiliser ? Comment créer des expressions lors de cas plus complexes ?
Découvrez comment réaliser du typage générique en PHP : introduction et définition du concept, conseils et explications pas-à-pas de cas pratique.
Découvrez un cas d'usage d'intégration d'un CRM avec une application e-commerce, en asynchrone, avec Hubspot et RabbitMQ