2010-07-02 2 views

Répondre

3

Mais une connexion TCP n'est-elle pas persistante jusqu'à ce que l'on ferme le navigateur? Pourquoi la prochaine requête peut-elle changer de serveur?

Une fois le chargement de la page Web, et toutes les images, les fichiers CSS et d'autres actifs sont récupérés, la connexion TCP fermera peu de temps après (after 5 seconds by default dans Apache 2.2, par exemple). Lorsque l'utilisateur clique sur un autre lien interne, une nouvelle connexion TCP est ouverte. Cela peut se terminer sur un autre serveur dans un scénario à serveurs multiples et à charge équilibrée.

+0

Oups ... Je pensais que la durée de vie d'une connexion TCP est le même que la fenêtre du navigateur .. – powerboy

+0

la durée de vie d'une seule session TCP peut même pas pour une « page » unique - il est possible, même Il est probable que de nombreuses sessions seront exécutées en parallèle pour télécharger la page principale et chaque image ou javascript src ou toute autre chose qui peut être envoyée à une autre session pour plus d'efficacité. – paxdiablo

1

Vous stockez des sessions dans une base de données de sorte que lorsque vous chargez l'équilibrage de votre application, l'équilibreur de charge peut transmettre votre requête à n'importe quel serveur de la batterie tout en ayant un accès correct aux données de session.

Une seule requête adressée à une page Web sera transmise à un seul serveur. La prochaine fois qu'un utilisateur fait une demande, une nouvelle connexion TCP est créée et peut être envoyée à un autre serveur de la batterie.

0

Les chargements de page dans un navigateur sont normalement sans état (c'est-à-dire qu'ils ne stockent pas l'état une fois la page entièrement chargée). Cela signifie que le chargement de votre prochaine page, qui peut être aussi simple que de passer de la page du catalogue d'achats à la page du panier, est une «transaction» HTTP distincte. En fait, il est possible que le texte d'une page et ses 12 images (et 400 publicités pornographiques) puissent aller chacun à un serveur totalement séparé (même s'ils utilisent la même URL de base) puisqu'ils peuvent opérer sur différents TCP sessions.

Vous ne voulez pas sérialiser tout le trafic afin de pouvoir réutiliser une seule session TCP, il est généralement plus rapide de les faire en parallèle sur des sessions distinctes. Il peut donc se retrouver sur un serveur totalement différent, oui. Dans ce cas, vous voudriez que l'état soit stocké dans une ressource partagée quelconque (comme une base de données). Il y a d'autres façons de contourner le problème (il y en a toujours) comme l'affinité basée sur IP où le trafic de la même adresse IP préférera le même serveur mais ce genre de mouches face à toute votre belle architecture d'équilibrage de charge :-)

Questions connexes