11
#NXWTECH6 - 15 mai 2013 - Normandie Web Xperts Performance WEB DAEMONS en PHP Olivier Martineau SpreadButton

#nwxtech6 Olivier Martineau - Les démons en PHP

Embed Size (px)

Citation preview

Page 1: #nwxtech6 Olivier Martineau - Les démons en PHP

#NXWTECH6 - 15 mai 2013 - Normandie Web Xperts

Performance WEB

DAEMONSen PHP

Olivier MartineauSpreadButton

Page 2: #nwxtech6 Olivier Martineau - Les démons en PHP

QU’EST-CE ? Le diable ?

Un programme En arrière plan

Qui effectue différentes tâches

#NXWTECH6 - 15 mai 2013 - Normandie Web Xperts

Page 3: #nwxtech6 Olivier Martineau - Les démons en PHP

POURQUOI ? Mais oui, pourquoi ?

- tâches trop longues- exports/imports de fichiers- calcul de statistiques- envoi d’emailing

- tâches pas utiles immédiatement- log / trace- API

- tâches non interactives- activation / désactivation horaire

#NXWTECH6 - 15 mai 2013 - Normandie Web Xperts

Page 4: #nwxtech6 Olivier Martineau - Les démons en PHP

(mauvaises) ALTERNATIVES

- CRON- Ajax

#NXWTECH6 - 15 mai 2013 - Normandie Web Xperts

Page 5: #nwxtech6 Olivier Martineau - Les démons en PHP

COMMENT ? Grand principe

#!/usr/bin/env php<?php

# uniquement en mode ligne de commandeif( !defined('STDIN') ) { die ("Only from command line, note web");}

ini_set ('max_execution_time', 0); // Temps maximum d'exécution illimité

while (true) { # au boulot, sans d’arrêter

}

#NXWTECH6 - 15 mai 2013 - Normandie Web Xperts

Page 6: #nwxtech6 Olivier Martineau - Les démons en PHP

COMMENT ? En détail

$start_time = time(); while (true) {

// indentifiant d'activité $faitquelquechose = false;

$return = $ma_fonction_daemon(); if ($return) { $faitquelquechose = true; } if ((time() - $start_time) > 60*30) { // On tue le daemon toutes les 30 minutes exit(0); // a la fin du temps on le ferme } if (!$faitquelquechose) { // repos du démon sleep(10); // On n'a rien fait, probablement il n'y aura rien d'autre à faire prochainement : on économise le serveur }}

#NXWTECH6 - 15 mai 2013 - Normandie Web Xperts

Page 7: #nwxtech6 Olivier Martineau - Les démons en PHP

LANCEMENT

A la main, le ligne de commande :# /usr/bin/php daemon.php

#NXWTECH6 - 15 mai 2013 - Normandie Web Xperts

Page 8: #nwxtech6 Olivier Martineau - Les démons en PHP

LANCEMENT

En automatique, avec UPSTART :# vi /etc/init/phpdaemon.phpstart on (net-device-up and local-filesystems and runlevel [2345])stop on runlevel [016]respawn # redémarrage automatiqueenv HOME=/var/www/daemonhomeumask 007kill timeout 300pre-start scriptend scriptexec nice -n 10 su www-data -c '/usr/bin/php /var/www/daemonhome/daemon.php'post-start script exit 1end script

# service start phpdaemon

#NXWTECH6 - 15 mai 2013 - Normandie Web Xperts

Page 9: #nwxtech6 Olivier Martineau - Les démons en PHP

CHEZ NOUS ?

21 tâches :- créations des abonnements / facturations / paiement- gestion des emailings- gestion des activations / désactivations des campagnes- aspirations des profils Facebook- statistiques- segmentations- création d’un cache- imports

#NXWTECH6 - 15 mai 2013 - Normandie Web Xperts

Page 10: #nwxtech6 Olivier Martineau - Les démons en PHP

EVOLUTION TECHNO

File d’attente :Avant : chaque tâche teste à chaque fois s’il y a du boulot

Après : mise en file d’attente et traitée au fur et à mesure

Bénéfices : de requêtes SQL, meilleure gestion des priorités

Parallélisation :Répartition des tâches, sur plusieurs daemons, sur plusieurs

serveurs. Lancement dynamique en fonction du besoin.

#NXWTECH6 - 15 mai 2013 - Normandie Web Xperts

Page 11: #nwxtech6 Olivier Martineau - Les démons en PHP

Go

Les daemons, c’est bien,

manger en !

#NXWTECH6 - 15 mai 2013 - Normandie Web Xperts