SlideShare une entreprise Scribd logo
1  sur  48
Apéro PHP
du 30 /11/2017
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
Le premier jour
26 octobre 2017
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
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”
PHP 7.2 - Les changements
❖ Cast array -> object
$array = ['foo','bar','sample_key' => 'baz'];
$object = (object) $array;
echo $object->sample_key.' ';
echo $object->{0};
PHP 7.1 :
baz
Notice: Undefined property: stdClass::$0
PHP 7.2 :
baz
foo
PHP 7.2 - Les changements
❖ Cast object -> array
$object = new stdClass();
$object->{0} = 'foo';
$object->bar = 'baz';
$array = (array) $object;
var_dump($array);
echo $array[0];
PHP 7.1 :
array(2) { ["0"]=> string(3) "foo"
["bar"]=> string(3) "baz" }
Notice: Undefined offset: 0 in ...
PHP 7.2 :
array(2) { [0]=> string(3) "foo"
["bar"]=> string(3) "baz" }
foo
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
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
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
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
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
LE STREAMING D'API : POURQUOI ? COMMENT ?
Solutions pour les applications en temps réel :
❖ Long polling
❖ Webhooks
❖ Websub
❖ Web Sockets
❖ Server Sent Events
Replay
LE STREAMING D'API : POURQUOI ? COMMENT ?
Long polling
LE STREAMING D'API : POURQUOI ? COMMENT ?
Webhooks
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
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
LE STREAMING D'API : POURQUOI ? COMMENT ?
Push Technologies
Web-Sockets
Server-Sent Events
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
❖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
❖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
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
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
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
On a migré nos sites en full HTTPS !
Chantier étalé sur 4 mois mais 15 équivalent JH
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
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
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
❖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
Le deuxième jour
27 octobre 2017
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
❖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
❖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 !
Architecture hexagonale
Les hexagones de la Ruche qui dit Oui !
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 !
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
❖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
❖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
❖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
❖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
Réécriture de code vieux de 17 ans par Anna Filina
❖ “La seule limite est votre patience”
Replay - Slides
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
Log me now par Kévin Gomez
❖ Actionable Logs
❖ Correlate Logs
Replay - Slides
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
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
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
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
Merci
Des questions ?
Abonnez vous !
https://www.youtube.com/user/afupPHP
Retrouvez la présentation ici :

Contenu connexe

Tendances

Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinLudovic Piot
 
