Definition „Zustandslosigkeit“ Was bedeutet „stateless“?
Zustandslosigkeit ist die Eigenschaft von Protokollen und Anwendungen, jede Interaktion als eigenständigen, in sich abgeschlossenen Vorgang zu behandeln. Im Gegensatz dazu müssen zustandsbehaftete Systeme Sitzungsdaten speichern.

Webanwendungen, Cloud-Systeme und andere Client-Server-Architekturen können entweder zustandsbehaftet (stateful) oder zustandslos (stateless) aufgebaut sein. Die Wahl der richtigen Methode ist entscheidend, denn beide Konzepte haben ihre Vor- und Nachteile.
Was ist ein Zustand?
In der Informatik bezeichnet der Begriff „Zustand“ den Status, die spezifischen Gegebenheiten eines Systems oder eines Objektes zu einem bestimmten Zeitpunkt. Zustände beschreiben den Kontext, in dem ein Prozess oder eine Anfrage ausgeführt wird.
Um eine Aufgabe zu erledigen, sind oft mehrere Arbeitsschritte notwendig. Jeder Arbeitsschritt führt zu einer Zustandsänderung des bearbeitenden Systems. Je nachdem, in welchen Zustand sich die Verarbeitung befindet, müssen im weiteren Verlauf andere Handlungen ausgeführt werden.
Ein einfaches Beispiel soll das verdeutlichen:
Ein Benutzer möchte mit einem Online-Bildkonvertierer eine JPG-Datei zu PNG konvertieren. Die Website erfordert ein Login, sodass sich der User anfangs im Zustand „nicht angemeldet“ befindet. Er loggt sich ein, wodurch sich sein Zustand zu „angemeldet“ ändert.
Der Nutzer hat diesen Dienst schon vorher genutzt und einige Voreinstellungen zu den gewünschten Kompressionsparametern angepasst. Nun lädt er die Datei hoch, worauf der Konvertierer das Bild abhängig von den angegebenen Optionen umwandelt. Sowohl der Login-Status als auch die verschiedenen Parameter sind Beispiele für Zustände.
Zustandsbehaftete und zustandslose Protokolle
Das obige Beispiel zeigt einen zustandsbehafteten Ablauf. Bei solchen Systemen hängen die einzelnen Bearbeitungsschritte von vorherigen Vorgängen ab. Zustandsbehaftete Abläufe sind aber nicht gleichbedeutend mit zustandsbehafteten Protokollen. Das Web-Protokoll HTTP ist grundsätzlich stateless. Jedes Request-Response-Paar ist in sich abgeschlossen und kommt ohne zwischengespeicherte Informationen aus. Dennoch lassen sich Webanwendungen wie der beschriebene Online-Konvertierer aufbauen.
Bei zustandsorientierten Protokollen fasst der Server mehrere Anfragen zu einer Session zusammen. Dabei speichert er Informationen über vorherige Transaktionen - sogenannte Sitzungsdaten. Auf diese greift er im weiteren Verlauf der Sitzung zu, sodass sie nicht erneut übertragen werden müssen. Ebenso ist es möglich, Informationen über mehrere Sessions hinweg zu speichern.
Ein typisches Beispiel für zustandsorientierte Protokolle ist FTP (File Transfer Protokol). Verbindet sich ein Client mit einem FTP-Server, dann öffnet der Server eine Sitzung, die bis zum Ende der Kommunikation aktiv bleibt. Während der Session merkt sich der Server verschiedene Informationen - unter anderem die Übertragungsparameter und das aktuelle Verzeichnis auf dem Server.
Bei zustandslosen Protokollen hingegen speichert der Server keine Sitzungsdaten. Stateless bedeutet, dass jede Anfrage ein gänzlich neuer Prozess ist, der vollkommen unabhängig von früheren Vorgängen stattfindet. Jeder Request enthält alle notwendigen Daten, um die Anfrage bearbeiten zu können. Zustandsbehaftete Abläufe lassen sich auf einer höheren Ebene der Kommunikation implementieren, beispielsweise mit URL-Parametern, Cookies oder POST-Daten.
Zustandslosigkeit und Zustandsbehaftung im Vergleich
Zustandsorientierte Webdienste erfordern eine komplexere Server-Infrastruktur. Sie benötigen Speichersysteme und Datenbanken, um Sitzungsdaten für die Clients aufzubewahren. Ebenso verkompliziert sich die Programmierung.
Der Server muss bei jedem Request prüfen, ob die Anfrage im Kontext der aktuellen Sitzung gültig und sinnvoll ist. Darüber hinaus muss er regelmäßig unvollständige oder abgebrochene Sessions aufräumen. Stateful Services sind bei kleinen, einfachen Systemen sinnvoll, bei denen wenige dynamische Daten anfallen.
Zustandslose Systeme sind dementsprechend einfacher aufgebaut. Sie liefern eine hohe Skalierbarkeit durch eine bessere Lastenverteilung. Alle Anfragen sind in sich vollständig und unabhängig von allen vorherigen Vorgängen, sodass sie problemlos an andere Server delegiert werden können. Hinzu kommt eine höhere Fehlertoleranz. Nicht zusammenpassende Requests, unvollständige Sitzungsdaten oder Verbindungsabbrüche stellen kein Problem dar.
(ID:46955029)