In welchem Szenario ist stateful besser als Staatenlose für das web?
Ich habe immer dafür die stateless web, aber würde gerne wissen, was die Befürworter der stateful web sagen.
Haben Sie eine situation, wo stateful ist besser geeignet als staatenlos?
InformationsquelleAutor |
Du musst angemeldet sein, um einen Kommentar abzugeben.
Unserem Projekt benutzt den Wicket-web-framework, welches ermöglicht stateful-oder stateless-Interaktion. Stateful-Seiten haben eine Reihe von Vorteilen:
Alles, was möglich ist, in einer stateful Anwendung könnte auch implementiert werden, die als Staatenlose müssen Sie einfach speichern des Zustands auf dem client, und geben Sie alle relevanten Status-Informationen auf jede Anfrage.
Link zu wicket: http://wicket.apache.org/
InformationsquelleAutor
Verwendung von Staaten im Allgemeinen lässt dem Programmierer die Arbeit zu erleichtern.
Doch die Staaten auch vorstellen, alle Arten von Parallelität Probleme, die sind einfach nicht präsent in stateless Situationen.
Dies ist im wesentlichen die Debatte zwischen funktionalen und imperativen Programmierung.
Angenommen, Sie haben zwei Benutzer auf Ihre Website auf der gleichen Zeit. Wenn Sie beide senden auf der gleichen Zeit, wäre es möglich, dass Sie die beiden hit-Datenbank oder einen anderen service und eine race-condition entsteht?
Aber das ist ein Datenbank-Problem obwohl; das hat nichts damit zu tun, ob Sie speichern, geben Sie in Ihrer web-Anwendung oder nicht. ACID-konforme Datenbanken (d.h. alle relationalen Datenbanken) geschrieben werden, behandeln diese Arten von Problemen.
Ich denke, was samoz ist, ist etwas, das wir laufen mit unserem aktuellen ticket-system in meinem code shop. Weil das ticket-system ist stateful, Sie weiß, welches ticket der Benutzer eingeloggt ist, aktuell geöffnet hat. Also, wenn Sie versuchen, öffnen Sie ein neues ticket in einem zweiten tab, das system Durcheinander kommt, weil du bist nur "angeblich" zu haben ein ticket zu einem Zeitpunkt geöffnet (wie Sie sich wahrscheinlich vorstellen können, dieses Scheiße). Eine stateless-app würde nicht einmal das Konzept von "aktuell offenes ticket", und damit würde nicht leiden unter diesem problem.
InformationsquelleAutor
Ich bin in der zustandsbehaftete client-stateless-server-camp wegen der Skalierbarkeit aber beim Blick auf die Hürden, die erklären, warum dies und das wurde schwieriger zu implementieren mit ein statusloser server, kriegst du resigniert auf lange Sicht, das ist, wo stateful-server scheint:).
Auch wenn ich es lieber zustandsbehaftete client ist dies nicht so einfach zu implementieren, effizient mit asp.net viewstate und vielleicht ist dies, wo zustandsbehaftete web bekommt praktisch.
Ich denke, dass zustandsbehaftete client-stateless-server macht Sie mehr bewusst von der Menge der Daten, die transportiert hin und her zwischen den Reifen. Das ist manchmal im verborgenen, bis Probleme erfolgt mit zustandsbehaftete server-Programmiermodell. Auch gehen von Staatenlosen zu zustandsbehaftete ist einfach (einfach ignorieren state info, die Sie anbieten, da Sie es schon wissen.. ). Gehen, das Gegenteil ist fast unmöglich/nicht Wert. Eine andere Sache, die mit einem zustandsbehaftete server ist, dass clearing-Staat/der cache ist oft ein problem, wenn Sie auch eine zustandsbehaftete client. Es ist einfach nur unintuitiv und verwirrend, oder maby nur ich bin 🙂
Jedenfalls GWT und viele andere moderne toolkits (Silverlight sprechen WCF) scheint zu bevorzugen, stateful client-stateless-server aufgrund der Skalierbarkeit Probleme. Vielleicht stateful server sollte die Ausnahme von der Regel stateless ... man könnte wählen Sie pro Seite/Fenster.
Quellen:
http://groups.google.com/group/google-web-toolkit/browse_thread/thread/2871ef5076c1bdb6/43e7a5377047aa44?#43e7a5377047aa44
InformationsquelleAutor
Stateless web-Anwendungen sind unerlässlich, wenn Sie beginnen mit einem höheren Verkehrsaufkommen.
Könnte es viele Benutzer Daten, die Sie nicht speichern wollen, auf der client-Seite aus Gründen der Sicherheit zum Beispiel. In diesem Fall müssen Sie, um es zu speichern auf server-Seite. Sie könnten die web-Anwendungen Standard-Sitzung, aber wenn Sie mehr als eine Instanz der Anwendung, die Sie benötigen, um sicherzustellen, dass jeder Benutzer zielt immer auf die gleiche Instanz.
Load Balancer haben oft die Fähigkeit zu haben, "sticky sessions", wo der Lastenausgleich einige, wie weiß, welche server für das senden der Nutzer-Anfrage zu. Das ist nicht ideal, obwohl zum Beispiel jedes mal, wenn Sie starten Sie Ihren web-Anwendung, die alle Benutzer verlieren Ihre Sitzung.
Ein besserer Ansatz ist es, speichern Sie die Sitzung, die hinter der web-Server in eine Art von Daten speichern, in diesen Tagen gibt es jede Menge tolle nosql-Produkte zur Verfügung (redis, mongo, elasticsearch, memcached). Diese Art der web-Server zustandslos sind, aber Sie haben noch state-server-Seite und die Verfügbarkeit dieser Staat verwaltet werden können, durch die Wahl der richtigen datastore-setup. Diese speichert die Daten in der Regel haben große Redundanz, so dass Sie sollte fast immer möglich sein, um änderungen an Ihrer web-Anwendung und sogar die Daten speichern, ohne Auswirkungen auf die Benutzer.
InformationsquelleAutor
Dinge wie die langen Formen (und zwar wirklich alles, das mehr als ein Seiten-refresh) sind viel einfacher, mit persistenten Zustand, da kann man eigentlich verfolgen, was Seite/Bühne der Anwender in einer einfach und geradlinig Weg. Aber ich persönlich glaube nicht, dass ein so kleiner Vorteil ist es Wert, aber es hängt stark von der web-Anwendung in Frage stellen.
InformationsquelleAutor