Développement avec Intégration continue:Git, Jenkins, Tomcat, CentOS, ubuntu
Développement avec Intégration continue:Git, Jenkins, Tomcat, CentOS, ubuntuDéveloppement avec Intégration continue:Git, Jenkins, Tomcat, CentOS, ubuntu
Développement avec Intégration continue:Git, Jenkins, Tomcat, CentOS, ubuntuAhmed Archive
 
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016Fabien Arcellier
 
Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Jérôme Petazzoni
 
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...Introduction à Docker et utilisation en production /Digital apéro Besançon [1...
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...Silicon Comté
 
Varnish : augmentez la vitesse de votre site Web avec l'arme secrète du Web -...
Varnish : augmentez la vitesse de votre site Web avec l'arme secrète du Web -...Varnish : augmentez la vitesse de votre site Web avec l'arme secrète du Web -...
Varnish : augmentez la vitesse de votre site Web avec l'arme secrète du Web -...Web à Québec
 
[FR] Les requêtes HTTP de l'extrême
[FR] Les requêtes HTTP de l'extrême[FR] Les requêtes HTTP de l'extrême
[FR] Les requêtes HTTP de l'extrêmeOVHcloud
 
Architecture d'annuaire hautement disponible avec OpenLDAP
Architecture d'annuaire hautement disponible avec OpenLDAPArchitecture d'annuaire hautement disponible avec OpenLDAP
Architecture d'annuaire hautement disponible avec OpenLDAPLINAGORA
 
20200225 bbl-docker-packaging-natif
20200225 bbl-docker-packaging-natif20200225 bbl-docker-packaging-natif
20200225 bbl-docker-packaging-natifHenri Gomez
 
Mariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDCMariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDCChristophe Villeneuve
 
Open Recipes - hubs : du packaging en solo à l'industrialisation du packaging
Open Recipes - hubs : du packaging en solo à l'industrialisation du packaging Open Recipes - hubs : du packaging en solo à l'industrialisation du packaging
Open Recipes - hubs : du packaging en solo à l'industrialisation du packaging Anne Nicolas
 
Installation de PHP
Installation de PHPInstallation de PHP
Installation de PHPMoncef Essid
 
Julien Maitrehenry - Docker, ça mange quoi au printemps
Julien Maitrehenry - Docker, ça mange quoi au printempsJulien Maitrehenry - Docker, ça mange quoi au printemps
Julien Maitrehenry - Docker, ça mange quoi au printempsWeb à Québec
 
MSCS : Hyperconvergence avec Windows Server 2016
MSCS : Hyperconvergence avec Windows Server 2016MSCS : Hyperconvergence avec Windows Server 2016
MSCS : Hyperconvergence avec Windows Server 2016MickaelLOPES91
 

Tendances (20)

Squid
SquidSquid
Squid
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
 
Zabbix
ZabbixZabbix
Zabbix
 
Présentation Docker
Présentation DockerPrésentation Docker
Présentation Docker
 
Développement avec Intégration continue:Git, Jenkins, Tomcat, CentOS, ubuntu
Développement avec Intégration continue:Git, Jenkins, Tomcat, CentOS, ubuntuDéveloppement avec Intégration continue:Git, Jenkins, Tomcat, CentOS, ubuntu
Développement avec Intégration continue:Git, Jenkins, Tomcat, CentOS, ubuntu
 
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
 
Livre blanc docker
Livre blanc docker Livre blanc docker
Livre blanc docker
 
Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Docker en Production (Docker Paris)
Docker en Production (Docker Paris)
 
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...Introduction à Docker et utilisation en production /Digital apéro Besançon [1...
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...
 
Squid squid guard
Squid squid guardSquid squid guard
Squid squid guard
 
Varnish : augmentez la vitesse de votre site Web avec l'arme secrète du Web -...
Varnish : augmentez la vitesse de votre site Web avec l'arme secrète du Web -...Varnish : augmentez la vitesse de votre site Web avec l'arme secrète du Web -...
Varnish : augmentez la vitesse de votre site Web avec l'arme secrète du Web -...
 
[FR] Les requêtes HTTP de l'extrême
[FR] Les requêtes HTTP de l'extrême[FR] Les requêtes HTTP de l'extrême
[FR] Les requêtes HTTP de l'extrême
 
Architecture d'annuaire hautement disponible avec OpenLDAP
Architecture d'annuaire hautement disponible avec OpenLDAPArchitecture d'annuaire hautement disponible avec OpenLDAP
Architecture d'annuaire hautement disponible avec OpenLDAP
 
20200225 bbl-docker-packaging-natif
20200225 bbl-docker-packaging-natif20200225 bbl-docker-packaging-natif
20200225 bbl-docker-packaging-natif
 
Mariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDCMariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDC
 
Open Recipes - hubs : du packaging en solo à l'industrialisation du packaging
Open Recipes - hubs : du packaging en solo à l'industrialisation du packaging Open Recipes - hubs : du packaging en solo à l'industrialisation du packaging
Open Recipes - hubs : du packaging en solo à l'industrialisation du packaging
 
Infrastructure as code drupal
Infrastructure as code drupalInfrastructure as code drupal
Infrastructure as code drupal
 
Installation de PHP
Installation de PHPInstallation de PHP
Installation de PHP
 
Julien Maitrehenry - Docker, ça mange quoi au printemps
Julien Maitrehenry - Docker, ça mange quoi au printempsJulien Maitrehenry - Docker, ça mange quoi au printemps
Julien Maitrehenry - Docker, ça mange quoi au printemps
 
MSCS : Hyperconvergence avec Windows Server 2016
MSCS : Hyperconvergence avec Windows Server 2016MSCS : Hyperconvergence avec Windows Server 2016
MSCS : Hyperconvergence avec Windows Server 2016
 

Similaire à Retour AFUP du forumphp 2017

[Sildes] plateforme centralisée d’analyse des logs des frontaux http en temps...
[Sildes] plateforme centralisée d’analyse des logs des frontaux http en temps...[Sildes] plateforme centralisée d’analyse des logs des frontaux http en temps...
[Sildes] plateforme centralisée d’analyse des logs des frontaux http en temps...Guillaume MOCQUET
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !VISEO
 
wallabag, comment on a migré vers symfony3
wallabag, comment on a migré vers symfony3wallabag, comment on a migré vers symfony3
wallabag, comment on a migré vers symfony3Nicolas Lœuillet
 
Meetup du 21 septembre 2017
Meetup du 21 septembre 2017Meetup du 21 septembre 2017
Meetup du 21 septembre 2017AFUP_Limoges
 
Développer et déployer une application php maintenable
Développer et déployer une application php maintenableDévelopper et déployer une application php maintenable
Développer et déployer une application php maintenableLeTesteur
 
gRPC, ECHANGES A HAUTE FREQUENCE !
gRPC, ECHANGES A HAUTE FREQUENCE !gRPC, ECHANGES A HAUTE FREQUENCE !
gRPC, ECHANGES A HAUTE FREQUENCE !Carles Sistare
 
gRPC, échange à haute fréquence!
gRPC, échange à haute fréquence!gRPC, échange à haute fréquence!
gRPC, échange à haute fréquence!David Caramelo
 
HTML5 W3C Conference Euratechnologie
HTML5 W3C Conference EuratechnologieHTML5 W3C Conference Euratechnologie
HTML5 W3C Conference Euratechnologiewyggio
 
De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)Restlet
 
DevoxxFR 2019: Consul @Criteo
DevoxxFR 2019: Consul @CriteoDevoxxFR 2019: Consul @Criteo
DevoxxFR 2019: Consul @CriteoPierre Souchay
 
Conférence AFUP 20minutes.Fr
Conférence AFUP 20minutes.FrConférence AFUP 20minutes.Fr
Conférence AFUP 20minutes.FrOxalide
 
Php forum 2017 - Maisons du Monde
Php forum 2017 - Maisons du MondePhp forum 2017 - Maisons du Monde
Php forum 2017 - Maisons du Mondemarchugon
 
Suivre l'évolution du covid19 sur RaspberryPi avec la suite Elastic
Suivre l'évolution du covid19 sur RaspberryPi avec la suite ElasticSuivre l'évolution du covid19 sur RaspberryPi avec la suite Elastic
Suivre l'évolution du covid19 sur RaspberryPi avec la suite ElasticIdriss Neumann
 
Astroclermont @clermontech
Astroclermont @clermontechAstroclermont @clermontech
Astroclermont @clermontechBaptiste MOREAU
 
Développer et déployer WordPress en environnement microsoft
Développer et déployer WordPress en environnement microsoftDévelopper et déployer WordPress en environnement microsoft
Développer et déployer WordPress en environnement microsoftLeTesteur
 
La diffusion vidéo avec le Cloud Azure
La diffusion vidéo avec le Cloud AzureLa diffusion vidéo avec le Cloud Azure
La diffusion vidéo avec le Cloud AzureMicrosoft
 
Motwin - cto crunch - 141205 - Optimiser la latence applicative mobile
Motwin -  cto crunch - 141205 - Optimiser la latence applicative mobileMotwin -  cto crunch - 141205 - Optimiser la latence applicative mobile
Motwin - cto crunch - 141205 - Optimiser la latence applicative mobileCommunity motwin
 
La mise en cache et ses secrets
La mise en cache et ses secretsLa mise en cache et ses secrets
La mise en cache et ses secretsAymeric Bouillat
 

Similaire à Retour AFUP du forumphp 2017 (20)

[Sildes] plateforme centralisée d’analyse des logs des frontaux http en temps...
[Sildes] plateforme centralisée d’analyse des logs des frontaux http en temps...[Sildes] plateforme centralisée d’analyse des logs des frontaux http en temps...
[Sildes] plateforme centralisée d’analyse des logs des frontaux http en temps...
 
Automatiser l'ère post-dev
Automatiser l'ère post-devAutomatiser l'ère post-dev
Automatiser l'ère post-dev
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !
 
wallabag, comment on a migré vers symfony3
wallabag, comment on a migré vers symfony3wallabag, comment on a migré vers symfony3
wallabag, comment on a migré vers symfony3
 
Meetup du 21 septembre 2017
Meetup du 21 septembre 2017Meetup du 21 septembre 2017
Meetup du 21 septembre 2017
 
Développer et déployer une application php maintenable
Développer et déployer une application php maintenableDévelopper et déployer une application php maintenable
Développer et déployer une application php maintenable
 
gRPC, ECHANGES A HAUTE FREQUENCE !
gRPC, ECHANGES A HAUTE FREQUENCE !gRPC, ECHANGES A HAUTE FREQUENCE !
gRPC, ECHANGES A HAUTE FREQUENCE !
 
gRPC, échange à haute fréquence!
gRPC, échange à haute fréquence!gRPC, échange à haute fréquence!
gRPC, échange à haute fréquence!
 
HTML5 W3C Conference Euratechnologie
HTML5 W3C Conference EuratechnologieHTML5 W3C Conference Euratechnologie
HTML5 W3C Conference Euratechnologie
 
De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)
 
