#NXWTECH6 - 15 mai 2013 - Normandie Web Xperts
Performance WEB
DAEMONS
en PHP
Olivier Martineau
SpreadButton
QU’EST-CE ? Le diable ?
Un programme
En arrière plan
Qui effectue différentes tâches
#NXWTECH6 - 15 mai 2013 - Normandie Web Xperts
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
(mauvaises) ALTERNATIVES
- CRON
- Ajax
#NXWTECH6 - 15 mai 2013 - Normandie Web Xperts
COMMENT ? Grand principe
#!/usr/bin/env php
<?php
# uniquement en mode ligne de commande
if( !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
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
LANCEMENT
A la main, le ligne de commande :
# /usr/bin/php daemon.php
#NXWTECH6 - 15 mai 2013 - Normandie Web Xperts
LANCEMENT
En automatique, avec UPSTART :
# vi /etc/init/phpdaemon.php
start on (net-device-up and local-filesystems and runlevel [2345])
stop on runlevel [016]
respawn # redémarrage automatique
env HOME=/var/www/daemonhome
umask 007
kill timeout 300
pre-start script
end script
exec nice -n 10 su www-data -c '/usr/bin/php /var/www/daemonhome/
daemon.php'
post-start script
exit 1
end script
# service start phpdaemon
#NXWTECH6 - 15 mai 2013 - Normandie Web Xperts
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
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
Go
Les daemons,
c’est bien,
manger en !
#NXWTECH6 - 15 mai 2013 - Normandie Web Xperts

#nwxtech6 Olivier Martineau - Les démons en PHP

  • 1.
    #NXWTECH6 - 15mai 2013 - Normandie Web Xperts Performance WEB DAEMONS en PHP Olivier Martineau SpreadButton
  • 2.
    QU’EST-CE ? Lediable ? Un programme En arrière plan Qui effectue différentes tâches #NXWTECH6 - 15 mai 2013 - Normandie Web Xperts
  • 3.
    POURQUOI ? Maisoui, 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
  • 4.
    (mauvaises) ALTERNATIVES - CRON -Ajax #NXWTECH6 - 15 mai 2013 - Normandie Web Xperts
  • 5.
    COMMENT ? Grandprincipe #!/usr/bin/env php <?php # uniquement en mode ligne de commande if( !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
  • 6.
    COMMENT ? Endé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
  • 7.
    LANCEMENT A la main,le ligne de commande : # /usr/bin/php daemon.php #NXWTECH6 - 15 mai 2013 - Normandie Web Xperts
  • 8.
    LANCEMENT En automatique, avecUPSTART : # vi /etc/init/phpdaemon.php start on (net-device-up and local-filesystems and runlevel [2345]) stop on runlevel [016] respawn # redémarrage automatique env HOME=/var/www/daemonhome umask 007 kill timeout 300 pre-start script end script exec nice -n 10 su www-data -c '/usr/bin/php /var/www/daemonhome/ daemon.php' post-start script exit 1 end script # service start phpdaemon #NXWTECH6 - 15 mai 2013 - Normandie Web Xperts
  • 9.
    CHEZ NOUS ? 21tâ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
  • 10.
    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
  • 11.
    Go Les daemons, c’est bien, mangeren ! #NXWTECH6 - 15 mai 2013 - Normandie Web Xperts