What is a stateless application?
A stateless app is an application program that does not save client data generated in one session for use in the next session with that client. Each session is carried out as if it was the first time and responses are not dependent upon data from a previous session.
In contrast, a stateful application saves data about each client session and uses that data the next time the client makes a request. The term stateless also is used in connection with networking, particularly when applied to stateless firewalls.
When an application is stateless, the server does not store data or other information about the client session. Instead, the session data is stored on the client and passed to the server as needed. This is an important consideration when developing apps with offline first in mind.
With an online first approach to software development, session data is stored locally on the user's device when internet connectivity is unavailable. It is then uploaded and replicated in the cloud when a connection becomes available.
The importance of stateless technology
The distributed architecture that makes horizontal scalability possible in cloud computing has driven renewed interest in stateless apps and stateless app components. There are two reasons for this:
- When an app's components are stateless, they can easily be redeployed in the event of a failure and scaled out to accommodate workload changes.
- When apps are stateless, they can easily be connected to other apps through application programming interfaces, or APIs.
Functional programming, which is often used for microservices and containerization, has also driven interest in stateless apps. It's an approach to software development that uses small segments of immutable code. Each function executes its task as if it is for the first time and is aware of, but not dependent upon, other functions in the program. Because all the program's parts are stateless, programmers can assemble functions in multiple ways without worrying about dependencies breaking the program.
Stateful vs. stateless applications
Most applications in use today are considered stateful. However, the use of stateless applications is increasing. The popularity of cloud services, microservices and containers are driving this trend.
Without access to user data as is the case with stateless apps, there is greater dependence on clients to have the power to acquire the necessary state data and link it with stateless apps when needed. Cloud services have the computing resources needed to easily accommodate stateless apps.
Nevertheless, stateful apps remain popular. Several factors are behind their continued use:
- Users can return to them frequently because all relevant data about the user is contained in the app.
- They typically use the same server for processing user requests.
- If a session is interrupted, it can be easily returned to its previous status.
Another reason for the popularity of stateful services and apps is their ability to use of databases and servers to supplement user data storage. As a result, they interact quickly with users and make efficient use of computing power.
Stateless applications are typically compatible with User Data Protocol, Domain Name System and Hypertext Transfer Protocol. Stateful apps are compatible with fiber to the premises and Telnet protocols, among others.
Stateless apps and containers
Providers initially envisioned containers as supporting stateless applications. However, over time the trend has been for containers to support both stateless and stateful applications. This is important because microservices and cloud computing continue to grow in popularity.
Packaging all relevant components within a container makes it easy to move from one environment to another. This is where microservices and cloud services are appropriate platforms.
Pros and cons of stateless apps
There are advantages and drawbacks to using stateless applications:
- Improved reliability. It's easy to recover from failures and offer high availability capabilities because no state data is maintained.
- Ease of server flexibility and scalability. No session-related data is stored on a device, and the app can be moved to alternate servers.
- Reduced need for system resources. This is because systems do not need to track prior transactions and related session data.
- No communication among sessions. Communication isn't needed either before or after a session.
- Packet independence. Each stateless packet transits the network on its own and is independent of any other packets.
- More server processing cycles. Additional server processing cycles are needed to process requests because the data to process them is new and not previously processed.
- Reduced network performance. The number of requests needed in a session is often greater, thus requiring additional network bandwidth.
- Slower performance. Processing performance might be slower because no prior session data is available to support the new session.
Examples of stateless apps
Stateless applications are used in several ways:
- Performing an online search. Each query is treated as a unique activity. If the session request is broken, it must be restarted from scratch.
- Vending machines. Each transaction is unique and is not linked to prior or future transactions.
- This is a stateless service, in that information regarding the user's activity must be stored on the user's laptop or mobile device.
- Short Message Service (SMS). With SMS, a sender transmits a message to a specific user but receives no formal confirmation of message delivery. The sender may send follow-up messages, yet with no confirmation. This differs from email, where a return receipt confirmation message can be requested.
Learn more about state and the concept of change in modern application design.