System orchestration with Lattice¶
Lattice is software for System Orchestration.
The goal of Lattice is to enable developers to define, run, and manage complex distributed microservice-based applications in a way that is simple and completely software-defined.
System Orchestration is different than Container Orchestration. With Container Orchestration frameworks, the unit of deployment is a single service run inside of a container. Developers who use such frameworks are still left stitch together thier services into a functioning unit.
With Lattice the System, a collection of Services that are meant to be operate collectively, is the unit of deployment. Lattice allows you to define and manage entire systems comprised of microservices, databases, and other resources, as a collective unit.
Lattice abstracts away much of the low-level infrastructure and orchestation needed to manage and deploy complex distributed applications including:
- Provisioning and management of Virtual Machines
- Building containers and managing container images
- Container scheduling
- Service discovery, service health checking, and load balancing
- Zero-downtime deploys and updates
- Auto-scaling and healing
Core concepts: Lattices, Systems, Services, and Deploys¶
A Lattice is a runtime environment within which Systems can be deployed and managed. A Lattice consists of:
- A VPC that defines the network boundry of the Lattice
- A virtual machine (or set of virtual machines) to run the Lattice Control Plane
- An optional shared pool of virtual machines for running Systems (Systems can also define their own dedicated resources)
- An optional shared namespace for sharing container images
Lattices are created like so:
$ lattice lattices:create mylattice --provider AWS --region US-East1
This command will provision an new VPC for the Lattice, and provision and start the Lattice Control Plane. Once created, this Lattice will be ready to house user Systems.
Systems and Services¶
A System collection of Services meant to be deployed and operate as a unit.
A Service is an application process such as a REST API, or a web server, database, or anything that can be packaged and run as a Docker container.
Systems are defined declaratively via JSON in System definition files. These System definitions are version-controlled in Github and deployed to Lattice via the commandline or API.
Once a System definition exists in Github, Systems can be created like so:
$ lattice systems:create mysystem --lattice mylattice --definition <url-of-github-repo-with-system-definition>
Once created, Systems can be deployed. Since System definitions are version-controlled, deploys specify which version of the System to deploy.
$ lattice systems:deploy --lattice mylattice --system petflix --version v1.0.0
During the deploy, Lattice will:
- Obtain the System definition at the version specified from Github.
- Crawl the System definition, and build Docker containers for all services defined.
- Provision any virtual machines necessary to run the services that comprise the System.
- Provision and configure a network mesh for managing all System network traffic.
- Provision any load balancers needed for public endpoints.
- Schedule and start all of the services.
Upon subsequent deploys, Lattice will diff the running System with the new System definition and execute a rolling deploy of only those services that need updating, with no interruption to the running System.
Lattice can be used two ways:
- As software. Lattice is an open-source project licences under the XYZ (Apache 2?) license.
- As a service at https://alpha.lattice.mlab.com.
Currently supported cloud providers: * AWS * *
Lattice does not run as an on-prem solution.