Méthodologie et outils d'optimisation PHP / MySQL lors des 3 phases du cycle de vie de vos applications :
1- Développement,
2- Mise en production,
3- Post Production
Pour toute information concernant Codizy :
@: http://www.codizy.com
7. DÉVELOPPEMENT MISE EN PRODUCTION CONCLUSIONROADMAP POST PRODUCTION
Le gain financier sur le temps de développement
ne peut pas toujours être compensé
par un investissement dans des serveurs plus puissants.
8. DÉVELOPPEMENT MISE EN PRODUCTION CONCLUSIONROADMAP POST PRODUCTION
0
100
200
300
400
500
600
700
800
900
10. DÉVELOPPEMENT MISE EN PRODUCTION CONCLUSIONROADMAP POST PRODUCTION
Trouver le bon équilibre
entre la mise en place de design pattern complexes
et des classes épurées et difficiles à maintenir.
14. Jenkins
PHPUnit
Sélénium
DÉVELOPPEMENT MISE EN PRODUCTION CONCLUSIONROADMAP POST PRODUCTION
Prévoir dès le départ
les tests unitaires
et le système d’intégration continue :
17. DÉVELOPPEMENT MISE EN PRODUCTION CONCLUSIONROADMAP POST PRODUCTION
L’approche
Model / Vue / Contrôleur
vous fera économisez beaucoup de temps
lors du développement de votre application.
18. DÉVELOPPEMENT MISE EN PRODUCTION CONCLUSIONROADMAP POST PRODUCTION
L’utilisation de Smarty / Twig / etc…
ne devrait pas être problématique niveau performance
si les caches sont bien configurés.
19. Optimiser JS & CSS
DÉVELOPPEMENT MISE EN PRODUCTION CONCLUSIONROADMAP POST PRODUCTION
20. DÉVELOPPEMENT MISE EN PRODUCTION CONCLUSIONROADMAP POST PRODUCTION
Lors de l’écriture du template HTML,
prévoir de facilement minifier
vos JS et CSS (en utilisant Google Minify par exemple)
22. DÉVELOPPEMENT MISE EN PRODUCTION CONCLUSIONROADMAP POST PRODUCTION
Memcached / Redis :
système clés valeurs
23. DÉVELOPPEMENT MISE EN PRODUCTION CONCLUSIONROADMAP POST PRODUCTION
Trop de Cache…
…tue le cache !
24. DÉVELOPPEMENT MISE EN PRODUCTION CONCLUSIONROADMAP POST PRODUCTION
Latence réseau
Contrôler la taille du cache local
… si il est stocké dans un array
32. SQL :
penser dès le départ aux
problèmes de
scalabilités
DÉVELOPPEMENT MISE EN PRODUCTION CONCLUSIONROADMAP POST PRODUCTION
33. DÉVELOPPEMENT MISE EN PRODUCTION CONCLUSIONROADMAP POST PRODUCTION
Il est compliqué de modifier la structure de la base si
elle est de taille conséquente, sans interruption en
production.
Attention à la concurrence des accès :
=> Le choix du type d’engine MySQL est très important :
TokuDB > InnoDB > MyISAM
34. DÉVELOPPEMENT MISE EN PRODUCTION CONCLUSIONROADMAP POST PRODUCTION
Exemple :
Détails d’exécution d’une requête SQL
39. Ne pas chercher à
tout faire avec MySQL
DÉVELOPPEMENT MISE EN PRODUCTION CONCLUSIONROADMAP POST PRODUCTION
40. DÉVELOPPEMENT MISE EN PRODUCTION CONCLUSIONROADMAP POST PRODUCTION
Recherche FullText
=> Sphinx, Solar, etc…
Recherche Geospatiale
=> SphinxQL
Pas de contrainte sur la fraicheur des données ?
=> NoSQL
41. DÉVELOPPEMENT MISE EN PRODUCTION CONCLUSIONROADMAP POST PRODUCTION
Le choix de la DB
peut faciliter la maintenance système.
Ex : SphinxQL intégré dans MariaDB.
42. DÉVELOPPEMENT MISE EN PRODUCTION CONCLUSIONROADMAP POST PRODUCTION
Différence de vitesse entre MySQL et Sphinx
… sur une recherche Geo (proximité)
44. DÉVELOPPEMENT MISE EN PRODUCTION CONCLUSIONROADMAP POST PRODUCTION
Toujours prévoir du temps pour l’optimisation des
requêtes.
Apprendre à utiliser la commande EXPLAIN de MySQL
45. … et optimiser
les bases de données
DÉVELOPPEMENT MISE EN PRODUCTION CONCLUSIONROADMAP POST PRODUCTION
48. Faire
LES BON CHOIX
à l’installation !
DÉVELOPPEMENT MISE EN PRODUCTION CONCLUSIONROADMAP POST PRODUCTION
49. DÉVELOPPEMENT MISE EN PRODUCTION CONCLUSIONROADMAP POST PRODUCTION
Vérifier qu’il y a un cache d’opcode pour PHP
50. DÉVELOPPEMENT MISE EN PRODUCTION CONCLUSIONROADMAP POST PRODUCTION
Utiliser php-fpm
avec apache 2 en mode worker, ou avec nginx
51. DÉVELOPPEMENT MISE EN PRODUCTION CONCLUSIONROADMAP POST PRODUCTION
Utiliser le gestionnaire de BDD
qui correspond le mieux
SQL : percona, mysql, mariadb, postgresql…
NoSQL : MongoDB, Cassandra, CouchDB…
52. DÉVELOPPEMENT MISE EN PRODUCTION CONCLUSIONROADMAP POST PRODUCTION
Encore un peu de Cache
Utiliser un cache de type Varnish
si certaines pages de votre contenu sont peu mises à jour.
53. DÉVELOPPEMENT MISE EN PRODUCTION CONCLUSIONROADMAP POST PRODUCTION
Tuner les paramètres
MySQL : my.cnf
Apache : désactivez keep-alive pour les scripts PHP et
utilisez Nginx pour la gestion des images. Ajustez au
mieux le nombre de processus IDLE !
54. DÉVELOPPEMENT MISE EN PRODUCTION CONCLUSIONROADMAP POST PRODUCTION
Fonctionnement du Keep-ALive
56. C’est en prod mais c’est
pas fini ;)
DÉVELOPPEMENT MISE EN PRODUCTION CONCLUSIONROADMAP POST PRODUCTION
57. DÉVELOPPEMENT MISE EN PRODUCTION CONCLUSIONROADMAP POST PRODUCTION
MySQL : Le comportement des utilisateurs réels peut
être différent de ce que était prévu.
Le volume de la base de données peut changer la
façon de se comporter de MySQL
Analyser rapidement
ce qui se passe sur la production
58. De quoi ai-je besoin ?
DÉVELOPPEMENT MISE EN PRODUCTION CONCLUSIONROADMAP POST PRODUCTION
59. Capturer les requêtes SQL
Percona toolkit,
NewRelic,
Codizy,
…
DÉVELOPPEMENT MISE EN PRODUCTION CONCLUSIONROADMAP POST PRODUCTION
78. Codizy a créé un
d’optimisation
pour aider les développeurs à
leurs applications
PROBLÈME SOLUTION BÉNÉFICES INTÉGRATION CUSTOMISATION COMPÉTITION DÉMODÉFINITION FONCTIONS