Voici notre présentation sur les différentes présentations faites au forum PHP 2017 organisé par l'AFUP sur Paris.
Ce résumé permet de cibler les conférences qui vous intéresse afin de pouvoir les revoir directement sur la chaine YouTube de l'AFUP : https://www.youtube.com/user/afupPHP
2. Les femmes de l’IT à l’honneur
Katherine Johnson
spécialisée dans la navigation astronomique informatisée
Grace Hopper
à conçu le premier compilateur puis cobol
Margaret Hamilton
à conçu le système embarqué du programme Apollo
4. PHP 7.2 - Les chiffres
❖ 30 November 2017: 7.2.0 GA (Aujourd’hui ! ;) )
❖ 5.6: security support until Dec 2018
❖ 7.0: end of active support in Dec 2017 - Security support until Dec 2018
❖ 7.1: end of active support in Dec 2018 - Security support until Dec 2019
http://php.net/supported-versions.php
❖ 7.0 => 7.1: ~4-5% faster
7.1 => 7.2: ~4-5% faster Replay - Slides
5. PHP 7.2 - Les changements
❖ Breaking changes : Bye mcrypt (non maintenu depuis 8 ans)
❖ Dépréciations : Count sur des objets non comptable … Détails
❖ Dépréciations : __autoload, create_function(), each() … Le reste ici
❖ Vérification du typage plus stricte : Le typage dans les classes étendues doit
maintenant être compatible
❖ Modification sur les Sessions. “seul les codes inappropriés sont affectés par ce
changement”
8. PHP 7.2 - Les changements
❖ Pour les extensions à charger dans le .ini, pu besoin d’extension
❖ SSL / TLS améliore la sécurité : Détails
❖ Sodium - Nouvelle API cryptographique
❖ Retour attendu dans la définition d’une méthode : function foo(object $obj): object{}
❖ Pour migrer de la 7.1 à 7.2 : Détails
9. L’AB TESTING CHEZ M6 WEB - Le testing
❖ Procédure utilisée en marketing permettant de mesurer l’impact d’un
changement de version
❖ AB - ABC - AAB
❖ Une bonne idée ne suffit pas. Vérifier qu’elle est bon. (ex Etsy & scroll infini)
❖ Choix de la population
❖ Utilisation du canary testing (& pour prod cachée)
“Tester c’est douter mais le doute c’est le début de la sagesse”
Replay - Slides
10. L’AB TESTING CHEZ M6 WEB - Les technos utilisés
❖ Front-end :
➢Web ReactJS
➢Application : natives/ReactNative iOs, Android
➢Boxes FAI français : Free, Orange, Bytel, Sfr / Numéricable, CanalSat
❖ Back-end :
➢API vidéos : Métadonnées videos, cache varnish
■ Symfony
■ Elasticsearch
➢API utilisateurs : Données utilisateurs, pas de cache varnish
■ Symfony
■ Redis
■ Cassandra
11. SIGNAUX, PROCESS ID ET PHP
❖ Manipuler les signaux avec PHP :
➢PCNTL: exploite les processID
➢POSIX : exploite les signaux
❖ 19 signaux standard (SIGKILL non gérable)
❖ Pour gérer les gros script
➢Les PID file
➢Utilisation du pcntl_signal
Conclusion : Arrêter de faire du Ctrl+C ou du kill -9
Replay
12. L’art subtil du nommage par Julien Janvier
❖ Se rapprocher le plus possible des concepts métiers
❖ Le nom d’un méthode / classe doit décrire ce qu’elle fait, et pas ce que le dev
sait qu’elle fait
Ex : On veut savoir si on a assez de pommes pour vivre 1 semaine.
Oui : if ($this->hasEnoughApplesToLiveAWeek()) { … }
Non : if ($this->getNbrApples() > 7) { … }
Replay
13. LE STREAMING D'API : POURQUOI ? COMMENT ?
Solutions pour les applications en temps réel :
❖ Long polling
❖ Webhooks
❖ Websub
❖ Web Sockets
❖ Server Sent Events
Replay
16. LE STREAMING D'API : POURQUOI ? COMMENT ?
Webhooks
Pour
• Presque du temps réel
• Pas besoin de ressources dédiés
• Consomme facilement
• Intégration facile (requête HTTP)
Contre
• Expérience user pauvre (sauf Github)
• Debugging
• Ne marche pas avec tous les clients
• DDoS
17. LE STREAMING D'API : POURQUOI ? COMMENT ?
WebSub (précédemment connu sous PubSubHubbub, PubSub, Push..)
Protocol ouvert & recommandation du W3C depuis avril 2017
Basé sur le Publish / Subscribe pattern comme les webhooks avec des topics
Après le post du callback, vérifie l’identité de la personne avec une requête GET
Exemple le plus connu : Facebook
19. LE STREAMING D'API : POURQUOI ? COMMENT ?
Web-Sockets
Text + Binary
Protocol basé sur TCP (Proxy & LB)
Format message custom
Rien de prévu en cas de déco
Benchmark 8s (500 tweets)
Bidirectionnel
Server-Sent Events
Text
Protocol HTTP
Format définit
Reconnect et Retry
5s
Unidirectional
20. ❖21 ans / 300 magasins physiques en Europe
❖153M € de CA (croissance de 28% par rapport à 2016)
❖6 Features teams (~ 40 devs)
❖Technologies très diverses pour migrer les différentes appli monolithiques
➢Linux / Jenkins / Bamboo / Scrutinizer / Sensiolabs insight / Blackfire / NewRelic
➢PHP(5/7) / Symfony / Redis / RabbitMq / SOLR / Elasticsearch / Logstash / Kibana /
NewRelic / Zabbix / Chef / Docker / Postgresql
➢Plus de 600 000 lignes de codes, 2 mises en production par jour
Maison du Monde et l’architecture orientée services par Marc Hugon
Replay - Slides
21. ❖Freeze du code legacy et développement de features sur la nouvelle solution
❖Choix de WebServices REST
❖1 seul appel pour afficher le nécessaire d’une fiche produit (100Ko de json)
❖Avant : Une requête HTTP, un serveur , une réponse
❖Après : Une requête HTTP, un serveur qui appelle d’autres en faisant des requêtes HTTP
❖Objectifs :
➢Le premier serveur ne doit faire aucune requête (bdd, autre) en dehors des services web
➢Les chaînes d’appels sont limitées à un relais
➢Les web services ont accès à la base de données
Maison du Monde et l’architecture orientée services
22. Retours d’expérience :
❖Releases complexes vis-à-vis des versions des bundles maintenus (conflits, mauvais
composer.lock) => Travail de fond pour automatiser les process
➢Passage de 30 repo Git au mono repo + proxy pour l’analyse Scrutinizer, Sensio Insight
➢Déploiement automatisé par appli interne (Empire)
➢Docker des environnements (./bin/workspace init | ./bin/workspace fix-all et ça tourne)
❖Utilisation d’un hash (correlation_id) pour relier les contexts d’appel dans les logs
❖Temps de réponse moyen : 120ms f. produit / 60ms ws catalog (15 000 et 20 000 call/min)
Maison du Monde et l’architecture orientée services
23. CLIMBING THE ABSTRACT SYNTAX TREE
Comment PHP marche :
PHP code -> Lexer + Parser -> Compiler -> OpCache -> Execute (VM)
Lexer : Regarde mot par mot le langage et retourne des tokens
Zend_language_scanner.l : Lit les mots
Zend_languaga_scanner.l : Met du sens sur les mots
Replay - Slides
24. On a migré nos sites en full HTTPS ! par Sébastien Rogier
❖ Utilisation de Let’s encrypt sauf en prod
❖ Certificats Extended Validation
❖ Ajout de nginx devant Varnish pour le https
❖ Modification de la conf Varnish (mode exclusif vers un mode inclusif)
➢Entête dans le header (tag du type de page) pour mettre en cache
❖ Problème de contenu mixte (preg_replace, csp-report)
❖ Utilisation de http/2 arrêt de concaténation des assets
❖ Gain de trafic de 40% + visites des bots de 100k à 3M de pages
Replay - Slides
25. On a migré nos sites en full HTTPS !
Chantier étalé sur 4 mois mais 15 équivalent JH
26. DÉVELOPPER PLUS RAPIDEMENT AVEC SYMFONY 4 par Kévin Dunglas
❖ Présentation de SF 4.0
➢Release le 30 Novembre 2017 ;)
➢SF 4.0 == SF 3.4 sans la couche de rétro compatibilité
➢N’est pas LTS
➢Installeur de sf supprimé, remplacé par composer create-project
➢Symfony skeleton très allégé
➢PHP 7.1.3 minimum
Replay - Slides
27. DÉVELOPPER PLUS RAPIDEMENT AVEC SYMFONY 4
❖ La structure de SF 4
➢Dossier de config simplifié (1 fichier de config par packages installé)
➢Dossier web renommé en public et ne contient plus que index.php (bye app_…)
➢Dans src, il n’y a plus de bundle (privé, mais toujours les publiques)
➢.env à la place du parameter.yml
28. DÉVELOPPER PLUS RAPIDEMENT AVEC SYMFONY 4
❖ Flex
➢RIP Silex
➢Plugin pour composer
➢Fonctionne avec les bundle SF et les paquets php
➢Génère la structure des répertoires, de configs, des bibliothèques etc…
➢Remplace l’édition standard de SF
29. ❖Mai 2018 : RGPR - Règlement Général sur la Protection des Données
❖Définition de la donnée privée
❖Doit proposer un accord explicite pour la collecte
❖Droit à l’oubli et la portabilité à tout moment
❖Alternatives à la collecte de données (Piwik, leaflet)
❖Description de l’usage des données collectées
❖Incitation à la collecte raisonnée (date d’anniversaire, téléphone)
❖Client et Sous-traitants responsables devant la loi
❖Impossible d’obtenir un service sous la contrainte (adblock, analytics)
❖Sanctions : Max(4% CA groupe, 20M€)
Développeur et protection de la vie privée par Erwan Richard
Replay
31. LES PROCESS QUALITÉ - LE CAS DE SYMFONY par Nicolas Grekas
❖ Un repo monolithique découpé automatique par module
❖ La Core Team s’assure du respect des processus
❖ Versioning sémantique (Majeur.Mineur.Patch)
❖ Release de façon cadencée (Patch 1 mois, mineur 6 mois, majeur 2 ans)
❖ Chaque version a une date de péremption (8 mois, 36 mois LTS)
❖ Backward compatibility dispo sur http://symfony.com/bc
❖ Backward compatibility promise : Dans les version Mineur, toutes les interfaces
public/protected ne changent pas
❖ Explications du processus pour migrer des versions majeurs de SF
Replay
32. ❖9 Pays
❖4 500 Producteurs
❖170 000 Membres actifs
❖30 000 Commandes par semaine
❖20 Devs
Les hexagones de la Ruche qui dit Oui ! par Benoît Merlet
33. ❖Refonte d’un projet monolithique piloté en DDD
❖Problèmes :
➢Paradoxalement, on ne voit pas le métier
➢Les fichiers grossissent verticalement
❖Objectif de limiter la charge cognitive quand on modifie du
code
❖1ere tentative en µservice => FAIL
➢Notre équipe est de taille trop modeste pour le moment.
Les hexagones de la Ruche qui dit Oui !
35. Conseils
❖Utilisation d’événements métier pour interagir avec les autres
contextes
❖Eviter de coupler les contextes (relation Doctrine) => objets
valeurs
❖Nommer de la même manière les concepts
❖Ecrire du code facile à supprimer plutôt que du code facile à
étendre
Les hexagones de la Ruche qui dit Oui !
36. 19 MILLIONS DE RECHERCHES PAR JOUR @ MEETIC
par Sébastien LE GALL
❖ Présentation du moteur d’indexation
❖ La gestion d'événements et des microservices
❖ Explication de l’orchestration de Kafka, Symfony et ElasticSearch pour
maintenir un index en temps réel
Replay
37. ❖Début en 2001 / actif dans 15 pays / Leader du dating en europe
❖Plusieurs millions d’utilisateurs actifs par mois
❖150 Devs
❖2 datacenters / 900 serveurs
❖Refonte du projet monolithique (PHP 4 puis 5.3) vers des Micro services
➢Angular / Symfony 3 / Bus d’événement + consommateur en Scala / Bdd indépendantes
➢Un super service défini pour la recherche (recherche avancée et shuffle)
19 MILLIONS DE RECHERCHES PAR JOUR @ MEETIC
38. ❖Développement via DDD et bounded Contexts
❖1 domain = 1 Micro Service (Picture / Profile / Inbox / ... )
➢Responsable de sa donnée et de ses données mises à jour
➢Exception pour le microservice search (celui ci est écrit en Scala pour les perfs)
➢Résolution de conflits à l’écriture dans le bus d’événement
19 MILLIONS DE RECHERCHES PAR JOUR @ MEETIC
39. ❖Fortes contraintes sur le moteur de recherche (sources différentes, gestion de l’index)
❖Apache Spark (cluster computing) pour recréer l’index dans ElasticSearch (7-8h en php -
> 20 - 25 min)
❖Utilisation de twig pour templater le json à générer le contenu des requêtes Elastic
❖La fonction métier shuffle parse le profil pour lancer des recherches Elastic et retourner
des matchs
➢Utilisation des promises de guzzle pour paralléliser les appels vers les autres µservices
19 MILLIONS DE RECHERCHES PAR JOUR @ MEETIC
40. ❖Le moteur de recherche est en fait cross-domain
❖L’indexation et la recherche de données implique de dupliquer la logique business
❖Pour éviter la dépendance avec les autres µservices on duplique parfois la donnée
19 MILLIONS DE RECHERCHES PAR JOUR @ MEETIC
41. Réécriture de code vieux de 17 ans par Anna Filina
❖ “La seule limite est votre patience”
Replay - Slides
42. Réécriture de code vieux de 17 ans
En moyenne
❖3000 - 6000 lignes de code
❖Moitié commentée “juste au cas”
❖Méthodes de 800 lignes
❖Parfois pas de classes
Son max
❖5 000 classes
❖20 0000 méthodes
❖1 500 000 lignes de code
Stratégie
❖Réécriture progressive (classe, feature, appel http)
❖Exécution du code côte à côte (partage de BD/session mod_rewrite)
❖Enlever les doublons au plus vite
43. Log me now par Kévin Gomez
❖ Actionable Logs
❖ Correlate Logs
Replay - Slides
44. REFACTHON
❖ Monter en compétence de l’équipe via un cérémonial
❖ Refactoring d’équipe de 30m max
❖ Partage de connaissances et de pratiques
❖ Approche qui se permet de se passer de tests unitaires
❖ Règles : Conception inchangée / Iso Fonctionnelle / Iso Bug
Replay
45. Faut il faire du travail de qualité ? par Jean François Lépine
❖ 80% du budget d’un projet -> résolution de bugs
❖ Coût d’un défaut
❖ Investir sur la démarche qualité permet de réduire le coût global du projet
❖ Prioriser ce qui est le plus visible
❖ Rendre les développeurs heureux
❖ Définition et mesure des objectifs
Replay - Slides
46. Le langage objet passé présent futur par Sophie Beaupuis
❖ Historique de l’évolution des langages objets
❖ Nouveau concept : POE - Programmation Orientée à l’Est (Tell don’t ask)
➢Mettre l’intelligence dans les objets
➢Celui qui détient la donnée, fait l’action
Ex :
Pour récupérer une chambre libre au 3è etage, l'hôtel demande à chaqu’une des
objets chambres si elles sont libres et celles qui détiennent la donnée, répondent
et exécutent l’ordre
Github - Replay - Slides
47. GIT, VERS L’INFINI ET AU-DELÀ !
Alias
• simple
• peu de logique
• pas de configuration
• plutôt local
• complexe a partagé
Extension
• ± complexe
• logique
• configuration
• dans votre langage de dev
• facile à distribuer
Replay - Slides