SymfonyLive 2023 : retour sur le premier jour
Publié le 29 mars 2023
La semaine dernière, nous avons foulé les marches de la Cité internationale universitaire pour assister au SymfonyLive Paris, un événement auquel nous assistons depuis maintenant plus de 10 ans. Découvrez dans cet article notre résumé des conférences données le premier jour, jeudi 23 mars :
Keynote
Fabien Potencier a lancé le SymfonyLive avec une traditionnelle keynote d’ouverture. Après avoir rappelé qu’une application Web ne se contente pas de répondre à des requêtes HTTP, il nous a présenté un nouveau composant, nommé Scheduler, prévu pour Symfony 6.3.
Ce nouveau composant, proposé par Sergey Rabochiy, repose sur le composant Messenger pour exécuter des tâches récurrentes, sans passer par Cron, ce qui le rend très facile à prendre en main pour quiconque a déjà utilisé Messenger et permet de lancer les tâches dans leur propre thread, et donc de façon asynchrone — dans ce cas, Fabien nous recommande l’utilisation du composant Lock pour éviter les problèmes de concurrence.
Fabien en a profité pour partager quelques astuces permettant de gérer les tâches, comme ajouter un peu d’aléatoire sur les heures de lancement des tâches récurrentes, ce qui permet de lisser la charge sur le serveur.
Retrouvez ses slides ici : https://speakerdeck.com/fabpot/s
Réinventer le composant Console de Symfony
Notre coopérateur Robin Chalas est revenu sur Console, le composant Symfony le plus téléchargé et adopté par de nombreux packages reconnus de l’écosystème PHP (API Platform, Laravel, Composer, Doctrine, PHPStan…).
La conséquence de sa forte utilisation : chaque petit changement est sujet à friction, le moindre bug fix peut casser une multitude de projets. Un mot d’ordre pour revisiter ce composant, laziness :
- Suppression des méthodes setName, setDescription. On passe désormais par l’attribut Symfony AsCommand
- La bonne pratique de plus en plus poussée par Symfony est de passer la configuration des services de façon déclarative
- L’objectif à long terme : se rapprocher de la façon dont on fabrique un controller, passer de plus en plus par les attributs, passer en classe invocable (callable)
La mise à jour du composant est prévue pour la sortie de Symfony 6.3, mais d’ici là plusieurs gros sujets restent à traiter : abolir le couplage Command/Application, simplifier SymfonyStyle, améliorer l’API de flux de sortie (stdout vs stderr) ou encore enrichir l’API de Testing. Toute aide est également la bienvenue pour développer ce projet.
Retrouvez ses slides ici : https://speakerdeck.com/chalasr/reinvent-symfony-console
Bienvenue dans le monde merveilleux des systèmes distribués !
Pascal Martin a présenté au SymfonyLive l’intérêt des systèmes distribués qui permettent notamment une grande flexibilité dans le fonctionnement d’une équipe.
Il revient sur plusieurs principes et notions : la scalabilité (verticale ou horizontale), le sharding (ou comment partitionner les données), le load balancing, le load shedding, la coordination (c’est-à-dire l’ordre d'exécution défini des différentes opérations), la réplication, le pattern Outbox ou encore la résilience : tout casse à un moment ou un autre !
En conclusion, avec les systèmes distribués on ne s’ennuie jamais ! Ils sont inévitables, mais il faut bien définir ses besoins pour ne pas utiliser des services et des outils disproportionnés par rapport à ces derniers.
Il était une fois le composant Workflow
Florence Cauchy nous propose un retour d’expérience de l’utilisation du composant Workflow mis en pratique chez le site e-commerce Sézane. Le composant va permettre de simplifier le développement de l’OMS (Order Management System) du site (tunnel de gestion de commandes du paiement jusqu’à la livraison).
Après être revenue sur la définition du workflow (une série de tâches effectuées dans un ordre précis pour aboutir à un résultat), Florence nous présente un schéma d’utilisation du composant sur le projet, ainsi que quelques concepts comme le MarkingStore ou le guard
.
Retrouvez ses slides ici : https://speakerdeck.com/fcauchy/il-etait-une-fois-le-composant-workflow
Jongler en asynchrone avec Symfony HttpClient
Notre coopératrice Allison Guilhem a mis en lumière au SymfonyLive un cas d’usage avec HttpClient pour consommer des API et envoyer des requêtes de manière synchrone ou asynchrone. HttpClient propose plusieurs fonctionnalités avancées comme des réponses lazy, le multiplexing de ces réponses et une gestion des erreurs par défaut. Il est inter-opérable et extensible via des décorateurs.
Allison nous présente un besoin nécessitant de manipuler les chunks de réponses, dont en sort une problématique de rester asynchrone. Nicolas Grekas a introduit en 2020 l’AsyncDecoratorTrait
comme solution pour étendre notre HttpClient et manipuler un AsyncResponse
. Les chunks sont manipulés via un callable qui sera passé en dernier argument de l'AsyncResponse
. En plus du chunk à manipuler, le callable récupère l’AsyncContext
qui contient le callable lui-même, le client HttpClient, un pointeur sur la réponse et la réponse/chunk.
Des classes surchargeant HttpClient avec l’AsyncDecoratorTrait
sont présentes dans Symfony. l’AsyncDecoratorTraitTest
donne un bon exemple d’utilisation.
Retrouvez ses slides à cette adresse : https://speakerdeck.com/alli83/jongler-en-asynchrone-avec-symfony-httpclient
SQLite en production ? Et si vous réévaluiez vos options
Guillaume Loulier nous a expliqué que SQLite souhaite répondre à plusieurs questions posées par les infrastructures classiques :
- Qui se soucie des règles d’Edgar F. Codd ?
- Quid des ressources et de l’infrastructure ?
- De la mise en réseau ? Du sharding ? Plait-il ?
- Une base de données n’est qu’un empilement de couches
À l’origine SQLite est un projet lancé en août 2000 par D. Richard Hipp, conçu pour résoudre un problème logiciel introduit par IBM. Il a réinventé la roue pour la rendre plus résiliente. C’est un concurrent de fopen et non d’autres SGBD comme Oracle Database, MySQL, etc.
Il nous présente un cas d’usage de SQLite en environnement de production, en détaillant techniquement le système de stockage des données, ainsi que son système de backup (journal) et de logs. Il propose une synchronisation asynchrone de la base de données sur un cloud grâce à l’outil Litestream (écrit en Go).
En conclusion, il ne s’agit pas d’une solution miracle mais elle peut être intéressante à utiliser pour créer par exemple des environnements de recette ou dans des cas précis comme les microservices ou le serverless.
Retrouvez ses slides ici : https://speakerdeck.com/guikingone/sqlite-en-production-et-si-vous-reevaluiez-vos-options
Découvrez prochainement la suite de notre compte-rendu !