Slide 1

Slide 1 text

SymfonyLive 2016 - Retour d’expérience Alexandre Salomé - Luc Vieillescazes - Juin 2016

Slide 2

Slide 2 text

Monolith Repositories with Git Fabien Potencier ● Le mono-dépôt est utilisé par Google et Facebook ● Deux approches : mono-dépôt ou multi-dépôts ● Le découpage d’un dépôt est compliqué et demande beaucoup d’expérience ○ On sépare ou on fusionne en fonction des découvertes ● Les avantages du mono-dépôt : ○ Atomic Massive Changes (standard de codage, couplage d’une modification) ○ Pas limité au PHP : PHP, Javascript, Go, Python, Java… ○ Plus facile de comprendre les tenants et aboutissants des modifications ○ Moins de management : 1 outil de ticket, 1 dépôt, 1 version ○ Pas de gestion de dépendances (pas de multi-versions) - exemple avec composer ● Multi-dépôt a des avantages (taille humaine, ACL, tests automatisés) ● Symfony = mono-dépôt et multi-dépôts ● Subtree split a montré ses limites sur Symfony ● Fabien a développé un outil en Go : splitsh - le contacter pour plus d’infos. Jeudi - 09:15 Vidéo

Slide 3

Slide 3 text

Guard dans la vraie vie Jérémy Romey ● Nouveau composant (2.8, 3.0) ● Facilite la création d’une méthode d’authentification ● Une seule classe à implémenter (contre 3 avant) Jeudi - 10:00 Slides

Slide 4

Slide 4 text

R2D2 to BB8 Vincent Chalamon ● La migration progressive est un sujet complexe ● Méthode de migration progressive utilisée ○ On crée le modèle cible et les IHM cibles (20%) ○ On migre les données (80%) ● Des nouvelles bonnes pratiques ○ Sémantique de données ○ Tests unitaires et fonctionnels ○ Échouer, c’est cool ! ○ MVP sur le produit ○ Socle technique est durable ● Utilisation d’un LegacyBundle ● 3 étapes ○ Loaders ○ Transformers ○ Double écriture. Jeudi - 11:10 Slides

Slide 5

Slide 5 text

PHP Meminfo ou la chasse aux memory leak Benoit Jacquemont ● L’avantage de PHP : on traite une requête PHP, on jète tout ● Mais parfois, les traitements sont plus longs (les tâches CRON) ● Explications sur la gestion de mémoire en PHP ○ Refcount ○ Références cycliques ● Présentation d’une extension PHP : meminfo ○ Permet de connaître l’état de la mémoire ○ Identifier les sources de fuite mémoire ● Quelques bonnes pratiques Jeudi - 11:55 Slides

Slide 6

Slide 6 text

Retour d'expérience Reactive Architecture et Microservices Fabien Meurillon ● Présentation des architectures SOA ○ Une application = Un domaine métier ○ Probablement pas plus de 5 aggrégats ● The reactive manifesto ○ Responsive, resilient, elastic, message driven ● Canonical Data Model ○ Une représentation au delà des langages ● ApiBundle : l’ambassadeur d’un micro-service ● Utilisation d’un ESB pour lier ces briques. Jeudi - 14:30 Slides

Slide 7

Slide 7 text

Le réveil du Workflow Grégoire Pineau ● Nouveau composant Symfony : Workflow ● Né le 1er décembre 2013 ● Explications sur la méthode de développement ○ Lire le code ○ Échanger avec la communauté ○ Analyser les solutions existantes (Finite) ● Choix de workflow net ○ Extension des réseaux de Petri ○ Toutes les fonctionnalités ne sont pas implémentées. Jeudi - 15:15 Slides - Démo

Slide 8

Slide 8 text

ElasticSearch chez BlaBlaCar Olivier Dolbeau ● Utilisation intensive chez BlaBlaCar ○ Recherche à facettes = 5 millions de recherche par mois, 2 millions d’indexation par mois ○ Création d’alertes ○ Logs système et applicatif ○ Routes favorites, axes populaires ○ FAQ ● Techniques avancées pour le moteur de recherche ○ Aggrégats Jeudi - 16:30 Slides

Slide 9

Slide 9 text

Performance au quotidien dans un environnement Symfony Xavier Leune ● 700 millions de pages vues par mois → Performance indispensable ● Choix de Symfony ● Non-choix de Doctrine → no-RM = requêtes SQL ● ESI + Cache HTTP (utilisation de la validation, 304 Not Modified) ● Pas de compilation en production ● Déploiement automatisé ● Utilisation de Blackfire ○ Tests de performance automatisés Jeudi - 17:15 Slides