DevoxxFR 2019: Consul @Criteo
DevoxxFR 2019: Consul @CriteoDevoxxFR 2019: Consul @Criteo
DevoxxFR 2019: Consul @Criteo
 
Conférence AFUP 20minutes.Fr
Conférence AFUP 20minutes.FrConférence AFUP 20minutes.Fr
Conférence AFUP 20minutes.Fr
 
Php forum 2017 - Maisons du Monde
Php forum 2017 - Maisons du MondePhp forum 2017 - Maisons du Monde
Php forum 2017 - Maisons du Monde
 
Suivre l'évolution du covid19 sur RaspberryPi avec la suite Elastic
Suivre l'évolution du covid19 sur RaspberryPi avec la suite ElasticSuivre l'évolution du covid19 sur RaspberryPi avec la suite Elastic
Suivre l'évolution du covid19 sur RaspberryPi avec la suite Elastic
 
Astroclermont @clermontech
Astroclermont @clermontechAstroclermont @clermontech
Astroclermont @clermontech
 
REX Openshift à la Poste
REX Openshift à la PosteREX Openshift à la Poste
REX Openshift à la Poste
 
Développer et déployer WordPress en environnement microsoft
Développer et déployer WordPress en environnement microsoftDévelopper et déployer WordPress en environnement microsoft
Développer et déployer WordPress en environnement microsoft
 
