Analizaremos los componentes de Apache Mesos y como interactuan entre ellos
Introducción
En los artículos anteriores, hemos introducido la arquitectura SMACK y a nuestro “director de orquesta”, Apache Mesos. También hemos compilado los fuentes del mismo, y el siguiente paso teniendo disponible el binario nos faltaría conocer los componentes principales Apache Mesos y como interactúan entre ellos.
Scheduling de dos niveles
Apache Mesos tiene un mecanismo de scheduling de dos niveles para asignar recursos y ejecutar tareas de diferentes frameworks.
Primer Nivel
En el primer nivel, el proceso master que gestiona los procesos agentes que se ejecutan en cada nodo del clúster de Apache Mesos determina los recursos libres disponibles en cada nodo, los agrupa y los ofrece a diferentes frameworks basándose en políticas organizacionales, como la prioridad o el intercambio equitativo. Las organizaciones también tienen la capacidad de definir sus propias políticas de intercambio a través de un módulo de asignación personalizado (Allocation Module).
Segundo Nivel
En el segundo nivel, cada scheduler del planificador es registrado como cliente con el maestro, acepta o rechaza la oferta de recursos según los requisitos del framework. Si se acepta la oferta, el scheduler del framework envía información sobre las tareas que se deben ejecutar y la cantidad de recursos que cada tarea requiere para Mesos Master. El master transfiere las tareas a los agentes correspondientes, que asignan los recursos necesarios al componente executor del framework, que gestiona la ejecución de todas las tareas requeridas en contenedores. Cuando se completan las tareas, los contenedores se eliminan y los recursos se liberan para ser utilizados por otras tareas.
Algo más de detalle….
Maestros
Los maestros de Apache Mesos son responsables de asignar recursos a diferentes frameworks y administrar el ciclo de vida de las tarea para ellos. Para esta labor, implementa un uso compartido de recursos detallado utilizando ofertas de recursos disponibles a cada framework.
La oferta de recursos representa una unidad de asignación en el mundo de Mesos. Es un vector de recurso disponible en un nodo. Una oferta representa algunos recursos disponibles en un agente que se ofrece a un framework particular. Cada oferta de recursos contiene una lista de <agent ID, resource1: amount1, resource2: amount2, ...>
Es importante recalcar que como se ha cambiado la palabra slave por agente, los frameworks basados en drivers aún recibirán ofertas con ID de slave, mientras que los frameworks que utilizan el nuevo API v1 HTTP reciben ofertas con ID de agente que contengan los recursos.
El maestro decide cuántos recursos ofrecer a cada framework de acuerdo con una política de la organización determinada, como el intercambio justo o la prioridad estricta. Para admitir un conjunto diverso de políticas, el maestro emplea una arquitectura modular que hace que sea fácil agregar nuevos módulos de asignación a través de un mecanismo de complementos.
Alta disponibilidad
La alta disponibilidad de los maestros la conseguimos utilizando zookeeper. En el artículo referido a la configuración de los maestros, veremos tambien su uso con zookeeper.
Agentes
Los agentes de Apache Mesos son responsables de ejecutar las tareas desde los frameworks utilizando los recursos que tienen. El agente debe proporcionar aislamiento adecuado mientras ejecuta múltiples tareas. El mecanismo de aislamiento también debe asegurarse de que las tareas obtengan los recursos que se les han prometido, y no más o menos.
Los recursos en agentes administrados por Apache Mesos se pueden describir utilizando recursos de agente y atributos de agente esclavos. Los recursos son elementos de agentes que pueden ser consumidos por una tarea, mientras que utilizamos atributos para etiquetar agentes con cierta información.
Los recursos de agente son gestionados por el maestro Apache Mesos y se asignan a diferentes frameworks . Los atributos identifican elementos del nodo, como el agente que tiene un SO específico o una versión de software, es parte de una red en particular, o tiene un hardware particular, y así sucesivamente.
Los atributos son simples pares clave-valor de cadenas que se transmiten junto con las ofertas a los frameworks. Dado que los atributos no pueden ser consumidos mediante una tarea en ejecución, siempre se ofrecerán para ese agente.
Apache Mesos no entiende de atributos de agente y en este caso esta interpretación de los atributos se deja a los frameworks. En siguientes artículos veremos en detalle los recursos y atributos.
Frameworks
Un framework de Apache Mesos es la interfaz entre Apache Mesos y la aplicación. El framework es una capa donde la tarea está programada y ejecutada. Como la implementación del framework es específica de la aplicación, los términos framework y aplicación se usan indistintamente.
Al principio, un framework de Apache Mesos solo podía interactuar con la API de Mesos utilizando la biblioteca de C++ libmesos, por lo que los enlaces para otros lenguajes como Java, Scala, Python y Go se desarrollaron para usar los libmesos. Actualmente, se dispone de un API para que el lenguaje a utilizar no sea una limitación.
Un framework se compone de dos partes: Scheduler y ejecutor.
- Scheduler: Es el responsable de tomar decisiones sobre las ofertas de recursos realizadas y hacer un seguimiento del estado actual del clúster.
- Ejecutor : Es el responsable de la ejecución de la tarea del nodo agente. Puede elegir ejecutar múltiples tareas, generando múltiples hilos, en un ejecutor, o puede ejecutar una tarea en cada ejecutor.
Además de las funciones relacionadas con el ciclo de vida y la gestión de tareas, la API Apache Mesos framework también proporciona funciones para comunicarse con los schedulers y ejecutores de framework. Esta parte tambien la veremos en articulos posteriores.
Realizado el análisis de la arquitectura de Mesos, vamos a ver en siguientes capítulos como poner en marcha el master, los agentes y frameworks.