Après la première journée bien chargée du PHP Tour, je suis arrivé bien en forme pour le deuxième jour et à temps pour le petit déjeuner… Je retrouve rapidement quelques personnes de la veille, on se met dans le bain pour la première conférence qui commence à 8h30…

Le détail des différentes conférences peut être un peu complexe, si vous avez des questions n’hésitez pas à laisser un commentaire !

Application profiling using XDebug, XHProf, Blackfire

Dmytro Naumenko participe activement au développement du coeur de Yii Framework. Il vient de Kyiv en Ukraine et nous a préparé une présentation complète sur le debug et le profiling en PHP. Je connaissais déjà les différents outils présentés mais j’ai appris pas mal de petites choses.
Même si mon esprit a eu du mal à parler anglais dès 8h30, Dmytro propose un contenu clair et ponctué d’exemple très concret.

XDebug est surement l’outil le plus populaire sur le marché aujourd’hui quand on parle de debugger PHP. Depuis 2002, il est toujours en place et apporte un lot de fonctionnalité très utile : points d’arrêts, exécution à distance, intégration dans les principaux IDE du marché…
Je ne connaissais pas l’empreinte de cet outil sur l’environnement d’exécution. Il diminue d’environ 50% les temps d’exécution du code par le simple fait d’être activé ! Il s’agit d’un debugger, il n’a donc aucune utilité sur un environnement de production… Dmytro nous dit très simplement de ne pas optimiser les performances d’exécution du code avec XDebug, car le simple fait de le désactiver est déjà un gros bond en avant.

XHProf, est un outil dédié au profiling. Il permet donc d’étudier le coût de chaque opération lors de l’exécution du code et de connaitre les goulots d’étranglements de l’application. L’impact est négligeable (+10% environ) sur les temps d’exécution, il pourrait donc être utilisé en production pour étudier les performances réelles de l’application, à voir au cas par cas. En effet, dans tous les frameworks, le mode development est plus lent que le mode production, il peut donc être vraiment intéressant d’avoir un retour sur les performances live.
Avec quelques instructions à utiliser dans le code PHP, il est possible d’extraire la pile d’appel et l’impact de toutes les instructions (temps d’exécution, mémoire), tout ce qu’il faut pour agir sur les performances.
Malheureusement, l’extension n’est pas encore compatible avec PHP7 ce qui est un réel handicap aujourd’hui… Il existe plusieurs forks sur GitHub apportant la compatibilité, mais pas de support officiel pour le moment…

Blackfire, est d’abord un fork de XHProf démarré par SensioLabs. C’est devenu un produit commercial édité par la société. L’idée est de rendre l’extension compatible avec les dernières fonctionnalités de PHP tout en proposant une interface web pour analyser les profils plus simple et efficace (les appels de fonctions « inutiles » sont cachés, de l’interactivité est ajoutée avec un peu de JavaScript…).
Il existe un niveau d’utilisation gratuit comprenant tout ce qu’il faut pour une optimisation de premier niveau (performance du code, rétention des données sur 1 jour, possibilité d’utiliser le SDK PHP…). Pour pouvoir étudier la totalité des métriques, il faut passer en mode payant (à partir 19,90€/mois).
Un énorme avantage de Blackfire est d’intégrer des tests de performances dans les tests unitaires, de proposer un client CLI pour lancer des benchmarks et aussi un SDK PHP. Une suite d’outil complète pour répondre aux besoins spécifiques de chacun…

Dmytro termine sa présentation par un rappel sur les points sensibles à surveiller durant le développement :

  • Interaction avec le système de fichier (input / output) ;
  • Requêtes SQL ;
  • Algorithmes trop gourmands ;

Monitoring applications – Evolve from text logs to extensive automatic monitoring

Sven Finke, DevOps chez Shopware, nous propose un retour d’expérience sur la mise en place de l’analyse de logs pour surveiller une application.

Au départ, ils ont choisi de s’appuyer sur une suite d’outils SAAS pour démarrer facilement cette analyse, mais avec le temps et la quantité de données (30Gb de logs par mois) ils sont en train de voir pour migrer vers la suite Elastic en interne.

