Apache Mesos is a Docker orchestration datacenter-level project that aims to provide high-level, finely-grained, and collaborative locality-aware resource management to various computing frameworks.

For Mesos, a framework is really any system that supports running jobs, and knows how to talk to Mesos. It will have a scheduler component, and one or more executors.

How Orchestration Frameworks Work

Mesos operates as a cluster manager, with a master controller that communicates with agents residing on each node (e.g., host machine) and "framework schedulers". Nodes run with a Mesos agent on them, which in turn is responsible for managing the local resources, any "framework executors" running on the nodes and coordinating with the master. "Framework schedulers" are responsible for telling the Mesos master what jobs they have ready to run and what resources those jobs require; "framework executors" in turn are handed jobs that the cluster is ready to have run on the right nodes with the right access to resources.

The framework components are quite key. The schedulers are responsible for talking to the Mesos master, telling Mesos what resource requirements they have, and for accepting or rejecting the resources that are in turn offered to them.

Data Locality

Because Mesos offers resources to schedulers and allows those resource offers to be accepted or rejected by the frameworks themselves, Mesos has a kind of pass-through awareness: the schedulers know what resources their tasks are going to require, so can accept/reject resources based on that awareness.

For instance, let's say I'm running a Mesos cluster in my basement with some number of frameworks and nodes configured. I decide that it's time to generate acoustid information against all the media files I've transcoded from my CD collection, I might — in some framework specific way — submit a job to go do that. The framework would know that the job requires local access to my music collection, because I told it so, and would wait for resource offers from the Mesos master. Node A is offered, but because only B has access to my music the scheduler declines the offer. Meanwhile, whatever jobs were consuming all the resources on B finish, and B's executor informs the master, which then makes an offer of processing space and access to the music library on B to the scheduler. The scheduler finding node B agreeable accepts it, and the master dispatches the job details to B's executor.

The Mesos project itself has a great description of the process here, with a great image I'm going to take partially out of context:

apache-mesos-architecture

It may seem odd to say that "data locality is a key part of Mesos" when only the framework scheduler knows what resources its queued jobs require. But that's ok — in a neat way, this is also an example of data locality: the schedulers know what's needed, so Mesos defers to them on what resources they need — or don't need — for a given job.

What frameworks are there?

Good question!