42
SCALABILITÉ & HAUTE PERFORMANCE DES APPLICATIONS PHP LEGACY

Scalabilité et haute performance d'application PHP légacy

Embed Size (px)

Citation preview

Page 1: Scalabilité et haute performance d'application PHP légacy

SCALABILITÉ &

HAUTE

PERFORMANCE

DES

APPLICATIONS

PHP LEGACY

Page 2: Scalabilité et haute performance d'application PHP légacy

QUI-SUIS-JE ?

Arnaud LEMAIRE

www.software-craftsman.fr

Lead developer @Ibsciss : www.ibsciss.com

Software Architect @Quantis : [email protected]

Lead Software Architect @LeMêmeEnMieux : www.lmem.net

Twitter : @lilobase

Page 3: Scalabilité et haute performance d'application PHP légacy

!! PUB !!

• Le même en mieux : nous vous apportons un meilleur produit

que celui que vous consultez, et c’est vraiment cool !

(www.lmem.net)

• Ibsciss : développement logiciel à haute valeur ajoutée pour les

entreprises en phase de transitions (www.ibsciss.com)

• Quantis : conseil & formation en architecture logicielle

([email protected])

• 1cup Expert : conseil et aide bénévole 1 après midi par mois

pour des entrepreneurs (www.1cup.io)

Page 4: Scalabilité et haute performance d'application PHP légacy

EN FORMATION SUR LA SCALABILITÉ

PHP 5.5, Besoin pris en compte dès le démarrage, développeurs ultra

compétents, sujet maitrisé, etc.

Page 5: Scalabilité et haute performance d'application PHP légacy

MAIS EN RÉALITÉ

Page 6: Scalabilité et haute performance d'application PHP légacy

VOTRE MISSION SI VOUS L’ACCEPTEZ :

RENDRE LE PRODUIT SCALABLE SANS

TOUCHER À LA CODEBASE !

Page 7: Scalabilité et haute performance d'application PHP légacy

EXEMPLE DE

SITUATION

Super Projet W :

• PHP 5.3

• Code Spaghetti

• Des dépendances dans tous les sens

• Base de donnée avec des doublons, plus d’une centaines de table, etc.

• …

En résultat :

on touche, ça s’effondre

Page 8: Scalabilité et haute performance d'application PHP légacy

ELÉMENT

PERTURBATEUR (1)

Le client :

« Je vous achète le produit s’il répond en moins de 4

secondes à 500 requêtes / secondes dans 1 mois. »

Le commercial :

« Pas de problème ! »

Page 9: Scalabilité et haute performance d'application PHP légacy

ELÉMENT

PERTURBATEUR (2)

Le gestionnaire :

« On a pas le budget pour faire des modifications sur le

logiciel en avant projet »

Le développeur :

« … »

Page 10: Scalabilité et haute performance d'application PHP légacy

LE DÉVELOPPEUR (2)

Page 11: Scalabilité et haute performance d'application PHP légacy

THÉORIE !

Page 12: Scalabilité et haute performance d'application PHP légacy

SCALABILITÉ

HAUTES PERFORMANCE

HAUTE DISPONIBILITÉ

DÉFINITIONS

Page 13: Scalabilité et haute performance d'application PHP légacy

• Un système scalable peut être très lent et régulièrement

en panne

• Un système performant peut ne pas être scalable et

tomber régulièrement en panne

• Un système qui ne tombe jamais en panne peut être très

lent et ne pas être scalable.

SOUVENT CONFONDU, CE SONT DES CONCEPTS

DIFFÉRENTS (MAIS TRÈS LIÉS)

Page 14: Scalabilité et haute performance d'application PHP légacy

DÉFINITION :

SCALABILITÉ

D’après wikipedia : En informatique matérielle et logicielle et en télécommunications, la scalability ou scalabilité (calque de traduction) désigne la capacité d'un produit à s'adapter à un changement d'ordre de grandeur de la demande (montée en charge), en particulier sa capacité à maintenir ses fonctionnalités et ses performances en cas de forte demande.

SCALABILITÉ = ON PEUT AUGMENTER LE NOMBRE DE

REQUÊTES EN SIMULTANÉE

Page 15: Scalabilité et haute performance d'application PHP légacy

VERTICALE OU HORIZONTALE ?

SCALABILITÉ

Page 16: Scalabilité et haute performance d'application PHP légacy

VERTICALE : ON ACHÈTE UN SERVEUR PLUS PUISSANT,

HORIZONTALE : ON DÉPLOIE SUR PLEIN DE PETIT SERVEURS

Page 17: Scalabilité et haute performance d'application PHP légacy

HAUTE

PERFORMANCE

HAUTE PERFORMANCE = ÇA RÉPOND (TRÈS) VITE

Le temps de réponse, ou temps de latence, est le temps écoulé

entre une commande et la réalisation de cette commande.

Page 18: Scalabilité et haute performance d'application PHP légacy

DÉFINITION :

HAUTE

DISPONIBILITÉ

D’après wikipedia : La disponibilité d'un équipement ou d'un système est une mesure

de performance qu'on obtient en divisant la durée durant laquelle ledit

équipement ou système est opérationnel par la durée totale durant laquelle on

aurait souhaité qu'il le soit. On exprime classiquement ce ratio sous forme de

pourcentage.

Il ne faut pas confondre la disponibilité avec la « rapidité de réponse », que l'on

appelle aussi « performance ».

HAUTE DISPONIBILITÉ = ÇA MARCHE TOUJOURS

Page 19: Scalabilité et haute performance d'application PHP légacy

