2009-06-12 5 views
6

Mögliche Duplizieren
stateful webservicesStateful Webservice

ich eine Notwendigkeit für eine Stateful-Webservice in unserer Organisation haben. Aber überall, wo ich online lese, heißt es, dass das Erstellen eines Stateful Webservice schlechte Programmierung ist, aber nichts sagt warum. Ich denke, ich verstehe nicht, was daran so schlimm ist. Ich verstehe auch nicht wirklich, warum sie eine Arbeit geben würden, um es dir zu ermöglichen, in einem Webservice einen Status zu haben.

Also ich denke, dass meine Frage ist, warum ist es schlechte Programmierung einen statusreichen Webservice zu verwenden und warum sollte es erlaubt sein?

+2

Ich würde das auf eine andere Weise betrachten - was muss dieser Service tun, der Stateful ist? Kann das kreativ rauch und gespiegelt werden? –

Antwort

16

Der ganze Zweck eines Webdienstes besteht darin, in einer einzigen Transaktion eine Funktionalität bereitzustellen, die hochgradig skalierbar ist. Das bedeutet, Dinge einfach und atomar zu halten.

Wenn Sie mehrere Anrufe tätigen müssen, um die Operation auszuführen, haben Sie ein großes Potenzial, Transaktionen hängen zu lassen. Kommt der Kunde zurück? Sind sie fertig? Wie lange sollte die Transaktion offen bleiben? Sind sie abgestürzt? Wie sollten Rollbacks gehandhabt werden?

Die Antworten auf diese Fragen können sich radikal auf die Ressourcen auswirken, die für die Ausführung Ihres Dienstes erforderlich sind. Deshalb empfiehlt jeder, alles auf einen Schlag zu machen.

+3

Ausgezeichnete Antwort! Wenn Ihre Operation zustandsbehaftet ist, was passiert dann, wenn der Server ausfällt? (Und es wird.Deshalb führen wir Cluster von Servern aus.) Alle Zustände gehen verloren. Statuslos ermöglicht Ihnen, die Anforderung erneut an den nächsten Server im Cluster zu senden, als ob nichts passiert wäre. –

+1

Überhaupt nicht wahr. Bei Web Services handelt es sich um eine gemeinsame marktweite Integrationstechnologie zwischen Remote-Anwendungen. Die meisten von ihnen sind zustandslos, weil die meisten Operationen, mit denen wir zu tun haben, staatenlos sind ... Ihre Antwort kann Leute irreführen, wenn sie mehrere zustandslose Dienste verwenden, obwohl ein zustandsbehafteter Ansatz der richtige ist, auch wenn die damit verbundenen nicht-funktionalen Aspekte berücksichtigt werden. – BonanzaOne

9

Hier sind einige Gründe, warum ich denken kann:

  1. Die Kosten Zustand aufrechterhalten wird nur getragen Serverseite werden - Service Verbraucher sind selten Web-Browser, so dass keine Cookies. Dies verringert die Serverleistung und erhöht die Komplexität Ihres Designs.

  2. Ein Service-Consumer ist ein intelligentes Programm und kein dummer Browser. Als solches wird das Programm (fast immer) seinen eigenen Zustand beibehalten. Mit anderen Worten, wenn Sie einen Service bereitstellen, wird Ihr Kunde genau die Daten anfordern, die er möchte. Das Aufrechterhalten des Status auf dem Server wird überflüssig und unnötig.

  3. Transaktionen - ein Service ist ein unentbehrlicher Punkt in Ihrem System, da seine Kunden meist intelligent sind und entscheiden, wann Sie über Änderungen in ihrem Status informiert werden. Wenn Sie den Status beibehalten, müssen Sie möglicherweise zwischen den Serviceaufrufen warten, um eine Transaktionsoperation abzuschließen. Und es gibt absolut keine Garantie, dass der Kunde jemals diesen nächsten Serviceanruf tätigen wird.

Es gibt viele Gründe, aber diese sind diejenigen, die ich von aus der Spitze von meinem Kopf denken kann :)

-1

Ich denke, es ist eine Art Mythos ist

Wenn Google kann Machen Sie ihre statusreiche Webanwendung skalierbar. Warum können wir dann keinen Stateful Webservice skalieren? Es geht um den App-Server, der die Skalierbarkeit reduziert.

Selbst mit einer Website oder einem Webservice ist es das ultimative Ziel, besser zu dienen. Wenn ein "Stateful" Ihren Service verbessern soll, dann zögern Sie nicht, damit zu gehen.

+2

Sie möchten vielleicht klären, über welchen Teil von Google Sie sprechen. Das Haupt google.com ist nicht "stateful". – NotMe