Maelstrom is a HTTP reverse proxy and request router that also includes support for starting
and stopping containers in response to request activity.
- Ability to cluster one or more (virtual) machines together to form a single compute cluster
- Automatically starts and stops containers in response to request activity
- Automatically scales containers up and down based on request concurrency
- Ability to declaratively define a project via YAML and push that definition to the cluster
- Ability to easily make requests between components - even if the target component is not yet running
- Event Sources (this will grow over time):
- HTTP - reverse proxy requests from the internet based on hostname
- cron - define cron schedule rules that map to HTTP routes on the target service
- Amazon SQS - maelstromd will poll SQS queues then push messages to components via HTTP POST
Design and dependencies
Maelstrom is designed to have a very small operational footprint. Each node runs a single process
(maelstromd) and bootstraps cluster state from a shared database. Nodes are peers (i.e. there are no
manager / worker distinctions) and nodes compete to acquire locks to perform various activities such
as auto-scaling and cron support.
Each node in the cluster must be running Docker and must have access to a MySQL or Postgres database.
Maelstrom consists of two binaries:
- maelstromd - main daemon process. Each node in a maelstrom cluster runs this program
- maelctl - control program used to push project definitions to the cluster and view cluster state
Maelstrom is licensed under the AGPL v3
Source Code and Issue Tracking
Source code is hosted at GitHub
Ways to help
There are lots of ways to get involved.
- Test release candidate builds
- Write a new event source
- Fix a bug or add notes to an existing bug to help us narrow it down
- Design a better looking website
- Write styles for the gitbook documentation
- Write a blog post tutorial discussing how you use maelstrom