[spip-dev] deux sites sur une seule base, et réflexion

Suite à une question posée par un copain, je réalise que notre système de
cron ainsi que notre système de notation des caches dans spip_caches pose
problème : en effet - pour sauter à la conclusion - ce qui concerne le cache
(ou plus généralement le disque) devrait être géré sur le disque, et ce qui
concerne les données devrait être géré dans la base.

Donc, en gros, si on voulait ne pas avoir de problème de cohérence dans la
situation évoquée ci-dessous, il faudrait que les données de spip_caches
soient gérées à l'intérieur du répertoire CACHE/ (avec une mini base de
données au format qu'on veut, filesystem, texte plat, sqlite...) ; à
l'inverse les crons touchant aux données (statistiques, popularites,
recalcul des rubriques publiées, etc) devraient être notés dans spip_meta,
et non pas dans des fichiers de ecrire/data/

Je vous transfère la discussion ci-dessous (avec permission) :

> Fil,

> On a décidé d'ouvrir un 2e site www.2esite.com
> pour relayer certaines infos hors du cadre de
> www.1site.com.
>

J'ai installé 1 nouveau SPIP, mais je pose la
question suivante: est-il possible de "brancher"
le fichier inc-connect.php3 du nouveau SPIP pour

> lire la base de 1site.com? Y a-t-il des
> inconvénients ou des problèmes car cela implique

2 caches, 2 logs, etc.?

Ce serait l'idéal: ensuite sur seropos.net je
limite les rubriques affichées dans les
squelettes, et pour le visiteur c'est 1 autre
site, mais je garde 1 seule base à gérer,qui
regroupe toutes les infos.

Est-ce faisable?

Tu vas me dire que je n'ai qu'à essayer, mais le

> problème c'est que je ne veux pas planter
> 1site.com avec mon test...

réponse

C'est très risqué, au niveau du calcul des stats notamment, tout va pêter...
Si tu débranches certains "cron()", par contre, ça devrait être jouable.
Mais je ne crois pas que ce soit la piste à suivre.

Car si c'est sur le même serveur, en jouant habilement des RewriteRules tu
n'auras pas besoin de faire deux SPIP ; un seul SPIP peut répondre
différemment à des sollicitations sur des HOST différents.

Si tu tiens (pour telle autre raison) à avoir deux bases de code php
séparées, tu devras en revanche au minimum partager les répertoires IMG/
(pour les logos, les docs joints, et les images), et ecrire/data/
(pour cron).

Je pense d'ailleurs que la faiblesse du système actuel de cron est là-dedans
-- trop facile de faire des dégâts. C'est un truc à améliorer je crois --
doubler l'info qui se trouve dans ecrire/data/ avec des valeurs dans
spip_meta, ou ne se baser que sur spip_meta, du moins pour les cron qui
affectent la base.

Pour le CACHE/, je ne visualise pas exactement les conséquences ; pour le
forum ça déconnera probablement, si le site 1 essaie d'invalider les caches
du site 2 (après le postage d'un nouveau forum), et les déclare invalidés
bien qu'il n'ait pas réussi à les effacer (puisqu'ils sont dans le site 2).

Mais ça doit pouvoir se régler en bidouillant un peu (changer le nom de la
table spip_caches sur un des deux sites, et le nom des metas associés au
vidage du cache).

Au total, ça ne me paraît pas viable, alors que l'option un seul site pour
deux HOST est très facile.

Mais la question donne à réfléchir.

Est-ce que je peux faire suivre ta question et ma réponse sur la liste ?

-- Fil

Au total, ça ne me paraît pas viable, alors que l'option un seul site pour
deux HOST est très facile.

Oui mais encore très facile est un peu obscure et cela m'interessa car j'ai un projet similaire le but etant deux sites sur le meme serveur, deux adresses web (un internet, un intranet), une seul base de donnée et deux jeux de squelettes différent et le café :slight_smile:

Donc, en gros, si on voulait ne pas avoir de problème de cohérence dans la
situation évoquée ci-dessous, il faudrait que les données de spip_caches
soient gérées à l'intérieur du répertoire CACHE/ (avec une mini base de
données au format qu'on veut, filesystem, texte plat, sqlite...) ; à
l'inverse les crons touchant aux données (statistiques, popularites,
recalcul des rubriques publiées, etc) devraient être notés dans spip_meta,
et non pas dans des fichiers de ecrire/data/

A y repenser on n'est pas si loin ; pour les crons, il fallait que le
système tolère deux exécutions en parallèle -- ce n'était pas le cas pour
les stats et les "referers de la veille", maintenant ça l'est. le reste doit
fonctionner (les popularites supportent d'être appelées aussi souvent qu'on
veut, le recalcul des rubriques, aussi, l'indexation, la syndication,
l'optimisation itou). La dernière exception est le mail d'envoi des
nouveautés -- là c'est clair, il risque de partir en double :slight_smile:

La vraie difficulté reste la gestion des caches et invalideurs ; en effet si
on a une "réplication" de la partie serveur web, donc plusieurs serveurs web
qui utilisent la même base de données SPIP, ils vont gérer leurs caches tous
les deux (ou plus) dans la table spip_caches.

En changeant _DIR_CACHE sur l'un des deux, on élimine le problème des
fichiers identiques des deux côtés. Mais pas celui de l'information
d'invalidation, à savoir la réponse à la question "dois-je invalider des
caches (dans mon répertoire cache) ?".

En gros, lorsque le site 1 aura cru avoir effacé les caches invalidés du
site 2, le site 2 ne saura pas que ses caches ont été invalidés, et des
forums ou des pétitions ne s'afficheront pas. Mais modifier ça, ça risque
d'être très lourd, car ça oblige à ajouter un critère sur le nom de fichier
partout dans inc_invalideurs, et à dédoubler les meta d'invalidation, de
façon pas immédiate.

Si on se moque des invalideurs, ou si on peut partager le répertoire CACHE/,
par contre c'est réglé très vite : exemple, dans le cas où le site 2 est une
version de dév du site 1, basé sur les données réelles.

Le problème ne se poserait donc que pour des machines différentes et sans
espace disque commun pour le cache, et où les invalideurs sont importants
(forums, petitions). Là, le code actuel (inc-cache, ecrire/inc_invalideur)
n'est pas adapté, et le travail à faire semble un peu trop important pour le
faire juste "pour le principe" :).

-- Fil

Si on se moque des invalideurs, ou si on peut partager le répertoire CACHE/,
par contre c'est réglé très vite : exemple, dans le cas où le site 2 est une
version de dév du site 1, basé sur les données réelles.

Le problème ne se poserait donc que pour des machines différentes et sans
espace disque commun pour le cache, et où les invalideurs sont importants
(forums, petitions). Là, le code actuel (inc-cache, ecrire/inc_invalideur)
n'est pas adapté, et le travail à faire semble un peu trop important pour le
faire juste "pour le principe" :).

-- Fil

Donc si on utilise ni les forums ni les petitions ni l'envoye des nouveautés pas de probleme si j'ai bien compris (et le systeme de notification du lab?)