LA SCALABILITÉ EST UNE SOLUTION POUR

OFFRIR HAUTE PERFORMANCE & HAUTE

DISPONIBILITÉ

Page 20: Scalabilité et haute performance d'application PHP légacy

REVENONS

À NOS

MOUTONS

VOUS SAVEZ, LES 500 REQ/S…

Page 21: Scalabilité et haute performance d'application PHP légacy

DÉCOUPONS LE

TRAVAIL

Une application classique :

PHP MySQL

Page 22: Scalabilité et haute performance d'application PHP légacy

HTTP EST STATELESS

PHP est construit sur le modèle d’HTTP

très bonne nouvelle :

• Toute la mémoire est détruite après chaque requête :

• Que ce soit A ou B qui exécute la requêtes le résultat est

normalement le même (si ce n’est pas cas, VOUS avez fait

une connerie).

Page 23: Scalabilité et haute performance d'application PHP légacy

OU PAS…

PHP est stateless, sauf la session…

Page 24: Scalabilité et haute performance d'application PHP légacy

LE PROBLÈME DE LA

SESSION : 5 MINUTES

• On installe un memcacheD

• On change deux clefs du php.ini :

• session.save_handler = memcached

• session.save_path = hoteMemecacheD :port

• On relance Apache

C’EST FINI, VOTRE COUCHE APPLICATIVE

EST PRÊTE !

Page 25: Scalabilité et haute performance d'application PHP légacy

TRAVAILLER LES

PERFORMANCES

Cache d’opCode :

• APC pour php 5.3 (que vous ne devriez plus utiliser !)

• Astuce : apc.stat=0 (évite des I/O disque)

• Inclus par défaut dans PHP 5.5

• Placez la directive opcache.enable sur On (dans php.ini)

• Astuce : opcache.validate_timestamps=0 (évite les accès

disques)

Page 26: Scalabilité et haute performance d'application PHP légacy

LA BASE DE DONNÉE

Page 27: Scalabilité et haute performance d'application PHP légacy

MAIS…

La base de donnée est rarement le point de blocage lors la

première montée en charge de votre application !

(dans notre cas, avec deux serveurs applicatifs à 100% en

plein test de charge, la charge CPU de l’unique serveur de

DB était à 10%)

Page 28: Scalabilité et haute performance d'application PHP légacy

MAIS ENCORE

A condition de faire une petite optimisation :

• PLEIN de ram (en tout cas plus que la taille de votre base)

• innodb_buffer_pool_size avec une valeur la plus haute

possible : 5-6GB (8GB RAM)

• mysql_query_cache avec une bonne valeur (pas trop non

plus car cela augmente la charge CPU)

Page 29: Scalabilité et haute performance d'application PHP légacy

DOCTRINE2

Petite astuce : utilisez le eager loading

(cela évitera 300 requêtes par pages quand une seule suffit)

Page 30: Scalabilité et haute performance d'application PHP légacy

DES INDEXES, PLEINS

D’INDEXES

La mise en place d’index sur les colonnes utilisées dans les

clauses WHERE ou de jointure accélèrent (vraiment

beaucoup) le temps de réponse de la Base de donnée

Page 31: Scalabilité et haute performance d'application PHP légacy

ET LA RÉPLICATION

MAITRE ESCLAVE ?

On est dans une application légacy, vous pensez vraiment

qu’il y a une séparation entre écritures et lectures ?

Page 32: Scalabilité et haute performance d'application PHP légacy

OK, DONC DU MAITRE

MAITRE ?

Le vrai nom est : circular replication

• Problème de

modifications

concurrentes

• Et si un des serveurs

tombe en panne ?

• Ça pose pas mal de

problèmes !

Page 33: Scalabilité et haute performance d'application PHP légacy

MYSQL CLUSTER

La Rolls-Royce : actif actif, temps réel !

Page 34: Scalabilité et haute performance d'application PHP légacy

ON ESSAYE DE SCALER VERTICALEMENT SA BASE

DE DONNÉE, QUAND ON NE PEUT PLUS ON PASSE

SUR DU CLUSTER.

Page 35: Scalabilité et haute performance d'application PHP légacy

INFRASTRUCTURE

• Mettez en place un « accélérateur web » type varnish en

frontal qui servira les assets statics

• Utiliser un outil de provisionning (Ansible) pour configurer

vos serveurs.

Page 36: Scalabilité et haute performance d'application PHP légacy
Page 37: Scalabilité et haute performance d'application PHP légacy
Page 38: Scalabilité et haute performance d'application PHP légacy

DEMO

La question est de savoir comment mettre en place ce type

d’architecture simplement.

La solution Gandi IAAS/VM à été utilisée pour mettre en place

l’infrastructure en question en quelques heures.

Page 39: Scalabilité et haute performance d'application PHP légacy

GESTION DES SERVEURS

Page 40: Scalabilité et haute performance d'application PHP légacy

ASTUCE : PLACER UN ACCÉLÉRATEUR WEB EN

FRONTAL DES SERVEURS APPLICATIFS

Page 41: Scalabilité et haute performance d'application PHP légacy

CONFIGURATION DES SERVEURS APPLICATIFS

LOAD BALANCÉ PAR L’ACCÉLÉRATEUR WEB

Page 42: Scalabilité et haute performance d'application PHP légacy

IL EST TEMPS DE

TESTER LA CHARGE

• Siège : très simple, en gros un DOS (outil « desktop »)

• Jmeters : test de charge avec scénario (outils « desktop »)

• Loader.io : test de charge avec scénario (outil « saas »)