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

  4. Introduction

    View Slide

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

    View Slide

  6. L’appel HTTP

    View Slide

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

    View Slide

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

    View Slide

  9. Les appels HTTP

    View Slide

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

    View Slide

  11. Arrêt n°1 sur 6

    View Slide

  12. Les lenteurs

    View Slide

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

    View Slide

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

    View 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 Slide

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

    View 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 Slide

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

    View Slide

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

    View Slide

  20. Arrêt n°2 sur 6

    View Slide

  21. Mesurez

    View Slide

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

    View Slide

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

    View Slide

  24. Cartographiez

    View Slide

  25. Stressez

    View Slide

  26. Stressez

    View Slide

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

    View Slide

  28. Tracez

    View Slide

  29. Tracez

    View Slide

  30. Stressez

    View Slide

  31. Stressez

    View Slide

  32. Mesurez

    View Slide

  33. Arrêt n°3 sur 6

    View Slide

  34. Cas pratique : Insertion SQL

    View Slide

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

    View Slide

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

    View Slide

  37. View Slide

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

    View Slide

  39. View Slide

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

    View Slide

  41. View Slide

  42. Cas pratique : Lecture SQL

    View Slide

  43. Requête de lecture

    View Slide

  44. Exemple SQL : les index

    View Slide

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

    View Slide

  46. Cas pratique : extraction CSV

    View Slide

  47. Manière brute

    View Slide

  48. Morceau par morceau

    View Slide

  49. View Slide

  50. Arrêt n°4 sur 6

    View Slide

  51. Pourquoi c’est rapide

    View Slide

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

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

    View Slide

  54. Multiplier les instances
    - Élasticité verticale

    View Slide

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

    View Slide

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

    View Slide

  57. Les clusters

    View Slide

  58. Réplication
    Écritures
    Lectures Lectures
    Lectures

    View Slide

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

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

    View Slide

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

    View Slide

  62. Arrêt n°5 sur 6

    View Slide

  63. Bonnes pratiques à emporter

    View Slide

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

  65. Puppet show
    20 Go

    View Slide

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

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

  68. Abandonner le mythe “iso-production”

    View Slide

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

    View Slide

  70. Dernier arrêt

    View Slide

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