# Apache Mesos

Apache Mesos es un kernel administrador de clúster de código abierto desarrollado en la Universidad de California, Berkeley. Mesos se ejecuta en cada nodo del clúster y provee aplicaciones (como Hadoop, Spark, Kafka entre otras) con API's para el manejo de recursos y planificación de tareas de todo el datacenter.
Ha sido adoptado por varias compañías de software grandes, incluyendo Twitter, Airbnb y Apple. Al menos 50 organizaciones actualmente usan Mesos.
El 27 de julio de 2016, Apache Mesos anunció la disponibilidad de Apache Mesos v1.0. La adición más notable al software fue la “unificación de contenedores” esto permitió la capacidad de soportar Docker, rkt e instancias appc.

## Historia

Mesos empezó como un proyecto de investigación en el Laboratorio UC Berkeley RAD en ese entonces por los estudiantes de doctorado Benjamin Hindman, Andy Konwinski, y Matei Zaharia, así como el profesor Ion Stoica. Los estudiantes empezaron a trabajar juntos en el proyecto cómo parte de un curso de Tópicos Avanzados en Sistemas de Computadores por David Culler. Fue originalmente nombrado Nexus, pero debido a un conflicto con el proyecto de otra universidad, fue rebautizado a Mesos.
La primera presentación de Mesos fue en 2009 (mientras todavía era llamado Nexus) por Andy Konwinski en HotCloud '09 en una charla que acompañaba el primer artículo científico publicado sobre el proyecto. Más tarde en 2011 es presentado en un estado más maduro en una charla por Matei Zaharia en el USENIX, conferencia Symposium on Networked Systems Design and Implementation sobre el artículo "Mesos: Una Plataforma para administrar recursos compartidos en el Centro de procesamiento de Datos" por Benjamin Hindman, Andy Konwinski, Matei Zaharia, Ali Ghodsi, Anthony D. Joseph, Randy Katz, Scott Shenker, Ión Stoica.
El 27 de julio de 2016, la Apache Software Foundation anunció la versión 1. Esta agregó la capacidad de suministrar centralmente instancias de Docker, rkt y appc.

## Características
### Escalado lineal

Mesos puede escalar linealmente fácilmente hasta 10,000 nodos.

### Alta disponibilidad

Es tolerante de fallos, ya que puede generar réplicas del nodo maestro. Además se integra fácilmente con Zookeeper.

### Contenedores

Provee soporte nativo para la ejecución de imágenes de contenedores Docker y AppC.

### Aislamiento

Mesos usa Linux Cgroups para proporcionar aislamiento de CPU, memoria, I/O y sistema de archivos.

### Dos niveles de planificación

Provee soporte para correr aplicaciones nativas de cloud, así como aplicaciones legadas en el mismo clúster con políticas de planificación.

### APIS

Provee API HTTP para que los desarrolladores puedan crear sus propias aplicaciones distribuidas, así para desarrollar aplicaciones de operación y monitoreo del clúster.

### WEB UI

Por defecto, ya viene con una interfaz gráfica web para poder visualizar el estado del clúster, aplicaciones que corrieron, logs, entre otros datos.

### Multiplataforma

Corre en Linux , OSX y Windows.

## Arquitectura

Mesos utiliza un mecanismo de dos niveles de planificación en donde se ofrecen recursos a frameworks (aplicaciones que corren arriba de Mesos). Cada nodo agente (esclavo) le informa al nodo maestro cuantos recursos disponibles tiene. El nodo maestro posee una lista de todos esos recursos disponibles y decide cuántos recursos puede ofrecer a cada framework, mientras que cada framework determina los recursos que acepta y qué aplicación ejecutar en estos recursos. Este método de asignación de recursos permite un acercamiento óptimo de la ubicación de datos cuándo se comparte un clúster de nodos entre frameworks diversos.
Dentro de un clúster se pueden identificar dos tipos de nodos de Mesos, maestros y agentes. Aquellos que son maestros, reciben solicitudes para ejecutar trabajos que provienen de algún framework y los mandan a ejecutar sobre nodos agentes, a su vez estos son encargados de reservar recursos para que las tareas de esos frameworks puedan ejecutar en los nodos agentes.
Nodos maestros, son pocos, pero se recomienda tener un mínimo de 3 de ellos, para continuar el servicio ante la caída de alguno y poder llamar a un votación de mayoría (mitad más uno de un quorum) para saber quién será el próximo nodo a ser el que estará como activo, para esto se utiliza ZooKeeper.
Los nodos agentes son aquellos, que por lo general se dispone de grandes cantidades, y sobre ellos se ejecutarán las tareas de los frameworks.

## Arquitectura típica

