Frage

Welche Art von Server haben Sie die Menschen in realen Projekten sehen?

1) Web Services staatenlos werden müssen:. Grundsätzlich müssen Sie Benutzername / Passwort bei jeder Anfrage senden, müssen jede Anfrage HTTPS verwenden und ich werde das Benutzerobjekt jedes Mal authentifizieren und laden bei Bedarf

2) Eine Session für Web Services: wie in einem Web-Container, so kann ich zumindest die authentifizierte Benutzerobjekt speichern und so etwas wie eine Session-ID haben, so brauche ich nicht, Last und überprüfen Sie die Benutzer auf jeder zu authentifizieren Anfrage.

3) Sticky Service (persistent Service für Anfragen): https : //jax-ws.dev.java.net/nonav/2.1/docs/statefulWebservice.html

Ich verstehe die Probleme bei der Skalierbarkeit von Stateful-Diensten (und der Web-Anwendungs-Sessions), aber manchmal müssen Sie irgendeine Art von Staat, zum Beispiel für einen Warenkorb. Sie können aber auch diesen Zustand in der Datenbank setzen (benutzen Sie die Back-End als eine Art Session argh ) oder das Bestehen der gesamten Staat an den Client (der Kunde wird verantwortlich für den gesamten Warenkorb Nachsenden) .

Die Wahrheit ist, zumindest für Web-Anwendungen, hilft die Sitzung viel in vielen Situationen. Skalierbarkeitsprobleme ignoriert werden kann, wenn das System erkennt an, dass „der Benutzer von vorne beginnen muss tun, was er tut, wenn sein Web-Server gehen geschieht“, oder Sie können eine Sitzung Cluster versuchen, wenn das ist nicht akzeptabel.

Wie ist es für Web-Services? Ich bin geneigt, dass Web-Service als Web-Anwendungen sind sehr unterschiedlich zu schließen und akzeptieren Option 1) (immer staatenlos), aber es wäre schön, andere Meinungen basierend auf reale Projekterfahrung zu hören.

War es hilfreich?

Lösung

Im Idealfall eines Web Service (Web-Seiten) sollten staatenlos sein.

Leider nimmt diese sehr gut durchdachte Problembereich, und eine klare Trennung von Bedenken.

Ich habe festgestellt, dass in der Praxis die meisten reale Web-Sites ist abhängig von Zustand, obwohl diese ihre Skalierbarkeit begrenzt.

Ich habe auch festgestellt, dass viele reale Web-Service stützt sich auch auf Zustand.

Am Ende der ‚richtige‘ Entscheidung ist derjenige, der für das spezifische Problem arbeitet, so ist es wahrscheinlich in Ordnung einen WebService zu schreiben, die auf Staat angewiesen ist, und Refactoring es später, wenn die Skalierbarkeit ein Problem wird.

Andere Tipps

Es ist zwar nur ein kleiner Unterschied, aber es sollte noch erwähnt werden:

Es ist nicht Zustand in Web-Service , die Skalierbarkeit zu töten, sondern es ist Zustand auf dem Anwendungsserver Das ist den Web-Hosting-Service, die Skalierbarkeit töten. In dem Moment, sagen Sie, dass dieser Benutzer auf diesen Server zugreifen muss (wie in klebrigen Sitzungen getan) Sie beschränken effektiv Ihre Skalierbarkeit Optionen. Der Punkt, den Sie erhalten möchten, ist, dass ‚Jede Ihrer freien Lastenausgleich App-Server‘ Anfrage Web-Service verarbeiten kann, und wenn I 1 hinzufügen mehr App Server sollte ich in der Lage sein% mehr Nutzer zu behandeln .

Es ist völlig in Ordnung (und persönlich empfohlen), wenn Sie wollen Zustand halten in einem Authentifizierungs-Token und auf jede Anforderung der Service erhalten geben Ihre ‚Staat‘ aus einem Datenspeicher (vorzugsweise eine redundante und eine partitioniert abzurufen, zum Beispiel verteilt + replizierten Schlüssel / Wert-Datenspeicher). Das ist, wie Amazon tut es mit SimpleDB und Google mit BigTable.

nimmt Ebay einen etwas anderen Ansatz und speichert die meisten der staatlichen Kunden in einem Cookie, so dass es mit jeder Anforderung übergeben wird. Obwohl es viel mehr Verkehr erzeugt, ist es noch skalierbar wie alle ihre Server können immer noch die Anforderung verarbeiten.

Wenn Sie eine skalierbare Datenspeicher möchte ich unter redis empfehlen, sich hat Geschwindigkeit und Funktionen, die nicht in einem Schlüssel / Wert-Datenspeicher zu schlagen.

Sie sollten auch überprüfen highscalability.com wenn Sie Zugriff auf gutes Material zu wollen, wie schnell und skalierbare Dienste zu bauen.

Hoch davon ab, ob der Dienst einzelne Transaktion orientiert ist (sagen Aktienkurse immer), oder wenn die Ausgabe von dem Dienst auf einem Datum von einem bestimmten Client über mehrere Transaktionen zur Verfügung gestellt abhängig ist (in diesem Fall Staat muss beibehalten werden.)

Was Skalierbarkeitsprobleme, Zustand in einer Datenbank zu speichern nicht wirklich ein schlechter Weg zu gehen, ist (in der Tat ist es wahrscheinlich der einzige Weg zu gehen, wenn Sie Load Balancing Ihren Dienstes über eine Server-Farm sind.)

Ich denke, mit Flex-Clients der Staat aus dem Dienst und in der Client-Schicht bewegt wird. Halten Sie die Dienste staatenlos und lassen die Kunden erforderlich, um den Zustand zu halten. Die Leistungen bleiben einfach, und die Kunden sind frei, sie zusammen zerdrücken, wie sie wollen.

Sie scheinen zu Staat und Authentifizierung gleich. Vielleicht sind Sie es gewohnt, Benutzernamen und Passwort in den Sitzungsstatus zu speichern?

Dies ist nicht notwendig, auch mit altem ASMX Web-Service. Übergeben Sie einfach, was Informationen Sie zu Ihrem „Login“ Betrieb benötigen. Dieser Vorgang wird definiert einen „Authentication Ticket“ Header zurück.

Alle anderen Operationen, die eine Authentifizierung erfordern werden diese „Authentication Ticket“ Header erfordern. Sie werden jeweils überprüfen die Header zu sehen, ob es einen gültigen, authentifizierte Benutzer darstellt. Wenn ja, dann werden sie ihre Aufgabe erfüllen. Wenn nicht, dann werden sie einen SOAP-Fehler zurückgeben darauf hinweist, dass eine Authentifizierung erforderlich ist.

Kein Staat ist nicht erforderlich. stellen Sie sicher, einfach, dass das Authentifizierungsticket kann Ihr Dienst läuft auf (zum Beispiel in einer Web-Farm) auf einem beliebigen Server validiert wird, und Sie werden in Ordnung sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top