6 - Processes

January 24, 2017 ยท View on GitHub

An application is made up of several processes.

Each process must be stateless and must not have local storage (sessions, ...).

This is required

  • for scalability
  • fault tolerance (crashes, ...)

The data that need to be persisted, must be saved in a stateful resources (Database, shared filesystem, ...)

Eg: sessions can easily be saved in a Redis kv store

Note: Sticky session violate 12 factor.

What does that mean for our application ?

In config/sessions.js, we need to modify the adapter to store session in a distributed Redis kv store (MongoDB is another possible option).

module.exports.session = {
  ...
  adapter: 'redis',
  host: process.env.REDIS_HOST || 'localhost',
  ...
};

Once done, the app needs to be rebuilt docker build -t message-app:v0.2 .

REDIS_HOST needs to be added to the docker-compose file as the new release will run against this kv store.

version: '3'
services:
  mongo:
    image: mongo:3.2
    volumes:
      - mongo-data:/data/db
    expose:
      - "27017"
  kv:
    image: redis:alpine
    volumes:
      - redis-data:/data
    expose:
      - "6379"
  app:
    image: message-app:v0.2 # New version taking into account REDIS_URL
    ports:
      - "8000:80"
    links:
      - mongo
    depends_on:
      - mongo
    environment:
      - MONGO_URL=mongodb://mongo/messageApp
      - REDIS_URL=redis
volumes:
  mongo-data:
  redis-data:

Previous - Next