La estructura básica para tener un clúster consiste de tener los siguientes componentes:
* Tres Mesos máster, uno en activo y dos pasivos (Standby)
* Tres Zookeepers
* Tres agentes (Mesos Slaves)
Si bien en esta estructura se tienen tres nodos máster, la idea es que solo uno de ellos este activo mientras que los otros deberían estar en un estado pasivo. Los dos nodos pasivos se mantendrán en ese estado a la espera de que el nodo activo pueda fallar y así asumir el rol de nodo máster activo.

## Competencia

Mesos es a menudo comparado con Google Omega scheduler, una plataforma altamente secreta utilizada internamente para dirigir y distribuir los servicios de Google.

## Tecnología

Mesos usa los Cgroups de Linux para proveer aislamiento para CPU, memoria, I/O y el sistema de archivos. Mesos es la base para un numerosos sistemas distribuidos. Estos sistemas distribuidos son llamados frameworks.

### Apache Aurora

Apache Aurora es un framework de Mesos para servicios de corrida prolongada y trabajos cron, originalmente desarrollado por Twitter a comienzos del 2010 y de código abierto a fines del 2013. Puede escalar a decenas de miles de servidores, y contiene muchas similitudes con Borg scheduler de Google incluyendo su ADSL rico para configurar servicios.

### Chronos

Chronos es un sistema distribuido cron-like, es elástico y también puede expresar dependencias entre trabajos. Puede escalar a miles de servidores físicos y es, lo más parecido a Mesos framework, completamente elástico y a prueba de fallos.

### Marathon

Marathon es un popular PaaS o sistema de orquestación de contenedores que escala a miles de servidores físicos. Esta completamente basado en REST y permite despliegues del estilo canary y topologías de despliegue. Está escrito en Scala y es altamente disponible, elástico, y distribuido.

## Funcionamiento de los agentes

Como se explica en las secciones anteriores, las tareas que se lanzan en los agentes estas aisladas. Este aislamiento por defecto se hace utilizando los Cgroups de Linux. También Docker hace esto de forma nativa, cuando la tarea llega al agente, este crea un nuevo Cgroup y se lo asigna a la tarea.
Cuando se ejecuta una tarea, esta efectúa almacenamiento de datos, cachés y de más información necesaria para que el servicio corra. Debido a esto, si un agente fallara podría ocasionar problemas en sus tareas. Para mitigar esos problemas Mesos ofrece una serie de herramientas:
Checkpoints
Los agentes realizan checkpoints sobre el estado de la tarea. Estos checkpoints funcionan como copias de seguridad del estado, para que en el caso de que tengamos que reiniciar el agente, la recuperación sea más rápida.
Cache executor
En el caso de que el servicio de mesos-slave no este disponible, las nuevas tareas y peticiones serán guardadas en memoria caché. Cuando el servicio este recuperado se empezaran a procesar las peticiones que fueron guardadas.
Conexión
Una tarea que ya se ejecutó anteriormente tendrá más posibilidades de volverse a ejecutar en el mismo Cgroup y el mismo agente que lo hizo la última vez, de esta manera la información se puede recuperar.
Fallo del agente
En el caso de fallo completo de un agente, el framework solicitará volver a montar la tarea en un nuevo agente.

## Usuarios prominentes

EL sitio de redes sociales Twitter empezó utilizar Mesos y apache Aurora en 2010, después de que (entonces estudiante de doctorado) Benjamin Hindman dio una presentación a un grupo de ingenieros de Twitter.
Airbnb dijo en julio del año 2013 que usa Mesos para correr numerosos sistemas de procesamiento de datos como apache Hadoop y Apache Spark.
El sitio web de subasta eBay declaró en abril de 2014 que usa Mesos para correr integración continua en un ambiente de desarrollo. Logran este cometido utilizando un plugin de Mesos customizado que permite a los desarrolladores lanzar su propias y privadas instancias de Jenkins.
En abril de 2015, fue anunciado que el servicio Siri de Apple está utilizando su propio framework Mesos llamado Jarvis.
En agosto de 2015, fue anunciado que Verizon ha seleccionado Mesosphere's DCOS, el cual está basado en un Apache Mesos de código abierto Mesos, cómo su orquestador de centro de datos para su plataforma a nivel nacional.
En noviembre de 2015, Yelp anunció que habían estado utilizando Mesos/Marathon por un año y un medio para servicios de producción.

## Soporte comercial

Mesosphere vende el Centro de Datos Sistema operativo, un sistema operativo distribuido, basado en apache Mesos. En septiembre de 2015, Microsoft anunció una sociedad comercial con Mesosphere para construir un planificador de contenedores y servicios de orquestación para Microsoft Azure.