ASP.Net - Verwalten von Sitzungsdaten in einer Load-Balanced-Umgebung?

8

Wie geht ASP.Net mit Sitzungsdaten in einer Load-Balanced-Umgebung um? Nehmen wir an, ein Benutzer macht mehrere Anfragen, während er durch ein paar Seiten navigiert. Werden alle Anforderungen im Load Balancer an denselben Server gesendet?

Was kann ich tun, wenn nicht alle auf denselben Server verweisen? Wie gehe ich mit meinen Sitzungsdaten um?

    
aryaxt 28.09.2011, 02:27
quelle

4 Antworten

4

Sie müssen sicherstellen, dass Ihr NLB die Möglichkeit hat, "Sticky" -Sitzungen zu aktivieren.

Wenn dies keine Option ist, müssen Sie sich die ASP.Net-Sitzungsmodi ansehen , um entweder einen Sitzungsserver oder einen Sicherungsspeicher wie SQL Server zu konfigurieren.

    
Josh 28.09.2011, 02:45
quelle
1

Im Allgemeinen versuchen die meisten Load Balancer dauerhafte Verbindungen zu haben, aber für Ihre Zwecke können Sie dies nicht garantieren. Am besten verwenden Sie so etwas wie ein SQL-Backend, um den Status beizubehalten oder eine separate Klasse zum Verwalten Ihrer Sitzungsdaten zu erstellen. In beiden Fällen können Sie die Sitzungsdaten dann neu erstellen, wenn sie null sind, wenn Sie anders erwarten. Ich neige dazu, die Getter zu verwenden, um nach Nullen zu suchen und bei Bedarf wieder aufzubauen. In der Praxis habe ich keine Metriken verwendet, um zu sehen, wie oft es neu aufgebaut wird, aber ich würde nicht sehr oft raten. Besser als Nachsicht, wie sie sagen.

    
McArthey 28.09.2011 02:37
quelle
1

Load Balancer können normalerweise mit etwas konfiguriert werden, das die Infrastruktur-Typen sticky session oder sticky bit aufrufen. In dieser Art von Umgebung, sobald eine Anfrage einem Server zugewiesen wurde; Es bleibt während der Sitzung bei diesem Server.

Wenn Load Balancer nicht auf diese Weise konfiguriert sind, bietet ASP.NET mehrere Sitzungsstatusanbieter an. Sehr beliebt ist der SQL Server State Provider , mit dem Sitzungsinformationen in einer Datenbank gespeichert werden können . Damit dies funktioniert, müssen alle im Session-Objekt platzierten Objekte serialisierbar sein, damit sie in einer Tabelle gespeichert werden können.

Wie gesagt, es gibt mehrere Alternativen. Zum Beispiel bevorzugen einige Leute einen anderen Ansatz wie memcached oder ähnliche Produkte.

    
Icarus 28.09.2011 02:48
quelle
1

Sie können NLB von Windows oder andere Produkte wie BIG-IP F5, HA-Proxy, gibt es Tonnen von Optionen.

Verwenden Sie Out-of-Proc (Statusserver), und vergewissern Sie sich, dass die Einstellungen für die Computerschlüssel auf allen Ihren Servern identisch sind. Stellen Sie außerdem sicher, dass Sie IO auf einem freigegebenen Laufwerk wie einem NAS ausführen.

Hier ist ein Link mit weiteren Tipps: Lastenausgleich und ASP.NET

    
rick schott 28.09.2011 02:48
quelle

Tags und Links