Plack dans Koha 3.10, pourquoi vous allez le vouloir !

Portrait de ppoulain

Maintenant que Koha 3.10 approche, et que l'interface professionnelle en mode "Plack" est stable, je voulais mesurer le gain apporté par Plack par rapport au mode CGI utilisé jusqu'à ce jour.

Pour cela, j'ai réalisé 2 tests différents :

  • Le premier a consisté à enregistrer la même série d'actions sur la même base de données dans les deux cas, depuis Firefox, en enregistrant mon écran à l'aide de l'application RecordMyDesktop (http://recordmydesktop.sourceforge.net/about.php)
  • Le second a consisté à développer un script Perl qui exécute une série d'actions dans Koha en utilisant le bel outil Test::WWW::Mechanize. Cette bibliothèque Perl vous permet de manipuler des pages web exactement comme si vous le faisiez avec la souris et le clavier.

Ces deux tests poursuivent des buts différents :

  • Le premier montre le gain global de productivité. Même si le logiciel est exécuté plus vite sur le serveur, il y a d'autres paramètres qui entrent en compte et réduisent le gain global : le temps que le navigateur affiche la page, le temps nécessaire à l'utilisateur pour entrer des données, déplacer la souris, cliquer,...
  • Le second montre le gain du coté du seul serveur : le script n'affiche rien, clique immédiatement, remplit les formulaires immédiatement,...

Test 1 : Enregistrement dans Firefox

J'ai fait deux enregistrements du scénario suivant :

  • Se connecter à l'interface professionnelle
  • Préter 5 document
  • Faire un retour de ces 5 documents
  • Préter 5 documents à un autre adhérent, qui avait des amendes, il fallait donc confirmer le prêt
  • Rechercher dans une notice bibliographique
  • Faire une réservation
  • Faire un retour des 5 documents prétés

J'ai choisi le prêt et le retour parce que c'est l'opération que les bibliothèques (et notamment les bibliothèques publiques) doivent faire le plus rapidement : les adhérents sont à la banque de prêt et veulent partir le plus rapidement possible !!!

Les vidéos montrent la temps mis pour faire ce scénario lorsque vous êtes en mode Plack et en mode CGI.

  • Avec Plack, il faut 123s
  • En mode CGI, il faut 166s

Cela signifie que vous êtes 25% plus productifs lorsque vous exécutez Koha en mode Plack par rapport au mode CGI.
Cela peut signifier aussi que, si vous travaillez 8H par jour à la banque de prêt, il vous suffira dorénavant de 6H pour faire le même travail. Ou, si vous préférez, vous pouvez boire le café pendant 15mn toutes les 45mn (les producteurs de café vous remercieront, votre corps peut-être moins... vous pouvez faire autre chose de ces 15mn ;-) )