La présentation est intéressante mais manque un peu de profondeur, Sven nous présente le résultat et l’intérêt de ces pratiques, mais pas trop le cheminement qui a conduit jusqu’à cette solution…

Learning about machine learning

Une présentation très dynamique sur les algorithmes utilisés en machine learning. Joel Lord fait un point sur ce qu’est le machine learning, la différence avec l’intelligence artificielle et les cas d’usage concret de ces algorithmes aujourd’hui (chat bots, analyse big data…).

Joel, présente deux implémentations (Naïve Bayes Classifier et algorithme génétique) réalisés en PHP avec démo à l’appui et code source ici : https://github.com/joellord/php-machinelearning

Un talk pour démystifier ces algorithmes tendances qui font un peu peur. Je pense que Joel a réussi son pari en montrant qu’en quelques centaines de lignes de code il est possible de les utiliser dans la vraie vie (détection de la langue par exemple) !

Synchroniser ses applis avec akeneo/batch

Gregory Planchat nous présente un outil, akeneo/batch développé en interne chez Akeneo. L’objectif est de fournir une interface en ligne de commande pour traiter l’import / export de grosses masses de données. C’est un portage en PHP de la librairie Java Spring Batch.

La présentation manque un peu de concret et se réduit à une explication de la documentation qui est disponible sur le site d’Akeneo.

Ma petite entreprise ne connaît pas la crise !

Juste après le repas, 3 personnes (Pierre Tomasina de ContinuousPHPFabrice Fesch de Melis Technology et Eric Hifi de Roague Wave) nous proposent une présentation conjointe. Ils annoncent le retour de Zend en France à travers Roague Wave et font un point sur l’état des technologies actuelles.

Outillage, automatisation ces trois sociétés éditent des solutions répondant à ces besoins et essaient d’évangéliser ces bonnes pratiques pendant les événements.

Year with Event Sourcing & CQRS

Miro Svrtan nous vient de la Croatie pour parler d’Event Sourcing ! Sa présentation très accessible m’a permis de faire le point sur Event Sourcing et CQRS et de me mettre à jour sur l’intérêt de ces approches.

Il revient sur la mise en place dans un de ses projets : TicketSwap
Il fait un parallèle avec d’autres projets pour bien montrer les cas dans lesquelles ce n’est pas une bonne idée de les utiliser.

Je trouve intéressant aussi qu’il prenne le temps de nous montrer les principaux obstacles à cette approche (taille des données à stocker, structuration des données…).

JWT Authentication To authentication and beyond

Luìs Cobucci est un développeur PHP actif dans la communauté (développement de l’ORM Doctrine et organisateur du meetup AmsterdamPHP) qui travaille actuellement à Amsterdam chez Usabilla.

Il nous présente les Json Web Token, leurs avantages / inconvénients et comment bien les utiliser. Pour moi ces tokens ne sont pas vraiment adaptés pour travailler sur une communication front / back traditionnelle (web app) mais présentent une approche intéressante pour échanger des données entre service de manière sécurisée. En effet sur un échange avec le navigateur, on est réduit à une sorte d’échange de cookie avec une structure différente et je ne vois pas trop l’intérêt de se passer d’une session serveur surtout que la taille d’un JWT est beaucoup plus importante que celle d’un session id.

Par contre, dans le cas d’une API, ces tokens présentent un avantage, ils sont signés et on peut s’assurer que le service qui l’a généré est valide… Je ne m’étais jamais encore posé sur cette techno, mais Luìs m’a donné envie d’essayer !
Il faudra que je teste sur un projet réel pour avoir une meilleure vision de leurs avantages.

Luìs a développé une librairie PHP pour utiliser ces tokens, elle respecte la RFC7519 correspondante, il n’y a plus qu’à s’en servir ?.

Retour sur les Panama Papers et les bases de données graphes

C’est Benoit Simard, developer evangelist chez Neo4J qui nous rejoint pour cette présentation. Il commence par un petit rappel sur les « Panama Papers » (la plus grosse fuite de données de l’histoire avec plus de 3Tb de documents…) et l’analyse qui en a suivi.
C’est ensuite l’International Consortium of Investigative Journalists (ICIJ) qui a pris les choses en main pendant un an pour découper / transformer les données et les rendre exploitable pour une investigation.

