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

Concevoir des back-offices performants

Concevoir des back-offices performants

Alexandre Salomé

June 26, 2020
Tweet

More Decks by Alexandre Salomé

Other Decks in Programming

Transcript

  1. Concevoir des back-offices
    performants

    View full-size slide

  2. Interactivité
    - Questions dans LiveStorm
    - Traitées par popularité
    - Le chat pour parler entre vous
    Merci de respecter le code de
    conduite de l’Afup.

    View full-size slide

  3. Le plan
    - Le front-office, rapidement
    - Pourquoi c’est lent ?
    - Mesurer et analyser
    - Cas pratiques
    - Pourquoi c’est rapide ?
    - Bonnes pratiques à emporter

    View full-size slide

  4. Introduction

    View full-size slide

  5. Du front-office au back-office
    Front-Office Back-Office

    View full-size slide

  6. L’appel HTTP

    View full-size slide

  7. L’appel HTTP
    Le Back-Office
    Requête Réponse

    View full-size slide

  8. L’appel HTTP
    Le Back-Office
    Requête Réponse

    View full-size slide

  9. Les appels HTTP

    View full-size slide

  10. Notre champ d’étude
    Front-Office Back-Office

    View full-size slide

  11. Arrêt n°1 sur 6

    View full-size slide

  12. Les lenteurs

    View full-size slide

  13. Calcul Transport
    Mémoire
    La performance du système

    View full-size slide

  14. Le processeur
    Problèmes courants :
    - Calcul coûteux
    - Peu/pas de disponibilité
    - Un seul coeur utilisé
    - iowait

    View full-size slide

  15. La mémoire
    Types : RAM / SSD / HDD / Réseau
    Problème courants :
    - RAM saturée (= SWAP)
    - Disques durs
    - Latence lecture/écriture
    - IOPS
    - Réseau lent
    - Cf slide suivante d’après

    View full-size slide

  16. Le transport
    Types : Intranet / Extranet
    Problèmes courants :
    - Latence
    - Débit
    - Connexions impossibles
    - Connexions perdues

    View full-size slide

  17. Stockage et distance
    Sources: https://gist.github.com/hellerbarde/2843375 et https://wondernetwork.com/pings
    Type Latence Équiv. Distance
    L1 0.5 ns 1 centimètre
    RAM 100 ns 2 mètres
    SSD 150 µs 3 kilomètres
    HDD 10 ms 200 kilomètres
    Paris > Londres 10 ms 200 kilomètres
    Paris > New York 75 ms 1500 kilomètres

    View full-size slide

  18. PHP
    Problèmes courants :
    - Opcache absent
    - Autoload non optimisé
    - Utilisation du disque dur
    Aller plus loin
    - validate_timestamps

    View full-size slide

  19. Bases de données
    Problèmes courants :
    - Slow queries
    - Requêtes répétées inutilement

    View full-size slide

  20. Arrêt n°2 sur 6

    View full-size slide

  21. Pas d’amélioration sans mesure
    - Instrumentalisation, journalisation
    - Agrégation des données (moyenne, min-max, quartiles)

    View full-size slide

  22. L’architecture, rapidement
    Système
    Services
    Applications

    View full-size slide

  23. Cartographiez

    View full-size slide

  24. Descendez
    Identifier une requête lente
    L’optimiser

    View full-size slide

  25. Arrêt n°3 sur 6

    View full-size slide

  26. Cas pratique : Insertion SQL

    View full-size slide

  27. Nom Type
    id uuid
    user_id uuid
    created_at datetime
    event_type varchar
    data json
    user_event

    View full-size slide

  28. Insérer 500 entités avec Doctrine ORM

    View full-size slide

  29. Insérer 500 entités avec Doctrine ORM

    View full-size slide

  30. Insérer 500 entités avec Doctrine DBAL

    View full-size slide

  31. Cas pratique : Lecture SQL

    View full-size slide

  32. Requête de lecture

    View full-size slide

  33. Exemple SQL : les index

    View full-size slide

  34. Fonctionnement de l’index
    * register
    login
    logout
    2020
    2019
    2018
    Mai
    Juin
    Avril

    View full-size slide

  35. Cas pratique : extraction CSV

    View full-size slide

  36. Manière brute

    View full-size slide

  37. Morceau par morceau

    View full-size slide

  38. Arrêt n°4 sur 6

    View full-size slide

  39. Pourquoi c’est rapide

    View full-size slide

  40. Spécialisation
    - Bases de données relationnelles : MySQL, Postgres
    - Cache : Redis, memcached
    - Recherche : ElasticSearch
    - Séries temporelles : InfluxDB, Graphite
    - Messagerie : ActiveMQ, RabbitMQ
    - Flux d’événements : Kafka
    - Stockages larges : MongoDB

    View full-size slide

  41. Multi-threading
    - Pas possible en PHP et permet d’éviter beaucoup d’erreurs
    - Lancer le même processus plusieurs fois, en parallèle

    View full-size slide

  42. Multiplier les instances
    - Élasticité verticale

    View full-size slide

  43. Ne pas utiliser le disque dur
    - PHP, correctement optimisé, travaille uniquement en RAM
    - S’assurer que son traitement n’utilise pas le disque

    View full-size slide

  44. Conférence liée
    Bonnes pratiques de déploiement PHP en 2015
    Quentin Adam

    View full-size slide

  45. Les clusters

    View full-size slide

  46. Réplication
    Écritures
    Lectures Lectures
    Lectures

    View full-size slide

  47. Principal et réplication / Primary and replica
    Permis par la plupart des système, plus ou moins facilement.
    Si l’instance principale échoue, une des réplication deviendra principal.
    Principal
    Réplication Réplication Réplication

    View full-size slide

  48. Distribution
    A-E F-J K-O P-T U-Z

    View full-size slide

  49. Aggrégation
    A-E F-J K-O P-T U-Z

    View full-size slide

  50. Arrêt n°5 sur 6

    View full-size slide

  51. Bonnes pratiques à emporter

    View full-size slide

  52. Puppet show Bonjour, je voudrais la liste de tous
    les utilisateurs, toutes ses
    informations personnelles, ses
    e-mails, ses numéros de téléphones,
    ses adresses, ses 10 dernières
    connexions, la liste des amis et la
    liste de ses permissions.
    S’il te plaît.

    View full-size slide

  53. Puppet show
    20 Go

    View full-size slide

  54. Quand on conçoit un traitement
    - Identifier les données impliqués, leurs volumes
    - Identifier les transports associés
    - Identifier les calculs faits
    Restez le plus simple possible
    Si impossible : découper, distribuer, cacher, etc.

    View full-size slide

  55. Comprendre avant d’agir
    En priorité, cherchez à avoir de la visibilité et une mesure du problème :
    - iowait = 80%
    - Disques durs plafonnent en IOPS
    Une fois la cause exacte identifiée en production, reproduire en local.

    View full-size slide

  56. Abandonner le mythe “iso-production”

    View full-size slide

  57. Le cycle d’optimisation de la performance
    Mesurer le
    problème
    Changer 1
    chose

    View full-size slide

  58. Dernier arrêt

    View full-size slide

  59. Remerciements
    - Afup, tous ses bénévoles et tous ses membres
    - Les-Tilleuls.coop pour l’hébergement
    - WeLoveDevs.com pour le matériel
    - Icônes par Freepik de Flaticon
    - Code rendu par carbon.now.sh

    View full-size slide