Si vous regardez le film en mode Plack, le timing est le suivant :

  • secondes 0 à 6 : connexion (saisir l'identifiant et le mot de passe)
  • secondes 6 à 9 : accéder à la page des prêts
  • secondes 9 à 33 : faire 5 prêts (entrer le numéro de carte adhérent, saisir les 5 codes-barres)
  • secondes 33 à 52 : faire 5 retours (saisir les 5 codes-barres)
  • secondes 52 à 84: faire 5 prêts (entrer le numéro de carte adhérent, saisir les 5 codes-barres, forcer le premier car l'adhérent a des amendes)
  • secondes 84 à 91 : Faire une recherche catalogue (saisir les termes recherchés, avoir la liste de résultats)
  • secondes 91 à 103 : Poser une réservation (atteindre la page des réservations, saisir l'adhérent, valider la réservation)
  • secondes 103 à 123 : faire 5 retours (saisir les 5 codes-barres)

Ce test a été fait entièrement sur mon portable (qui faisait pour l'occasion à la fois serveur Koha et poste de travail). Il a presque 2 ans, c'est un Lenovo thinkpad, Intel core i3, 4Go de RAM, 320Go de disque dur, Ubuntu 12.04, la configuration par défaut de mySQL et d'apache (pas d'optimisation)

Test 2 : en utilisant Test::WWW::Mechanize
Pour ce test, j'ai écrit un script Perl qui :

  • Se connecte à l'interface professionnelle
  • Prête 5 document
  • Fait un retour de ces 5 documents

Ce script est ensuite exécuté avec les commandes suivantes:

export PERL5LIB=/path/to/koha;export KOHA_CONF=/path/to/koha-conf.xml; export KOHA_INTRANET_URL=http://localhost:5001/; export KOHA_USER=test;export KOHA_PASS=test;time ./automate_check-in-out.pl

Les résultats sont les suivants :

  • Avec Plack : 12,271s
  • En mode CGI : 31,533s

Dans ce cas, le nombre indique que le travail du serveur est diminué par un facteur 70% Oui, ce n'est pas une erreur de frappe : Koha en mode Plack divise le travail par 2.58 !
On peut dire que vous pouvez gérer une bibliothèque 2.58 fois plus grosse avec le même serveur. Ou bien avoir 2.58 fois plus de bibliothécaires qui utilisent Koha sans changer votre matériel (note : ;-) )
Bref, c'est énorme, et votre DSI va vous remercier !

Etude complémentaire
Je voulais également voir s'il y avait des différences du coté de MySQL.
J'ai mesuré le nombre de requêtes exécutées par le script avec cette simple commande :

mysql -e 'SHOW global status'|grep -E "Com_select|Com_insert|Com_update"

Elle renvoie le nombre de requêtes select, insert, update et delete qui ont été exécutées

En mode Plack :

  • 6 deletions
  • 68 inserts
  • 723 select
  • 25 updates

En mode CGI :

  • 6 deletions
  • 74 inserts
  • 1114 select
  • 25 updates

La plus grande différence vient des select (ce n'est pas une surprise pour moi). Je pense que cela vient principalement du fait que les préférences systèmes sont lues une seule fois en mode Plack, alors qu'elle sont lues à chaque page en mode CGI (sauf si vous avez memcache, ce que je n'avais pas)

Quoi qu'il en soit, ma principale conclusion ici est que nous faisons trop de requêtes SQL, que ce soit en mode CGI ou Plack : le script charge 16 pages, soit une moyenne de 45 requêtes SELECT par page. La plupart doivent concerner les paramètres (sites, types de documents, règles de prêt,...) et cela doit être notre prochain objectif pour continuer à améliorer les performances.

Conclusion

La conclusion est évidente = vous allez vouloir Koha en mode Plack !

Cela dit, il y a quelques contreparties que je vais lister :

  • Plack n'est pas encore "packagé" pour Koha. Pour le mettre en place, vous allez devoir mettre les mains dans le cambouis et modifier des fichiers sur le serveur, à la main. Heureusement, Dobrica (de Croatie) a écrit pas mal de choses utiles sur le wiki communautaire : http://wiki.koha-community.org/wiki/Plack Même si cette documentation est bien complète, attendez vous à des difficultés. Rien qu'un administrateur système ne saura résoudre, mais prévoir de croiser quelques embûches.
  • Le prix de la vitesse est la consommation mémoire. Si vous êtes vraiment juste juste en consommation mémoire, il est possible que vous ayez du soucis avec Plack. Sur les serveurs actuels, il n'y a pas de problème à priori, mais vous êtes prévenu !
  • Un comportement difficile à prévoir : en mode CGI, tout est supprimé lorsque la page que vous avez demandée a été fournie. Avec Plack, tout est conservé en mémoire, pour être prêt si vous en avec encore besoin. Cela signifie qu'une erreur dans un script, une fuite mémoire, une variable mal positionnée, restera ainsi, et vous ne comprendrez pas pourquoi Koha se comporte "bizarrement". Ne sur-estimez pas le risque nous avons beaucoup testé Plack, mais cela peut se produire.

Cela dit, ces contreparties ne doivent pas vous faire renoncer à utiliser Plack, parce que c'est vraiment une grande amélioration pour Koha.

PS :

  • Les vidéos et le script sont disponible à l'adresse suivante : https://depot.biblibre.com/ppoulain/comparing_plack_cgi/
  • Les utilisateurs qui sont en version 3.8.6 peuvent suivre le même chemin : les problèmes qui ont été corrigés depuis la publication de la version 3.8.0 ont tous été "backportés" vers la branche 3.8

Ajouter un commentaire

Filtered HTML

  • Les adresses de pages web et de courriels sont transformées en liens automatiquement.
  • Tags HTML autorisés : <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Les lignes et les paragraphes vont à la ligne automatiquement.

Plain text

  • Aucune balise HTML autorisée.
  • Les adresses de pages web et de courriels sont transformées en liens automatiquement.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
CAPTCHA
Cette question est là pour vérifier que vous êtes bien un humain, il suffit simplement de recopier le mot sur l'image.

Inscrivez vous à notre newsletter et découvrez notre actualité.