[spip-dev] Retour d'experience sur un spip qui a mangé du banania .

Bonjour,

  Je fais suite à la demande de Fil en vous faisant ici un retour d'expérience
sur le site http://www.humanite.fr

  Rapidement quelques chiffres :
- 2003 http://www.humanite.fr passe sous spip
- 3 juillet 2007, relookage graphique et SQL
- 380 000 articles (intégralité des éditions de 1990 à nos jours)
- 73 mots clefs
- 5 600 rubriques
- 3 240 documents
- 1 800 000 visites/mois
- 3 000 000 pages vues/mois
- 3 serveurs (Apache, MySQL, Intuition)
- 5 personnes qui bossent dessus côté contenu
- 2 développeurs/intégrateurs
- 1 graphiste
- 1 administrateur système

  Spécificité non spip du site de l'huma :
- Intuition, moteur de recherche sémantique de Sinequa, on fait un export de
la base spip_articles sous forme XML qu'on indexe dans intuition (voir
http://www.humanite.fr/recherche.html )
- Import XML tous les jours les éditions arrivent sous forme de XML sur le
serveur en scp. Une moulinette perl les traite les analyses et les insère
dans spip_articles.
- Une page d'admin spécifique qui permet d'attribuer des mots clefs aux 75
articles quotidiens sur un seul formulaire, et de publier tous les articles
en un seul clic.

  Spécificité spip :
- pas de moteur de recherche
- pas de statistiques
- pas de suivi des revisions

  Ajout et modif pour l'huma, qui ne sont pas de plugins car trop spécifiques,
(nous n'avons jamais touché au coeur et nous faisons des plugins pour etendre
la couverture fonctionnelle ) :
- a partir des urls_propres creation des urls_huma comprenant rubrique
mots_clefs et url_article (on a du s'appuyer sur un vieux dev fait sous spip
1.4 ), creation de 2 balises : #URL_GROUPES_MOTS et #URL_RUBRIQUE_MOT. Ceci
inclus une quantité importante de rêgle de rewriting pour rester compatible
avec les anciennes URLs.
- page abonnement
- envoyer cet article

  Pour que tout se passe bien nous avons fait des optis sur les différents
serveurs :
- Apache est optimisé loin de ses confs par défaut, AllowOverride None,
Rewrite rule dans la conf serveur entre autres. Il y aurait un cours d'opti
apache complet à faire la dessus.
- Mysql est pas mal tuné pour s'adapter à la base, le repertoire de cache
mysql est en tmpfs.
- le /tmp de spip est un tmpfs de 4Go

  Aujourd'hui tout se passe bien, le site encaisse les indexations furieuses et
concurrentes de Slurp et de Googlebot.

  Mais, car il y a un malheureusement un mais, le cron_invalideur lance des
