Designing for monitoring and robust deploying system components with a state of their own is more complex than stateless. We prefer to build our system components as stateless as possible since it is one of the best practices in the cloud-native era, but some systems inevitably have a state. Without consideration, your application hides its state and becomes a black box, which wouldn't be observable. Besides, it would be impossible to implement robust deployment without downtime since we need to verify whether we can release changes by checking the state of running applications.
In this talk, I'm going to discuss some tips to design better stateful systems for observability and robust deployment gained by the project where we've built a business-critical WebSocket server to establish a secure long-living tunnel connection, including:
- Application design to provide insight into the internal state
- Blue-green deployment, including business logic
- Better architecture around stateful applications
- Filterable logging
Attendees will gain reusable tips and reference examples when building a stateful system.
https://www.usenix.org/conference/srecon22apac/presentation/higashiguchi