28
Développer et déployer une appli maintenable Lucas Bonnet Pierre Couzy

Développer et déployer une application php maintenable

Embed Size (px)

DESCRIPTION

PHP Tour Lille 2011

Citation preview

Page 1: Développer et déployer une application php maintenable

Développer et déployer une appli

maintenableLucas BonnetPierre Couzy

Page 2: Développer et déployer une application php maintenable

Qui on est

Page 3: Développer et déployer une application php maintenable

◦ Dans le temps

◦ Dans l’environnement d’exécution

◦ Dans les évolutions

Maintenable..

Page 4: Développer et déployer une application php maintenable

Les prérequis ?◦ Le runtime PHP◦ Les extensions◦ Logging

L’appli ?◦ Paramétrage◦ La base de données◦ Les autres données

La prod ?◦ Le serveur◦ Les caches◦ Retour sur la base de données

Le déploiement

Par où commencer ?

Page 5: Développer et déployer une application php maintenable

Un premier impact sur les versions majeures Fonctions obsolètes Vieux workarounds qui cessent de fonctionner Nouveaux bugs

Mais aussi sur les versions mineures Corrections apportées suite à l’analyse par CoVerity Gestion d’erreur parfois subtilement différente Exemples : Eval, PDO

Et enfin selon l’OS Profil de perf TRES différent entre 5.2 et 5.3 sous Windows

Le choix du runtime va avoir de très grosses conséquences Soit on fige une version de PHP en prod Soit on sait recetter l’appli sur une nouvelle version de …

La version de PHP

Page 6: Développer et déployer une application php maintenable

Installez php sans extensions Activez le reporting Ajoutez le strict minimum Mettez php.ini au carré

Ne jetez pas les extensions qui ne vous servent pas ?◦ On est pas d’accord sur le sujet.

Extensions

Page 7: Développer et déployer une application php maintenable

Calendar : installé ou pas ? Mb_string : en mod_php sur 5.2 en mutu, si

des sites activent mb_string les autres en “profitent”

Au fait, quand on ajoute une extension à une install existante,on prend quelle version ?

Un cauchemar particulier sous Windows◦ Prenez les versions VC9 NTS pour IIS, et VC6 TS

pour Apache

Quelques goodies sur les extensions

Page 8: Développer et déployer une application php maintenable
Page 9: Développer et déployer une application php maintenable

À faire sur la bécane de dev et après chaque mise en prod et à garder dans les docs

phpinfo()

Page 10: Développer et déployer une application php maintenable

Les composants tiers (FW, plugins, etc.) Les paramètres de déploiement Les paramètres de fonctionnement L’adhérence à la base de données Le filesystem Etc.

Dépendances applicatives ?

Page 11: Développer et déployer une application php maintenable

Paramètres

Page 12: Développer et déployer une application php maintenable

Regroupez les paramètres

Page 13: Développer et déployer une application php maintenable

Des paramètres regroupés Différenciés par

environnement de déploiement

Différenciés par nature◦ appli/infra/opti/…

Préférez des formats texte…◦ Et documentés

A retenir

Page 14: Développer et déployer une application php maintenable

Le minimum syndical◦ Une couche technique d’abstraction◦ Un référentiel pour les requêtes custom

PDO◦ Pas complet, mais on a pas mieux.

Une parenthèse sur les ORM

La base de données

Page 15: Développer et déployer une application php maintenable

A votre avis ?

◦ Images uploadées◦ Sessions◦ Fichiers auto-générés◦ Logs◦ Code uploadé par un admin (depuis l’IHM Web)

Les autres données

Page 16: Développer et déployer une application php maintenable

Quelques questions simples◦ Conventions ?◦ Permissions ?◦ Abstraction ? (wrappers etc)◦ Limites à comprendre

Nb de fichiers/folders par … Limites sur un nom de fichier ? Permissions sur répertoires : pas toujours dispo

Ecritures explicites

Page 17: Développer et déployer une application php maintenable

Fichiers auto-générés Vignettes Sessions Paramétrage des logs

◦ Log errors = on◦ display_errors = off

E_STRICT E_ALL E_DEPRECATED E_NOTICE

Ecritures automatiques

Page 18: Développer et déployer une application php maintenable

Les 5 principales causes couvrent 86% des attaques recensées

Comment se couvrir ? Coverity Php lint

Une page de sécurité !

Page 19: Développer et déployer une application php maintenable

Séparez les données◦ UGC◦ Données de structure / modules / etc

Exemple : Drupal, un nouveau module ◦ Le filesystem◦ La base de données◦ Même sans contenus utilisateur◦ l’upgrade est faite par code

Stratégie d’upgrade

Page 20: Développer et déployer une application php maintenable

C’est quoi l’adresse de ton SMTP ?◦ Si c’est pour quelques mails l’hébergeur peut

éventuellement le fournir◦ Si c’est pour spammer on passe par un service

dédié et externe (critsend, etc.) Tu peux m’ouvrir un accès FTP ?

◦ Pour de la mise en prod ?◦ Pour de la mise à dispo d’exports divers et variés◦ Pour du reparamétrage

On a vu le runtime, la base, le filesystem, mais …

Page 21: Développer et déployer une application php maintenable

Profils de charge inattendus◦ Un appel synchrone à FB oublié dans un coin sur

la home La base s’éloigne

◦ Lag qui passe de 1 à 10 ms Saturations disque / RAM / réseau Oui, j’ai laissé l’historique dans la base,

pourquoi tu demandes ça ?

Montée en charge ?

Page 22: Développer et déployer une application php maintenable

De CGI à FastCGICG

I Un process par requête

Avantage• Très stable

Inconvénient• *Très* lent sous

Windows (coût énorme de création d’un process)

ISAP

I & m

od-p

hp

Chargement de PHP in-process (surrogate IIS ou process Apache)

Avantage• Très performant

Inconvénients• Stabilité• Réentrance

Fast

CGI Gestion d’un pool

de process

Avantages• Plus rapide que CGI• Plus stable

qu’ISAPI/mod_php• Permet de

fonctionner sans réentrance

Page 24: Développer et déployer une application php maintenable

Optimiser, c’est mal◦ En dev

Avant la mise en prod Par copier/coller de trucs sur internet

Optimisation

Page 25: Développer et déployer une application php maintenable

Sur la bécane◦ Cache d’opcode◦ Cache de résolution dns/filesystem◦ User code ?◦ Caches de rendu divers et variés◦ Cache de bdd

Entre bécanes◦ Sessions dans memcache/redis/..

Au cul des bécanes◦ Varnish (cookie de session anyone ?)

Gestion de cache

Page 26: Développer et déployer une application php maintenable

Tables à croissance infinie Requêtes non cachées Requêtes impliquant un table scan Select * from MyHugeNewsTable

… Order by rand() Fonctionnellement, une jointure est équivalente à

une boucle. Les BDD savent optimiser les requêtes identiques

(par exemple les requêtes paramétrées)◦ Il y toujours PDO::ATTR_EMULATE_PREPARES si vous en

avez besoin

Base de données – bis ?

Page 27: Développer et déployer une application php maintenable

Mon premier déploiement◦ Coupez le réseau de la machine du développeur et

filez-lui une clé USB. Pour les suivants, automatisez

◦ Aujourd’hui ce n’est pas la norme

… Et on est polis

Un contrôleur de source ça peut garder plein de trucs◦ Y compris une appli qui n’est pas sous contrôle de

source avant l’arrivée en prod

En guise de conclusion

Page 28: Développer et déployer une application php maintenable

Questions !