Slide 1

Slide 1 text

Concevoir des back-offices performants

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

Introduction

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

L’appel HTTP

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

Les appels HTTP

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

Arrêt n°1 sur 6

Slide 12

Slide 12 text

Les lenteurs

Slide 13

Slide 13 text

Calcul Transport Mémoire La performance du système

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

Arrêt n°2 sur 6

Slide 21

Slide 21 text

Mesurez

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

L’architecture, rapidement Système Services Applications

Slide 24

Slide 24 text

Cartographiez

Slide 25

Slide 25 text

Stressez

Slide 26

Slide 26 text

Stressez

Slide 27

Slide 27 text

Descendez Identifier une requête lente L’optimiser

Slide 28

Slide 28 text

Tracez

Slide 29

Slide 29 text

Tracez

Slide 30

Slide 30 text

Stressez

Slide 31

Slide 31 text

Stressez

Slide 32

Slide 32 text

Mesurez

Slide 33

Slide 33 text

Arrêt n°3 sur 6

Slide 34

Slide 34 text

Cas pratique : Insertion SQL

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

Insérer 500 entités avec Doctrine ORM

Slide 37

Slide 37 text

No content

Slide 38

Slide 38 text

Insérer 500 entités avec Doctrine ORM

Slide 39

Slide 39 text

No content

Slide 40

Slide 40 text

Insérer 500 entités avec Doctrine DBAL

Slide 41

Slide 41 text

No content

Slide 42

Slide 42 text

Cas pratique : Lecture SQL

Slide 43

Slide 43 text

Requête de lecture

Slide 44

Slide 44 text

Exemple SQL : les index

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

Cas pratique : extraction CSV

Slide 47

Slide 47 text

Manière brute

Slide 48

Slide 48 text

Morceau par morceau

Slide 49

Slide 49 text

No content

Slide 50

Slide 50 text

Arrêt n°4 sur 6

Slide 51

Slide 51 text

Pourquoi c’est rapide

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

Multiplier les instances - Élasticité verticale

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

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

Slide 57

Slide 57 text

Les clusters

Slide 58

Slide 58 text

Réplication Écritures Lectures Lectures Lectures

Slide 59

Slide 59 text

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

Slide 60

Slide 60 text

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

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

Arrêt n°5 sur 6

Slide 63

Slide 63 text

Bonnes pratiques à emporter

Slide 64

Slide 64 text

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.

Slide 65

Slide 65 text

Puppet show 20 Go

Slide 66

Slide 66 text

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.

Slide 67

Slide 67 text

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.

Slide 68

Slide 68 text

Abandonner le mythe “iso-production”

Slide 69

Slide 69 text

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

Slide 70

Slide 70 text

Dernier arrêt

Slide 71

Slide 71 text

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