Upload
letesteur
View
2.457
Download
4
Embed Size (px)
DESCRIPTION
PHP Tour Lille 2011
Citation preview
Développer et déployer une appli
maintenableLucas BonnetPierre Couzy
Qui on est
◦ Dans le temps
◦ Dans l’environnement d’exécution
◦ Dans les évolutions
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 ?
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
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
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
À faire sur la bécane de dev et après chaque mise en prod et à garder dans les docs
phpinfo()
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 ?
Paramètres
Regroupez les paramètres
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
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
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
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
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
Les 5 principales causes couvrent 86% des attaques recensées
Comment se couvrir ? Coverity Php lint
Une page de sécurité !
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
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 …
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 ?
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
.. Et ça marche ?
http://forge.bearstech.com/trac/wiki/DebianLampLenny
Optimiser, c’est mal◦ En dev
Avant la mise en prod Par copier/coller de trucs sur internet
Optimisation
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
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 ?
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
Questions !