requêtes épouvantables toutes les heures...
Genre :
UPDATE `humav3`.spip_caches SET type='x' WHERE ((fichier IN
('5/_%2B%3Fdebut_art%3D415.135a013c', '0/c-mot_rubrique_contenu.8fca39cb', 'a/cor-846221-12806-id-fr.2caceb4c', ....
sur des centaines de lignes.
Je pense qu'elle vient de la ligne 106 dans ecrire/inc/invalideur.php

spip_query("UPDATE spip_caches SET type='x' WHERE " .
calcul_mysql_in('fichier', $tous));

  La requête prends entre 40 et 70 secondes (j'ai une moyenne de 300 000
fichier dans spip_caches).

  Mettre le tmp de spip dans un tmpfs peut sembler critiquable. Je l'ai fait
pour plusieurs raisons :
- je disposais de la RAM pour le faire.
- tmpfs est super rapide en écriture.
- tmpfs est super rapide en suppression de fichier, et lors de l'effacement
horaire de la cache quand je suis sur mon systeme de fichier ext3 (Raid 10
scsi 15k) le load s'envole à coup de rm (je précise que dans ce cas
$quota_cache=0).

Enfin le calcul du quota de la cache est faux, mais c'est semble-t'il lié a
php qui ne peut pas prendre en compte la taille occupée sur le disque plutôt
que la taille des données, du coup comme la taille des blocs de mon système
de fichier est de 512, l'erreur que fait spip pour le dimensionnement de son
cache est de +60%. Quand on le sait ce n'est pas grave mais au début cela
surprend :slight_smile:

  Merci à tous,

  VIVE SPIP !

PS: si vous voulez des précisions sur un point n'hésitez pas à le demander.

Waow !!!

Merci beaucoup Pierre-Gilles pour ce retour d'expérience inestimable, non
vraiment chapeau. Riche d'enseignements pour nous autres qui passeront d'un
moment à l'autre de sites Verveine Menthe à des versions Banania. :slight_smile:

Tofer

-----Message d'origine-----

Mialon Pierre-Gilles wrote:

  Mais, car il y a un malheureusement un mais, le cron_invalideur lance des requêtes épouvantables toutes les heures... Genre : UPDATE `humav3`.spip_caches SET type='x' WHERE ((fichier IN ('5/_%2B%3Fdebut_art%3D415.135a013c', '0/c-mot_rubrique_contenu.8fca39cb', 'a/cor-846221-12806-id-fr.2caceb4c', .... sur des centaines de lignes.
Je pense qu'elle vient de la ligne 106 dans ecrire/inc/invalideur.php

spip_query("UPDATE spip_caches SET type='x' WHERE " . calcul_mysql_in('fichier', $tous));

  La requête prends entre 40 et 70 secondes (j'ai une moyenne de 300 000 fichier dans spip_caches).

Merci de tout ça ! Et je me demande si c'est pour cette raison que le cache chez nous "explose" presque chaque jour ? SPIP n'arrive absolument pas à maîtriser la taille du cache qui s'envole regulièrement vers des centaines de Mo. En ce moment j'efface le cache presque tous les jours.

Peut-être je pourrais tenter une mise à jour vers la nouvelle SVN pour voir si les changements à invaliduer.php améliore la situation ?

Paolo

* Paolo tapotait, le 18/07/2007 16:34:

Peut-être je pourrais tenter une mise à jour vers la nouvelle SVN pour voir si les changements à invaliduer.php améliore la situation ?

Pour ma part, j'ai tenté et les sites tiennent le coup.

Mialon Pierre-Gilles <pierre-gilles <at> netaktiv.com> writes:

- 3 serveurs (Apache, MySQL, Intuition)

PS: si vous voulez des précisions sur un point n'hésitez pas à le demander.

Merci pour ce message très intéressant qui montre qu'on peut faire de bon gros
sites pro sous Spip.

Quand tu parles trois serveurs ce sont des frontaux avec loadbalancing ? Comment
ça se passe par rapport à la gestion des élements Spip ? (images, vidage de
cache...? )

Valery

* RealET tapotait, le 18/07/2007 16:30:

* Paolo tapotait, le 18/07/2007 16:34:

Peut-être je pourrais tenter une mise à jour vers la nouvelle SVN pour voir si les changements à invaliduer.php améliore la situation ?

Pour ma part, j'ai tenté et les sites tiennent le coup.

Précision : il va falloir attendre quelques heures pour voir si le cache n'explose pas (ce qui est peu probable, les sites ayants 50Mo de marge pour le cache et ne l'ayant jamais dépassé).

Mialon Pierre-Gilles <pierre-gilles <at> netaktiv.com> writes:
> - 3 serveurs (Apache, MySQL, Intuition)
>
> PS: si vous voulez des précisions sur un point n'hésitez pas à le
> demander.

Merci pour ce message très intéressant qui montre qu'on peut faire de bon
gros sites pro sous Spip.

Quand tu parles trois serveurs ce sont des frontaux avec loadbalancing ?

1 serveur apache (bi-opteron 248 raid10 scsi 15k 6Go de RAM)
1 serveur mysql (bi-xeon-LV raid10 scsi 15k 8Go de RAM, la base est quasiment
toujours en RAM)
1 serveur Intuition (bi-PIII scsi 10k) (a terme je pense qu'il va disparaître
et passer les services sur le serveur mysql

J'aurais bien aimé faire de la HA dessus mais les moyens ne suivent pas.
J'ai par le passé fait des test avec un proxy squid, ça marche pas mal aussi.

Comment ça se passe par rapport à la gestion des élements Spip ? (images,
vidage de cache...? )

La cache j'y touche pas normalement ...

Je vois que vous utilisez le plugin tidy(0.1); as-tu essayé de
comparer la tenue du serveur avec et sans ce plugin ? C'est quelque
chose de relativement coûteux, et qui ne devrait plus être tellement
utile.

-- Fil

Je vois que vous utilisez le plugin tidy(0.1); as-tu essayé de
comparer la tenue du serveur avec et sans ce plugin ?

Tidy est couteux, je confirme, mais il se trouve que le serveur apache était à
l'origine taillé pour faire apache & mysql du coup, maintenant il peut se
permettre ça...

C'est quelque chose de relativement coûteux, et qui ne devrait plus
être tellement utile.

Reste que c'était à l'origine pour le dev, et que je suis en train de corriger
dans les squelettes ce que tidy corrigé à la volé (espace "" etc ) pour que
nous puissions passer par le parseur sax de spip qui doit être moins
forkofage :slight_smile: mais qui laisse plus d'erreur.

Reste que c'était à l'origine pour le dev, et que je suis en train de corriger
dans les squelettes ce que tidy corrigé à la volé (espace "" etc ) pour que
nous puissions passer par le parseur sax de spip qui doit être moins
forkofage :slight_smile: mais qui laisse plus d'erreur.

Ca n'est pas du tout la même chose : le plugin tidy nettoie les pages
à la volée à chaque hit (avec un petit cache quand même) ; le moteur
de SPIP essaie de produire des #TEXTE propres (à insérer dans des
squelettes propres, bien sûr).

Normalement avec des squelettes propres et un contenu pas trop
méchant, tout est W3C compliant.

-- Fil

> Reste que c'était à l'origine pour le dev, et que je suis en train de
> corriger dans les squelettes ce que tidy corrigé à la volé (espace "" etc
> ) pour que nous puissions passer par le parseur sax de spip qui doit être
> moins forkofage :slight_smile: mais qui laisse plus d'erreur.

Ca n'est pas du tout la même chose : le plugin tidy nettoie les pages
à la volée à chaque hit (avec un petit cache quand même) ; le moteur
de SPIP essaie de produire des #TEXTE propres (à insérer dans des
squelettes propres, bien sûr).

En effet faut que je l'enlève alors ... j'avais pas compris je pensais qu'il
était effectué une fois par page pas pour chaque affichage.

SPIP ne fait aucune vérification syntaxique ? il râle pour dire les choses qui
vont pas tout de même...

SPIP ne fait aucune vérification syntaxique ? il râle pour dire les choses qui
vont pas tout de même...

Il fait correctement la part qui le concerne : analyse des squelettes
(qui peuvent produire autre chose que du XHTML) et traitement
typographique des raccourcis (pour produire du XHTML correct). Le
reste n'est pas de son ressort mais de celui du webmestre/concepteur
de squelettes

-- Fil

* RealET tapotait, le 18/07/2007 16:41:

* RealET tapotait, le 18/07/2007 16:30:

* Paolo tapotait, le 18/07/2007 16:34:

Peut-être je pourrais tenter une mise à jour vers la nouvelle SVN pour voir si les changements à invaliduer.php améliore la situation ?

Pour ma part, j'ai tenté et les sites tiennent le coup.

Précision : il va falloir attendre quelques heures pour voir si le cache n'explose pas (ce qui est peu probable, les sites ayants 50Mo de marge pour le cache et ne l'ayant jamais dépassé).

La charge du serveur est stable.
Par contre, le nombre de requêtes MySQL par seconde est passée de 150 à 120.
Ce nombre, compte tenu du cache de SPIP me semble abérent.
Il n'y a que des SPIP sur ce serveur, tous avec le squelette SoyezCreateurs (qui a des inclusions en cascade, certaines conditionnées par des mots clefs ou des cfg).