Home

Awesome

Atlantis

Atlantis is an Open Source PaaS for HTTP applications built on Docker and written in Go. It makes it easy to build and deploy applications in a safe, repeatable fashion, and flexibly route requests to the appropriate containers.

We're using Atlantis heavily at Ooyala for new applications; while it still has some rough edges around getting it up and running, the experience of using it for deploying applications is fairly smooth.

For an introduction or more information on how to use Atlantis, see A User's Guide to Getting Started With Atlantis. For more technical details on the project, continue reading here.

This Repository

This repository is shared across all components; it contains shared datatypes and utility functions. It is included as a submodule in the other components to make these available without code duplication. (At the time we started Atlantis, Go package managers were generally fairly immature; it might make sense to switch to one of those, but for the moment, submodules work.)

Architecture

Atlantis consists of multiple components, each with their own repository:

[insert Cad's image here]

Each component is briefly discussed below, and detailed in more information in its project repository.

In addition, we depend on the following pre-existing services:

Aquarium

Since running all of these pieces in development can be a pain, we've developed aquarium, a script to make it easy to run Atlantis within a Vagrant instance. Following the directions in its Readme, you should be able to get a full Atlantis cluster up for development in minutes (though downloading the various images and dependences can take some time depending on your connection speed.)

Regions and zones

One of Ooyala's core engineering principles is avoiding a single point of failure by using multiple regions in EC2. Atlantis supports this model by running multiple independent clusters in different region. Each has its copy of every component except for the builder; the builder is only in one region, to ensure consistency, and the actual images are pushed to S3, so are available from all regions.

For finer-grained redundancy, Atlantis also supports availability zones. The manager knows what zones are available to it, and each supervisor is configured with its zone. When an application is deployed, it is deployed among all availability zones; this ensures that an issue limited to a single availability zone issue will not take out an application.

Routers should similarly be split among availability zones to ensure uptime.