8 Stimmen

Warum ist es schlecht programmiert, einen zustandsabhängigen Webservice zu verwenden, und warum ist es erlaubt?

Ich benötige in unserer Organisation einen zustandsabhängigen Webservice. Aber überall, wo ich online lese, steht, dass der Aufbau eines zustandsbehafteten Webservice eine schlechte Programmierung ist, aber nirgendwo steht, warum. Ich glaube, ich verstehe nicht, was daran so schlecht sein soll. Ich verstehe auch nicht wirklich, warum man einen Workaround anbietet, um einen Zustand in einem Webservice zu ermöglichen.

Also ich denke, dass meine Frage ist, warum ist es schlechte Programmierung, einen zustandsabhängigen Webservice zu verwenden und warum wäre es erlaubt?

2 Stimmen

Ich würde das anders angehen: Was muss dieser Dienst tun, das zustandsabhängig ist? Kann man das kreativ vernebeln und spiegeln?

17voto

NotMe Punkte 86089

Der eigentliche Zweck eines Webdienstes besteht darin, eine bestimmte Funktionalität in einer einzigen Transaktion zu liefern, und zwar in einer Weise, die hoch skalierbar ist. Das bedeutet, die Dinge einfach und atomar zu halten.

Wenn Sie mehrere Anrufe tätigen müssen, um den Vorgang auszuführen, ist die Gefahr groß, dass die Transaktionen hängen bleiben. Wird der Kunde wiederkommen? Ist er schon fertig? Wie lange soll die Transaktion offen bleiben? Ist sie abgestürzt? Wie sollten Rollbacks gehandhabt werden?

Die Antworten auf diese Fragen können einen radikalen Einfluss auf die Ressourcen haben, die für den Betrieb Ihres Dienstes erforderlich sind. Deshalb wird empfohlen, alles auf einen Schlag zu erledigen.

3 Stimmen

Ausgezeichnete Antwort! Wenn Ihr Vorgang zustandsabhängig ist, was passiert dann, wenn der Server ausfällt? (Und das wird er. Deshalb betreiben wir Server-Cluster.) Der gesamte Status geht verloren. Bei zustandslosen Operationen können Sie die Anfrage an den nächsten Server im Cluster weiterleiten, als ob nichts passiert wäre.

2 Stimmen

Das stimmt ganz und gar nicht. Bei den Webdiensten handelt es sich um eine marktweit verbreitete Technologie zur Integration zwischen entfernten Anwendungen. Die meisten von ihnen sind zustandslos, weil die meisten Operationen, mit denen wir zu tun haben, zustandslos sind... Ihre Antwort könnte dazu verleiten, mehrere zustandslose Dienste zu verwenden, obwohl ein zustandsorientierter Ansatz der richtige ist, selbst wenn man die damit verbundenen nicht-funktionalen Aspekte berücksichtigt.

9voto

Sudhir Jonathan Punkte 16099

Hier sind einige Gründe, die mir einfallen:

  1. Die Kosten für die Aufrechterhaltung des Zustands müssen nur auf der Serverseite getragen werden - die Nutzer des Dienstes sind selten Webbrowser, haben also keine Cookies. Dies beeinträchtigt die Leistung Ihres Servers und erhöht die Komplexität Ihres Designs.

  2. Ein Dienstkonsument 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 Dienst anbieten, wird Ihr Kunde genau die Daten anfordern, die er benötigt. Die Aufrechterhaltung des Zustands auf dem Server ist dann überflüssig und unnötig.

  3. Transaktionen - ein Dienst ist ein schwebender Punkt in Ihrem System, da seine Clients meist intelligent sind und selbst entscheiden, wann sie Sie über Änderungen ihres Zustands informieren. Das bedeutet, dass Sie, wenn Sie den Zustand aufrechterhalten, zwischen den Dienstaufrufen warten müssen, um eine transaktionale Operation abzuschließen. Und es gibt absolut keine Garantie, dass der Client jemals den nächsten Dienstaufruf tätigen wird.

Es gibt viele Gründe, aber das sind die, die mir spontan einfallen :)

-2voto

Webservice guy Punkte 5

Ich denke, es ist eine Art Mythos

Wenn Google seine zustandsabhängige Webanwendung skalierbar machen kann, warum können wir dann nicht auch einen zustandsabhängigen Webservice skalieren? Es dreht sich alles um den App-Server, der die Skalierbarkeit einschränkt.

Auch bei einer Website oder einem Webservice geht es letztlich darum, einen besseren Service zu bieten. Wenn ein "zustandsbehafteter" Dienst Ihren Service verbessern soll, dann zögern Sie nicht, dies zu tun.

2 Stimmen

Sie sollten vielleicht klarstellen, welchen Teil von Google Sie meinen. Die Hauptseite von google.com ist nicht "zustandsorientiert".

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X