Skip to content

Latest commit

 

History

History
101 lines (75 loc) · 2.72 KB

File metadata and controls

101 lines (75 loc) · 2.72 KB
title:Deis Architecture
description:Architecture of the Deis application platform (PaaS)
keywords:deis, paas, application platform, architecture

Architecture

Deis consists of 8 modules that combine to create a distributed PaaS. Each Deis module is deployed as one or more Docker containers.

Controller

The controller module is the "brains" of the Deis platform, in charge of:

  • Processing client API calls
  • Managing nodes that host containers and provide services
  • Managing containers that perform work
  • Managing proxies that route traffic to containers
  • Managing users, providers, flavors, keys and other base configuration

The controller module includes:

  • Django for processing API calls
  • Celery for managing task queues

Database

The database module uses PostgreSQL to store durable platform state.

Cache

The cache module uses Redis to:

  • Store work queue data for Celery
  • Cache sessions and synchronize locks for Django
  • Store recent log data for the :ref:`Controller`

Builder

The builder module uses a Git server to process :ref:`Application` builds. The builder:

  1. Receives incoming git push requests over SSH
  2. Authenticates the user via SSH key fingerprint
  3. Authorizes the user's access to write to the Git repository
  4. Builds a new Docker image from the updated git repository
  5. Adds the latest :ref:`Config` to the resulting Docker image
  6. Pushes the new Docker image to the platform's :ref:`Registry`
  7. Creates a new :ref:`Release` on the :ref:`Controller`

Once a new :ref:`Release` is generated, a new set of containers is deployed across the platform automatically.

Registry

The registry module hosts Docker images on behalf of the platform. Image data is typically stored on a storage service like Amazon S3 or OpenStack Storage.

Log Server

The log server module uses rsyslog to aggregate log data from across the platform. This data can then be queried by the :ref:`Controller`.

Runtime

The runtime module uses Docker to run containers for deployed applications.

Proxy

The proxy module uses Nginx to route traffic to application containers.