Twelve-Factor App | Disposability

The ninth factor of the Twelve-Factor App methodology emphasizes disposability. 

Why Maximize Robustness with Fast Startup and Graceful Shutdown?

Disposability ensures that processes can be started or stopped at a moment's notice without negative impacts.

Benefits:
  • Resilience: Reduces downtime and allows for easy recovery from crashes.
  • Scalability: Facilitates dynamic scaling to adapt to changing loads.
  • Maintainability: Simplifies updates and maintenance tasks.

How to Achieve Fast Startup and Graceful Shutdown

Design for Quick Initialization

Processes should be designed to start quickly, minimizing the time to become ready to handle requests.

Example: Lazy Initialization in a Web Application

Initialize heavy resources on the first request rather than during startup.

Implement Graceful Shutdown

Processes should be able to stop gracefully, completing current tasks and releasing resources properly.

Example: Graceful Shutdown in a Node.js Application
 
process.on('SIGTERM', () => {
  server.close(() => {
    console.log('Process terminated');
  });
});
Utilize Health Checks

Health checks can be used to monitor process readiness and liveliness.

Example: Kubernetes Readiness Probe
readinessProbe:
  httpGet:
    path: /health
    port: 8080
  initialDelaySeconds: 5
  periodSeconds: 10

Deployment Strategies with Disposability

In an environment, disposability facilitates continuous deployment and robust operation.

Example:
  • Deployment Stage: Use orchestration tools that support graceful scaling and updates.
  • Monitoring Stage: Implement health checks to monitor process health and readiness.
  • Recovery Stage: Ensure quick recovery from failures through automated restarts.

Disposability, characterized by fast startup and graceful shutdown, is vital to modern, cloud-native applications.