La parole est aux speakers : Matthieu Napoli

Publié le

Jusqu’au Forum PHP 2023, retrouvez nos interviews de speakers pour mieux comprendre leur parcours et le sujet qu’ils ou elles aborderont lors de leur conférence !

La conférence

PHP en serverless, comment ça marche sous le capot ?

Bref est un projet open-source qui fait tourner PHP en serverless sur AWS Lambda depuis 2017. Aujourd'hui, Bref est utilisé par des milliers d'utilisateurs et utilisatrices et fait tourner plus de 10 milliard de requêtes et jobs chaque mois.

Mais comment est-ce que ça fonctionne vraiment ? Non, pas juste la démo "hello world" où on prend un Symfony ou Laravel de base et on le déploie en quelques commandes. Je vous propose de soulever le capot et de comprendre comment Bref fonctionne, mais aussi AWS Lambda, les serveurs au dessous, leurs data centers et d'aller jusqu'au "bare metal". Une compilation d'informations publiques, mais aussi d'expériences et de surprises, à maintenir Bref ces 6 dernières années.

Si le serverless vous a toujours paru nébuleux, le serverless n'aura plus rien de magique après ça.

Salle Johnson GHJKLM
13/10/2023
11:40-12:20

Tu as publié il y a quelques mois le chiffre de 10 billions exécutions/mois concernant Bref, peux-tu nous expliquer comment cette mesure se fait ?

Il est possible d’estimer le nombre d’exécutions (requêtes HTTP, jobs asynchrones, cron, etc.) via Bref grâce à une fonctionnalité appelée « Bref Ping ».

Quand une application s’exécute avec Bref sur AWS Lambda, Bref va envoyer un « ping » signifiant qu’une invocation a eu lieu. C’est une sorte d’analytics que j’ai ajoutée il y a plusieurs années, mais avec des contraintes spécifiques en tête : anonyme, respectueux et rapide.

À la différence d’un analytics classique (on a toutes et tous en tête Google Analytics par exemple), aucune information personnelle ou applicative n’est envoyée. Le « payload » est une chaîne de quelques caractères et transmet juste l’information « une invocation a eu lieu ». Donc aucune donnée qui concernerait le code, l’application, les utilisateurs/utilisatrices, etc. Le paquet étant envoyé depuis une invocation AWS Lambda, l’adresse IP source du paquet ne contient pas non plus d’information sensible car AWS Lambda est comme un énorme hébergement mutualisé, les IP publiques d’AWS Lambda sont génériques et inutilisables.

D’autre part, plutôt que d’envoyer l’information via HTTP/HTTPS, le paquet est envoyé via le protocole UDP, en utilisant le format standard « statsd ». À la différence des connexions TCP (le protocole de base sur lequel HTTP s’appuie), UDP est très rapide car il n’établit pas de connexion réseau, et n’attend pas que les paquets aient été envoyés avec succès (aussi appelé « fire and forget »). C’est un protocole parfois utilisé par les jeux multijoueurs temps réel par exemple. Donc, lorsque Bref envoie un ping, les quelques octets sont envoyés sur le réseau (en espérant qu’ils arrivent à destination) et le code passe immédiatement à la ligne suivante. Cela prend 0,1ms. Le paquet est ensuite reçu par un serveur que je maintiens (oui, là on n’est pas serverless) qui incrémente le compteur d’invocations.

Pour encore plus optimiser les choses, le « ping » n’est envoyé qu’une fois sur 100 invocations (via un simple « random » avec 1% de chances). Je multiplie simplement la métrique mesurée par 100 pour avoir l’estimation du nombre d’invocations : avec 10 milliards d’invocations, on peut compter sur un lissage statistique qui donne une bonne approximation. Donc dans 99% des cas, pas de ping. En moyenne, en comptant les 100% des cas, la fonction PHP qui exécute ce ping prend 31 micro-secondes à s’exécuter. Plutôt négligeable, et donc acceptable ! Bien sur, ce « ping » peut se désactiver simplement pour ceux qui préfèrent. Si vous voulez voir le code ou en savoir plus, c’est documenté ici : https://bref.sh/docs/runtimes/#bref-ping

Et tout ça pour quoi ? Avoir une estimation de l’utilisation de Bref a été extrêmement utile pour discuter avec AWS et être pris au sérieux concernant PHP. Oui, AWS Lambda ne supporte toujours pas PHP nativement, mais beaucoup de choses ont été rendues possibles en partie grâce à cette métrique, dont certaines à venir. Au final, AWS se retrouve à parfois pousser l’utilisation de Bref via des articles de blog ou des exemples. Après tout, 10 milliards d’invocations par mois, c’est environ 1 exécution AWS Lambda sur 1000 qui tourne avec PHP 💪

J’avais longtemps hésité avant d’ajouter ce « ping », mais avec le recul ça a été payant. L’analytics a une très mauvaise image à cause des mauvaises pratiques de certains acteurs (Google Analytics en tête) concernant le respect de la vie privée. Mais faire ça correctement est possible, surtout quand ça bénéficie au projet, et donc à tous celles et ceux qui l’utilisent.

Est-ce que la popularité de Bref te permet d’identifier certains pays où il est utilisé alors que tu n’avais pas forcément idée de la présence de communauté PHP là-bas ?

Je n’ai pas cette information, mis à part les statistiques de visites sur https://bref.sh. Mais je retrouve des points commun avec mon « ressenti » sur la communauté autour de Bref : bien sur, les US sont très présents et très orientés Laravel, tout comme l’Inde, c’est probablement lié à la taille de ces pays. Une forte communauté existe en Angleterre, et cela se ressent dans les conférences PHP où Bref est assez souvent mentionné.
La communauté française se retrouve également, cette fois-ci très axée Symfony. Et le 5ème pays avec le plus de visites ? Le Japon, où j’ai pu rencontrer une partie de la communauté Bref récemment, ce qui était pour moi une vraie surprise.

Après tant d’années d’expérience dans le monde de l’open-source, as-tu trouvé un modèle viable avec cette approche ?

Haha 🥲
Chers lecteurs et lectrices, désolé j’ai écrit et réécrit 5 fois ma réponse à cette question, si vous voulez on en parle à l’apéro du Forum PHP ? Il me faudrait 5 pages, et tout ça pour dire que j’en sais pas grand chose, et qu’au final l’open-source n’a rien de spécial : le problème se résume à arriver à vendre des trucs en échange d’argent, et donc c’est de l’entreprenariat. Vivre de l’open-source, c’est arriver à créer une entreprise qui marche. Et il n’existe pas un modèle spécifique à l’open-source qui soit « évident » et réplicable, malgré ce qu’on peut en penser au premier abord. C’est un peu comme dire « t’as qu’à ouvrir une boutique Shopify », ou « t’as qu’à devenir Youtubeur ». Donc à chaque projet de trouver son modèle qui fonctionne (i.e. se vende), qui colle au projet ET qui colle à la personne qui le porte. Ça peut prendre du temps.
Cela dit, personnellement je suis content de ma situation ! J’aurais simplement préféré qu’il existe une réponse plus simple à cette question 🙂

Une conférence présentée par

Matthieu NAPOLI
Matthieu NAPOLI
Matthieu est passionné d'open-source, créateur de Bref, PHP-DI, externals.io, Lift et autres. Il est également l'auteur du cours serverless-visually-explained.com et AWS serverless hero depuis 2021.

Autres Interviews