La diffusion vidéo avec le Cloud Azure
La diffusion vidéo avec le Cloud AzureLa diffusion vidéo avec le Cloud Azure
La diffusion vidéo avec le Cloud Azure
 
Motwin - cto crunch - 141205 - Optimiser la latence applicative mobile
Motwin -  cto crunch - 141205 - Optimiser la latence applicative mobileMotwin -  cto crunch - 141205 - Optimiser la latence applicative mobile
Motwin - cto crunch - 141205 - Optimiser la latence applicative mobile
 
La mise en cache et ses secrets
La mise en cache et ses secretsLa mise en cache et ses secrets
La mise en cache et ses secrets
 

Retour AFUP du forumphp 2017

  • 1. Apéro PHP du 30 /11/2017
  • 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
  • 3. Le premier jour 26 octobre 2017
  • 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”
  • 6. PHP 7.2 - Les changements ❖ Cast array -> object $array = ['foo','bar','sample_key' => 'baz']; $object = (object) $array; echo $object->sample_key.' '; echo $object->{0}; PHP 7.1 : baz Notice: Undefined property: stdClass::$0 PHP 7.2 : baz foo
  • 7. PHP 7.2 - Les changements ❖ Cast object -> array $object = new stdClass(); $object->{0} = 'foo'; $object->bar = 'baz'; $array = (array) $object; var_dump($array); echo $array[0]; PHP 7.1 : array(2) { ["0"]=> string(3) "foo" ["bar"]=> string(3) "baz" } Notice: Undefined offset: 0 in ... PHP 7.2 : array(2) { [0]=> string(3) "foo" ["bar"]=> string(3) "baz" } foo
  • 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
  • 14. LE STREAMING D'API : POURQUOI ? COMMENT ? Long polling
  • 15. LE STREAMING D'API : POURQUOI ? COMMENT ? Webhooks
  • 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
  • 18. LE STREAMING D'API : POURQUOI ? COMMENT ? Push Technologies Web-Sockets Server-Sent Events
  • 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
  • 30. Le deuxième jour 27 octobre 2017
  • 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 !
  • 34. Architecture hexagonale 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
  • 48. Merci Des questions ? Abonnez vous ! https://www.youtube.com/user/afupPHP Retrouvez la présentation ici :