Combien de serveurs Web possède StackOverflow / ServerFault?
Si la réponse est `` plus d'un '', est-ce que cela permet d'obtenir l' adhérence de session lors de l'interrogation DNS?
Combien de serveurs Web possède StackOverflow / ServerFault?
Si la réponse est `` plus d'un '', est-ce que cela permet d'obtenir l' adhérence de session lors de l'interrogation DNS?
Réponses:
Les grands sites Web peuvent être «à charge équilibrée» sur plusieurs machines. Dans de nombreuses configurations à charge équilibrée, un utilisateur peut toucher n'importe quelle machine principale pendant une session. Pour cette raison, un certain nombre de méthodes existent pour permettre à de nombreuses machines de partager des sessions utilisateur.
La méthode choisie dépendra du style d'équilibrage de charge utilisé, ainsi que de la disponibilité / capacité du stockage backend:
Informations de session stockées dans les cookies uniquement : les informations de session (pas seulement un identifiant de session) sont stockées dans le cookie d'un utilisateur. Par exemple, le cookie de l'utilisateur peut contenir le contenu de son panier. Pour empêcher les utilisateurs de falsifier les données de session, un HMAC peut être fourni avec le cookie. Cette méthode est probablement la moins adaptée à la plupart des applications:
L'équilibreur de charge dirige toujours l'utilisateur vers la même machine : de nombreux équilibreurs de charge peuvent définir leur propre cookie de session, indiquant de quelle machine d'arrière-plan un utilisateur fait la demande et les diriger vers cette machine à l'avenir. Étant donné que l'utilisateur est toujours dirigé vers la même machine, le partage de session entre plusieurs machines n'est pas requis. Cela peut être bon dans certaines situations:
Base de données principale partagée ou magasin de clés / valeurs : les informations de session sont stockées dans une base de données principale, à laquelle tous les serveurs Web ont accès pour interroger et mettre à jour. Le navigateur de l'utilisateur stocke un cookie contenant un identifiant (tel que l'ID de session), pointant vers les informations de session. C'est probablement la méthode la plus propre des trois:
Dans l'ensemble, la plupart des applications Web dynamiques exécutent un certain nombre de requêtes de base de données ou de demandes de magasin de clés / valeurs, de sorte que la base de données ou le magasin de clés / valeurs est l'emplacement de stockage logique des données de session.
Si votre question est de savoir comment gérer les sessions sur plusieurs serveurs Web frontaux, la réponse est généralement d'utiliser une base de données centralisée. Au lieu de compter sur les instances du serveur Web pour suivre les fichiers de session sur les systèmes de fichiers locaux, vous écririez les identifiants de session et les données dans une base de données centrale, et tous les serveurs Web récupéreraient les données à partir de là.
L'utilisation de nemcached semble être une bonne solution pas comme mentionné par @David Pashley
Cela signifie avoir une instance memcached distante partagée par tous les serveurs et utiliser l'extension memcache PECL qui fournit son propre gestionnaire de session.
Il suffit de changer deux paramètres dans la configuration php!
Voici un bon tutoriel http://www.dotdeb.org/2008/08/25/storing-your-php-sessions-using-memcached/
IIRC, dans DotNetRocks # 440, ils ont dit une période de serveur. Je ne sais pas si c'est toujours le cas.
Edit: En fait, c'était Hanselminutes # 134 . Désolé.
Vous pouvez définir un cookie.
Vous pouvez calculer un hachage de l'adresse IP distante (au plus simple, les hôtes distants impairs vont au serveur A, les hôtes pairs vont au serveur B).
Il semble que vous pouvez également le faire via certaines valeurs qui restent avec le système source si vous utilisez un tunnel SSL.
En règle générale, chacun des mécanismes ci-dessus nécessite un serveur "proxy inverse" ou un équilibreur de charge quelconque. Cet équilibreur de charge accepte le trafic, puis le dirige vers le serveur qui avait initialement la session, en fonction de l'un des critères ci-dessus.
Je ne sais pas, cependant, ce que vous entendez par "interrogation DNS"
a) Vous pouvez stocker les informations de session dans le cookie utilisateur. Voir les cookies durcis sans état, qui ne stockent aucune donnée côté serveur, mais préservent l'état de la session http://www.cl.cam.ac.uk/~sjm217/papers/protocols08cookies.pdf . b) Vous pouvez changer le stockage de backend de session en base de données ou memcached. Pour éliminer un point de défaillance unique, vous pouvez définir la réplication de la base de données ou plusieurs nœuds memcached. Notez que memcached est recommandé dans de telles configurations où perdre l'état de l'utilisateur en session n'est pas une grosse erreur et ne le rend pas très mécontent. Pour les cas où la préservation de l'état est vitale, utilisez des bases de données. PHP, Django et Rails permettent au développeur d'écrire un backend de session personnalisé.