Pour l’analyse ils ont utilisé SolR pour la recherche documentaire et Neo4J pour les liens entre les données. Quelques scripts Python permettent de faire le lien entre ces outils. Il est possible de télécharger le jeu de données Neo4J généré pour pouvoir « jouer ».

J’avais forcément entendu parler de cette fuite de données. Elle a donné lieu à plusieurs arrestations et de nombreuses enquêtes. Je n’avais pas conscience de l’ampleur et de la quantité de données que ça représentait. Benoit nous a aussi fait une démonstration du langage de requête Cypher permettant d’explorer les noeuds du graph.

Une présentation intéressante et accessible (peut être un peu trop accessible :)). Je me suis déjà intéressé à Neo4J pour d’autres projets et les questions que j’ai posé à la fin était un peu trop technique, je reste sur ma faim pour cette partie.

The ultimate microservice stack

Dernière conférence de la journée, c’est Julien Bianchi, lead développeur chez PMSIPilot, qui nous fait un retour d’expérience sur l’architecture micro services. Son titre représente une utopie qui n’existe pas, il n’y a pas de solution miracle ou ultime…

Il commence en nous racontant une histoire :

Au sein de PMSIPilot, son équipe a été amenée à développer un service d’authentification centralisé pour gérer les permissions dans leur logiciel.
Ils ont choisi il y a plus de deux ans de s’appuyer sur un logiciel en Java pour gérer cette partie. Ce choix était un mauvais choix, la solution ne tenait pas la charge et était complètement inadaptée à leur besoin.
Une fois en place, ils avaient pieds et poings liés…

Suite à cette déroute, ils ont amorcé un projet de refonte qui a prix du temps, mais ils ont choisi de faire des choix :

  • Se fier aux standards pour tout, toujours ;
  • Utiliser des outils / technos maitrisées, simple et accessible ;
  • Tester un maximum à tous les niveaux ;
  • Faire simple pour que l’équipe soit à même de gérer tout.

Sans grande surprise, ils ont choisi de s’appuyer sur PHP pour leurs développements et de créer un service OAuth2 s’appuyant sur une base de données PostgreSQL.

J’ai découvert dans cette conférence, une approche de simplification et de fiabilisation vraiment très intéressante. À tous les niveaux (choix, développement, déploiement, monitoring…), le projet a été porté par l’équipe ce qui lui donne une force incroyable !

Voici les outils utilisés pour cette refonte :

  • PHP, Composer et l’écosystème, ce serait dommage de s’en priver
  • Silex comme socle
  • HATEOAS pour déclarer des liens entre les ressources de l’API : https://github.com/willdurand/Hateoas
  • JSON Schéma pour valider les structures dans l’API : https://github.com/justinrainbow/json-schema
  • JSON Patch pour mettre à jour les données en envoyant que des fragments : https://jsonpatch.com
  • OAuth2 + JWT pour la couche d’authentification : https://github.com/thephpleague/oauth2-server
  • PostgreSQL : Pour gérer ses fonctionnalités spécifiques (vues matérialisées par exemple)
  • Nginx + HAProxy pour propulser le service et gérer le load balancing
    • Bon à savoir, HAProxy permet de gérer la charge de n’importe quel trafic réseau…

Pour les tests, ils ont combiné des tests unitaires, des tests de charges et des smoke tests pour fiabiliser au maximum :

Une présentation très complète sur cette refonte de service. La prise de recul de Julien est exemplaire et le résultat impeccable !

Le petit mot de la fin

Geoffrey vice président de l’AFUP reprend la parole pour la keynote de fermeture. Une petite présentation de toute l’équipe et quelques annonces à propos du forum PHP qui aura lieu au mois d’octobre clôture ces deux jours très riches en rencontre et en apprentissage…

Même si je n’ai pas gagné d’elephpant (?), je suis très content de ce premier PHP Tour ! On repart avec une jolie tasse fournie par Jolicode, un goodies arrivé dans les temps que tous les participants peuvent prendre avant de partir.

Merci à l’AFUP pour l’organisation et à bientôt pour de prochaines aventures !