Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Retour d'expérience du SymfonyLive 2016 - sfPot à Lille de juin 2016

Retour d'expérience du SymfonyLive 2016 - sfPot à Lille de juin 2016

Alexandre Salomé

June 16, 2016
Tweet

More Decks by Alexandre Salomé

Other Decks in Programming

Transcript

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

    View Slide

  2. 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

    View Slide

  3. 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

    View Slide

  4. 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

    View Slide

  5. 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

    View Slide

  6. 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

    View Slide

  7. 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

    View Slide

  8. 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

    View Slide

  9. 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

    View Slide

  10. 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

    View Slide

  11. 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

    View Slide

  12. 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

    View Slide

  13. 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

    View Slide

  14. 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

    View Slide

  15. 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

    View Slide

  16. 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

    View Slide

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

    View Slide