Apache Mesos Programadores y Ejecutores por ejemplo
dc/os (3)
¡Grandes preguntas! Creo que sería muy útil echar un vistazo a un marco de muestra como Rendler . Esto probablemente responderá a la mayoría de sus preguntas y le dará una idea del marco interno.
Permítanme ahora intentar responder a la pregunta que podría estar abierta después de esto.
- Ubicación del programador
Los programadores no están activados en ningún nodo especial, pero tenga en cuenta que los programadores también pueden conmutar por error (como cualquier parte en un sistema distribuido).
- Funcionalidad del programador
Eche un vistazo a Rendler o en la guía de desarrollo del marco .
- Funcionalidad Ejecutor / Tarea
Creo que Rendler es un buen ejemplo para entender la relación Tarea / Ejecutor. Simplemente comienza a leer el archivo README / description en la página principal de github.
- Pinchar ejecutor
Los ejecutores se inician en cada nodo cuando la primera Tarea que requiere dicho ejecutor se envía a este nodo. Después de esto permanecerá en ese nodo.
Espero que esto haya ayudado!
Estoy tratando de entender cómo los diferentes componentes de Mesos trabajan juntos, y encontré este excelente tutorial que contiene la siguiente descripción arquitectónica:
Tengo algunas dudas sobre esto que no están claras (ni en el artículo ni en los documentos oficiales de Mesos ):
- ¿Dónde se ejecutan los programadores ? ¿Hay "nodos del programador" donde solo se deben ejecutar los programadores?
- Si estuviera escribiendo mi propio marco de trabajo de Mesos, ¿qué funcionalidad de Scheduler necesitaría implementar? ¿Es solo un binario sí / no o aceptar / rechazar para Ofertas enviadas por el Maestro? ¿Algún ejemplo concreto?
- Si estuviera escribiendo mi propio marco de trabajo de Mesos, ¿qué funcionalidad de Executor necesitaría implementar? ¿Algún ejemplo concreto?
- ¿Cuál es un ejemplo concreto de una tarea que se enviaría a un Ejecutor?
- ¿Están los Ejecutores "fijados" (instalados permanentemente en) los Esclavos, o flotan alrededor de una manera "a pedido", siendo instalados y ejecutados dinámicamente / sobre la marcha?
Para agregar a la excelente respuesta de js84,
- Ubicación del programador : a muchos usuarios les gusta iniciar los programadores a través de otro marco como Marathon para asegurarse de que si el programador o su nodo muere, se puede reiniciar en otro lugar.
- Funcionalidad del programador : después de registrarse en Mesos, su programador comenzará a recibir ofertas de recursos en la devolución de llamada de
resourceOffers()
, en la que su programador debe iniciar (al menos) una tarea en un subconjunto (o todos) de los recursos ofrecidos. Probablemente también querrá implementar la devolución de llamadastatusUpdate()
para manejar la finalización / falla de la tarea. Tenga en cuenta que es posible que ni siquiera necesite implementar su propio planificador si un marco existente como Marathon / Chronos / Aurora / Kubernetes podría ser suficiente. - Funcionalidad del ejecutor : por lo general, no es necesario crear un ejecutor personalizado si solo desea iniciar un proceso de Linux o un contenedor de la ventana acoplable y saber cuándo se completa. Puede usar el ejecutor de mesos predeterminado (especificando un
CommandInfo
directamente enTaskInfo
, en lugar de incrustado dentro de unExecutorInfo
). Si, sin embargo, desea crear un ejecutor personalizado, como mínimo necesita implementarlaunchTask()
, e idealmente tambiénkillTask()
. - Ejemplo de tarea : una tarea de ejemplo podría ser un simple comando de Linux como
sleep 1000
oecho "Hello World"
, o un contenedor docker (a través deContainerInfo
) comoimage : ''mysql''
. O, si usa un ejecutor personalizado, entonces el ejecutor define qué es una tarea y cómo ejecutarlo, por lo que una tarea podría ejecutarse como otro hilo en el proceso del ejecutor, o simplemente convertirse en un elemento de una cola en una sola ejecutor roscado. - Fijación del ejecutor: El ejecutor se distribuye a través de los URI de CommandInfo, como cualquier binario de tareas, por lo que no es necesario que estén preinstalados en los nodos. Mesos buscará y lo ejecutará por ti.
Programadores: son algunas estrategias para aceptar o rechazar la oferta. Los programadores podemos escribir los nuestros o podemos usar alguno existente como los chronos. En el programador debemos evaluar los recursos disponibles y luego aceptar o rechazar.
Funcionalidad del programador: el ejemplo podría ser como supongamos que digamos que u tiene una tarea que necesita 8 CPU para ejecutar, pero la oferta de mesos puede ser de 6 CPU que no responderá a la necesidad en este caso u puede rechazar.
Funcionalidad del ejecutor: El ejecutor maneja la información relacionada con el estado de su tarea. Conjunto de API que necesita implementar, como cuál es el estado de la tarea asignada en mesos slave. ¿Cuál es el número de CPU actualmente disponibles en mesos slave donde se ejecuta el ejecutor?
Ejemplo concreto para ejecutor: chronos.
se instala y ejecuta dinámicamente / sobre la marcha: estos no son posibles, es necesario configurar previamente los ejecutores. Sin embargo, puede replicar los ejecutores utilizando autoescalado.