OK, alors j'ai ce scénario totalement rare et unique d'un site PHP à charge équilibrée. Le problème, c'est qu'il n'était pas équilibré en charge avant. Maintenant nous commençons à avoir des problèmes...
Actuellement, le seul problème concerne les sessions PHP. Naturellement, personne n'a pensé à ce problème au départ et la configuration des sessions PHP a été laissée à ses valeurs par défaut. Ainsi, les deux serveurs ont leurs propres fichiers de session, et malheur à l'utilisateur qui voit sa prochaine requête envoyée à l'autre serveur, parce que celui-ci n'a pas la session qu'il a créée sur le premier.
J'ai lu le manuel de PHP pour savoir comment résoudre cette situation. J'y ai trouvé la belle fonction de session_set_save_handler()
. (Et, par coïncidence, ce sujet sur SO) Neat. Sauf que je vais devoir appeler cette fonction dans toutes les pages du site. Et les développeurs des futures pages devront se souvenir de l'appeler tout le temps également. C'est un peu maladroit, sans compter que cela viole probablement une douzaine de bonnes pratiques de codage. Ce serait beaucoup plus agréable si je pouvais simplement retourner une option de configuration globale et Voilà - les sessions sont toutes magiquement stockées dans une base de données ou un cache mémoire ou quelque chose comme ça.
Avez-vous des idées sur la manière de procéder ?
Ajouté : Pour clarifier - je m'attends à ce que ce soit une situation standard avec une solution standard. Pour information, je dispose d'une base de données MySQL. Il doit bien exister un code prêt à l'emploi pour résoudre ce problème ? Je peux, bien sûr, écrire mon propre système de sauvegarde de session et auto_prepend
option signalée par Greg semble prometteur - mais cela reviendrait à réinventer la roue :P
Ajouté 2 : L'équilibrage de la charge est basé sur le DNS. Je ne suis pas sûr de savoir comment cela fonctionne, mais je suppose que cela devrait être quelque chose comme este .
Ajouté 3 : OK, je vois qu'une solution consiste à utiliser auto_prepend
pour insérer un appel à session_set_save_handler()
dans chaque script et écrire mon propre persister DB, peut-être en jetant des appels à memcached
pour de meilleures performances. C'est normal.
Existe-t-il également un moyen d'éviter de coder tout cela moi-même ? Comme un plugin PHP célèbre et bien testé ?
Ajouté beaucoup, beaucoup plus tard : C'est ce que j'ai fait à la fin : Comment implémenter correctement un persister de session personnalisé en PHP + MySQL ?
De plus, j'ai simplement inclus manuellement le gestionnaire de session dans toutes les pages.