Slide 10

Slide 10 text

PSR-6 & Symfony Cache : de la perf en standard Nicolas Grekas PSR-6 ● Nouveau standard du FIG (Framework Interop Group) pour le cache ● Désigné pour des besoins simples et intermédiaires ● 2 interfaces: CacheItemPoolInterface et CacheItemInterface Symfony Cache ● Implémentation stricte de la PSR ● Plusieurs Adapters ○ Apcu, Array, Redis, Doctrine, etc.. ● Rapide ● Intégration et QA Symfony ! ● Plus que PSR dans le futur. Vendredi - 09:45 Slides

Slide 11

Slide 11 text

Sécurité web: pirater pour mieux protéger Alain Tiemblo Password Hashing → Utiliser un “salt” par utilisateur + un bon algo Brute Force Password Reset (savoir si un utilisateur a un compte sur le site) → Toujour un message de sucès, limiter le nombe de reset par jour Brute Force Login → Limiter le nombre d’essai par email et durée Cross-Site Scripting (XSS) → Sanitize (HTMLPurifier), ne pas utiliser “raw”, utiliser des cookies “HttpOnly” Clickjacking → Utiliser le header “X-Frame-Options” SMS Verification Hacks → Bloquer le nombre d’essai et la durée de validité. Limiter l’envoi de SMS ! Envoyer le contexte avec le code de vérification Cross-Site Request Forgery (CSRF) → Token CSRF (form + login) Website Crawling → difficile à protéger… Stratégie par temps / IP / Autres et donner un score à chaque règle. Afficher un CAPTCHA en cas de dépassement. Vendredi - 10:55 Slides

Slide 12

Slide 12 text

Aller plus loin avec Doctrine2 André Tapia Etendre le vocabulaire DQL: Ajouter des fonctions comme IFNULL() Events: LifeCycleCallbacks ({pre,post}Persist, {pre,post}Update, {pre,post} Remove, postLoad) et autres (loadClassMetadata, {pre,on,post}Flush) Optim performance - “Clear” la Unit Of Work - Désactiver le logger SQL - Transaction autour d’une boucle, commit à la fin - Select “partial” Développer plus rapidement: - Hydrator custom - Filters Vendredi - 11:40 Slides

Slide 13

Slide 13 text

Refondre un moteur de règles avec l'expression language de symfony2 ABBAS Hussein Objectif: Scorer une transaction de carte bleue avec un moteur de règles Point de départ, “Ruler”: - Lent - Expressions écrites en json - Impossibilité de faire un “AND” et un “OR” Passage de “Ruler” à l’ExpressionLanguage: - 450 loc → 15 loc pour le moteur - Règles en langage naturel (+ court et + compréhensible) - 2 fois plus rapide Vendredi - 14:15 Slides

Slide 14

Slide 14 text

Sécurité et HTTP Romain Neutron Sécurisation côté client ● X-XSS-Protection ⇒ Filtre anti XSS dans le navigateur ● X-Content-Type-Options ⇒ Application strict du type MIME (plus de détection auto par le navigateur) ● X-Frame-Options ⇒ Empêche le clickjacking en empechant l’affichage de votre site dans une iframe ● Strict-Transport-Security ⇒ HTTS obligatoire ● Content-Security-Policy ⇒ Limiter ce qui peut-être executé dans le navigateur + Subresource Integrity ⇒ Préciser le hash des resources qui seront chargées + Public Key Pinning ⇒ protection contre l’usurpation d’identité contre les certificats frauduleux émis par des autorités de certification compromises. Vendredi - 15:00 Slides

Slide 15

Slide 15 text

Construire des applications cloud natives Ori Pekelman ● Passage d’une stack LAMP à une stack NVMPESRRKCCDX ○ Nginx, Varnish, MariaDB/Postgres, PHP-FPM, Symfony, NodeJS, ElasticSearch/Solr, Redis/RabbitMQ/Kafka, Ceph/Gluster, Docker/LXC ● Des technologies utiles pour créer une application scalable/distribuable ○ Frontend et caches HTTP ○ Bases de données ● Slides très fournies et complètes ● Ori, il est vraiment drôle. Vendredi - 16:10 Slides

Slide 16

Slide 16 text

Références Merci à SensioLabs pour ces 2 jours et merci aux sponsors pour l’animation ! Le dépôt officiel : https://github.com/SymfonyLive/paris-2016-talks

Slide 17

Slide 17 text

C’était bien, on y retournera Merci, c’est fini