Apache Mesos nació como un proyecto de investigación en la universidad Berkeley, California y está realizado en el lenguaje C++. Su primera presentación fue en 2009 con el nombre de Nexus. Pero no fue hasta el 2016 que Apache Mesos anunció su versión 1 en la cual se agregó la unificación de containers soportando Docker y APPC. La versión estable más reciente es la 1.3.0 lanzada en 2017.
Contenido
¿Qué es Apache Mesos?
Es un administrador de Cluster de código abierto basado en el kernel de Linux, a diferencia de que Mesos puede correr en cualquier plataforma ya sea Linux, Windows o OSX. Además proporciona aplicaciones con API’s para el manejo de recursos y planificación.
El mismo abstrae CPU, memoria, almacenamiento y otros recursos desde servidores dedicados o máquinas virtuales permitiendo sistemas elásticos de fácil construcción y que se puede correr de manera eficaz, destacando la tolerancia a fallos.
Mesos utiliza un sistema de dos niveles de planificación donde decide cuántos recursos asignar a cada Framework y el Framework decide qué recursos aceptar y qué tareas correr en esos recursos. Esto le permite acercarse a la optimización al compartir el cluster entre distintos Frameworks escalando hasta 50.000 nodos.
¿Para qué Sirve?
Mesos se utiliza para correr grandes aplicaciones especialmente aquellas que manejan grandes volúmenes de datos y se hace inviable correr en un único servidor. Mesos permite utilizar el cluster para correr los frameworks sobre los cuales se ejecuta la aplicación, distribuyendo la carga entre los distintos servidores y evitando así sobrecargas logrando un óptimo desempeño. Mesos se utiliza comúnmente para aplicaciones Java, Pythom, Scala y R.
Twitter, Apple, PayPal, Atlassian y muchas otras grandes compañías utilizan Mesos en sus datacenters.
Frameworks mas populares en Mesos
- Apache Spark: es una plataforma de programación distribuida que se focaliza en la velocidad , en Machine Learning ofrece tiempos de cálculos en memoria superiores a otros productos. Se suele usar en aplicaciones escritas en Java, Scala, R y Python.
- Cassandra: es una base de datos noSQL que permite el manejo de grandes volúmenes de datos centrándose en la escalabilidad lineal y la disponibilidad.
- Akka: es un framework para programación concurrente, distribuida y tolerante a fallos en la JVM, principalmente basado en Scala pero que también soporta Java.
- Apache Kafka: es un intermediario de mensajes que proporciona una plataforma unificada de alto rendimiento para la manipulación en tiempo real de fuentes de datos.
Características
- Escalabilidad Lineal: puedes escalar fácilmente de forma lineal hasta 10.000 nodos.
- Alta disponibilidad: réplica de master y agentes tolerante a fallos usando Zookeeper
- Containers: soporta nativamente el uso de containers con Docker y Appc.
- Conexiones Aisladas: utiliza Cgroups para el aislamiento de CPU, memoria, disco, puertos, GPU y módulos para el aislamiento de recursos personalizados.
- Dos niveles de Planificación: soporta ejecutar aplicaciones heredadas y nativas de la nube en el mismo clúster con políticas de programación conectables.
- API’s: provee aplicaciones HTTP para el desarrollo de nuevas aplicaciones distribuidas para operar el Cluster y monitoreo.
- Web UI: interfaz de usuario web incorporada para ver el estado del clúster y navegar por los contenedores
- MultiPlataforma: corre en Linux, OSX y Windows.
Arquitectura
La Arquitectura básica de Mesos consiste en tener 3 Masters uno en estado activo y dos en standby listos para usarse si el activo falla, tres Zookeepers (quorum) que permiten la tolerancia a fallos y tres Slaves donde corren los Frameworks.
Mesos se basa en un proceso Master que administra los procesos Slave, dichos slaves corren en cada nodo del cluster y los Frameworks corren tareas en los Slaves.
El Master se encarga de compartir recursos entre los Frameworks ofreciendo una lista de recursos disponibles entre múltiples Slaves. Decide cuántos recursos ofrecer a cada Framework dependiendo la disponibilidad y guiándose de políticas organizacionales.
Los Frameworks que corren en Apache Mesos constan de 2 componentes, un planificador que registra los recursos ofrecidos por el Master y un ejecutor lanzado en el nodo Slave para correr las tareas (tasks) del Framework. Como mencionamos anteriormente el Master determina que recursos ofrecer a cada Framework y el planificador del Framework decide qué recursos utilizar de los ofrecidos. Cuando el Framework acepta determinados recursos le envía a Mesos una descripción de las tareas que quiere correr en el.
Los Slaves proveen aislamiento para los ejecutores del Framework corriendo en un mismo Slave utilizando mecanismos de aislamiento ya existentes del sistema operativo.
Zookeeper es un sistema centralizado que guarda información de configuración, proporcionando sincronización distribuida y servicios grupales. En Mesos se utiliza para evitar fallos asignando un nuevo Master cuando el activo falla.
¿Cómo funciona el planificador?
En la imagen vemos como funciona el proceso de asignación de recursos y ejecución de tareas.
- El slave 1 reporta al Master que tiene ciertos recursos disponibles, en esta caso S1, 4 CPU, 4 GB RAM, luego el módulo de asignación indica que todos los recursos disponibles deben ser asignados al Framework 1.
- Los recursos son ofrecidos al Framework 1.
- El Framework 1 envía al Máster las tareas que quiere ejecutar en el Slave 1 utilizando para la tarea 1 s1, 2 CPU, 1 GB RAM y para la tarea 2 s1, 2 CPU, 2 GB RAM.
- En este paso final el Master envía las tareas al Slave el cual se encarga de asignar los recursos apropiados al ejecutor del Framework 1 para que ejecute ambas tareas.
Podemos ver que sigue teniendo 1 CPU y 1 GB RAM libre por lo que seguramente el Master ofrecerá estos recursos al Framework 2. El proceso de planificación se volverá a repetir cuando las tareas terminen de ejecutarse y tenga recursos libres.
¿Que pasa cuando el Master falla?
Una de las características principales de Apache Mesos es la tolerancia a fallos, ¿Pero como funciona esto?
Todos los Frameworks y Slaves depende del Master por lo cual es imprescindible que sea tolerante a fallas, para ello el Master está diseñado con un estado «blando» por lo cual su estado interno puede ser completamente reconstruido en base a información proveída por los Slaves y los Frameworks.
El único estado del Master son los Slaves activos, Frameworks activos y tareas corriendo. Esta información es suficiente para saber qué recursos está usando cada framework y correr las políticas de asignación.
Para lograr esto se corren múltiples Maestros en una configuración en espera activa utilizando Zookeeper como líder. Cuando el Master activo falla Zookeeper selecciona un nuevo Master como activo y los Slaves y planificadores se conectan a este nuevo Master clonando su estado.
También Apache Mesos reporta falla de nodos y ejecutores al planificador del Framework el cual puede reaccionar a estos errores utilizando políticas de su elección.
Para manejar fallas en los planificadores Mesos permite a los Frameworks registrar múltiples planificadores para que cuando uno falle otro es notificado para que tome el control.
Conclusión
En este post hemos visto los conceptos básicos de Apache Mesos, ahora ya sabemos a grandes rasgos para qué sirve, cómo trabaja y en qué situaciones debemos implementar una tecnología de este tipo.
En esta ocasión no hemos llegado a ver la instalación y uso básico del mismo, pero ya tenemos nuestras bases para poder comenzar a utilizarlo.
En nuestro próximo tutorial de Mesos veremos temas como la instalación y configuración básica.