Stateless and Stateful
Stateful and stateless servers differ in where the state lives between requests. That single choice changes what happens when a second server helps.
A stateful server remembers
The basket lives inside this one server. Each request adds an item, and the basket grows in the server memory.
server = {"basket": []}
def stateful_server(item):
server["basket"].append(item)
return server["basket"]
print("add milk -> basket:", stateful_server("milk"))
print("add bread -> basket:", stateful_server("bread"))Stateless servers share one store
Neither server keeps the basket. Both read the one basket held in the shared store, so both print the same line.
store = {"basket": ["milk", "bread"]}
def stateless_server(store):
return store["basket"]
print("server one reads:", stateless_server(store))
print("server two reads:", stateless_server(store))Two stateful servers can disagree
Each stateful server holds its own basket in its own memory. The same user gets a different basket from each server.
server_a = {"basket": ["milk", "bread"]}
server_b = {"basket": []}
print("server A basket:", server_a["basket"])
print("server B basket:", server_b["basket"])Example
store = {"basket": []}
def stateless_server(store, item):
store["basket"].append(item)
return store["basket"]
print("server one adds milk:", stateless_server(store, "milk"))
print("server two adds bread:", stateless_server(store, "bread"))
print("server one reads:", store["basket"])
print("server two reads:", store["basket"])Key points
- State: information kept between requests, such as the items in a basket.
- Stateful: a server that keeps state inside its own memory.
- Stateless: a server that keeps no state inside itself.
- Shared store: a place outside every server that all servers can read and write.
In this example, two stateless servers add items through one shared store. Both print the same final basket, because the basket lives in the store and not in either server.
Note
a stateless server reads the state from the shared store on each request.
Try it Yourself
Edit the code, then press Run.
Running is simulated
Exercise
A server reads the basket from a shared store on every request and keeps nothing itself. Which design is it?