Saltar al contenido
TURNKEYGNU / LINUX
AplicacionesDocumentaciónBlogCapturas de pantallaGitHubTurnKey Hub
文Español
EnglishEspañol中文日本語PortuguêsDeutsch
Home/Sinopsis de diseño

Documentación

Sinopsis de diseño

Antecedentes

Muchas tareas de lote pueden ser fácilmente descompuestas en unidades de trabajo que se pueden ejecutar en paralelo. En servicios de nube como Amazon EC2, ejecutar un solo servidor durante 100 horas cuesta lo mismo que ejecutar 100 servidores durante 1 hora. En otras palabras, para problemas que pueden ser paralelos esto hace que sea ventajoso distribuir el lote en tantos servidores de nube como sea necesario para terminar la ejecución del trabajo en - Sólo menos de una hora. Aprovechar plenamente estos aspectos económicos de forma fácil de utilizar, sistema automático para lanzar y destruir instancias de servidor fiables sobre demanda y distribución de trabajo entre ellas requerido.

Términos y definiciones

  • Job: un comando de shell representando una unidad atómica de trabajo
  • Tareas: una secuencia de trabajos
  • Plantilla de tareas: una tarea preconfigurada
  • Período de sesiones: el estado de una tarea que se ejecuta en un momento particular, que incluye la configuración de tareas, el estado de los trabajos que han terminado de ejecutar, y una lista de trabajos que aún están pendientes de ejecución.
  • Separación: el número de trabajadores que se dividen en los trabajos de tarea.
  • Trabajador: un servidor que ejecuta SSH en el que ejecutamos trabajos. Esto puede ser un servidor persistente o una instancia de servidor de nube EC2 asignada dinámicamente.
  • TurnKey Hub: a web service que Cloudtask puede usar para lanzar y destruir servidores TurnKey preconfigurados para realizar una tarea determinada.

Características

  • Los trabajos son simples comandos de shell ejecutados remotamente: no hay API especial. Los comandos de Shell son bien entendidos, agnóstico de lenguaje y fácil de probar y desarrollar.

  • Configuración de tareas de ad-hoc mediante opciones de línea de comandos / medio ambiente: Cloudtask se puede utilizar directamente desde la línea de comandos, que es útil para tareas de un solo paso, o para experimentar/debugar una nueva tarea rutinaria.

  • Plantillas de tareas preconfiguradas: los parámetros de configuración para tareas rutinarias pueden integrarse dentro de una plantilla de tarea preconfigurada, que es en sí misma ejecutable como cloudtask, y hereda su interfaz.

    Bajo la capucha se implementa una plantilla de tarea definiendo una clase Python que hereda la tarea:

#!/usr/bin/python
from cloudtask import Task

class HelloWorld(Task):
    DESCRIPTION = "This is a hello world cloudtask template"
    COMMAND = 'echo hello world'
    SPLIT = 2
    REPORT = 'mail: cloudtask@example.com liraz@example.com'

HelloWorld.main()
  • Ejecución transparente con registro en tiempo real: cloudtask proporciona registro en tiempo real para que sea fácil para el usuario seguir el progreso de una tarea. Por ejemplo, el progreso de cualquier comando ejecutado sobre SSH puede ser seguido por la cola del registro de sesión del trabajador:

cd ~/.cloudtask/$session_id/workers/
tail -f 1234
  • Tolerancia por defecto: CloudTask está diseñado para sobrevivir de forma fiable múltiples tipos de falla. Por ejemplo:

    • Los servidores de trabajadores son monitorizados continuamente por falla para que un trabajo que ejecuta en un servidor fallido pueda ser redirigido a un servidor de trabajo. Una tarea continuará ejecutando mientras un trabajador solo sobreviva.
    • el usuario puede especificar un tiempo de trabajo por trabajo para que los trabajos que se congelen por cualquier razón se despierten con gracia sin atascar al trabajador indefinidamente.
    • En caso de Hub API falla nubes esperará unos segundos e intentará de nuevo.
  • Abortar y reanudar la capacidad: una tarea puede ser abortada en cualquier momento pulsando Ctrl-C, o enviando la señal TERM al proceso principal. Después de que todas las instancias de servidor lanzadas automáticamente se destruyen, el estado de la sesión se guarda para que pueda reanudarse más adelante desde donde se dejó.

  • Gancho de presentación: cuando la ejecución de una sesión termine un gancho de presentación de informes puede configurarse para realizar una acción arbitraria (por ejemplo, enviar un correo electrónico de notificación, actualizar una base de datos, etc.). Actualmente se presta apoyo a tres tipos de encargados de la presentación de informes:

    1. correo: enviar un correo electrónico con el registro de sesión a uno o más destinatarios.
    2. sh: ejecutar un comando shell. El directorio de trabajo actual se establece en el camino de sesión y el ambiente se pobla con el contexto de sesión.
    3. Py: ejecutar un fragmento arbitrario de código Python. La configuración de sesión y tarea son accesibles como variables locales.

Cómo funciona

Cuando el usuario ejecuta una tarea, se realizan los siguientes pasos:

  1. Se crea una clave temporal de sesión SSH.

    La autenticación inicial para los trabajadores supone que ha creado un agente SSH o equivalente (cloudtask no admite la autenticación de contraseña).

    La clave de sesión temporal se añadirá a las llaves autorizadas del trabajador durante el período de la tarea, y luego se eliminará. Necesitamos autorizar una clave temporal para asegurar el acceso a los trabajadores sin depender del agente SSH.

  2. Los trabajadores están asignados.

    Los servidores de nube de trabajo se lanzan automáticamente por cloudtask para satisfacer la división solicitada a menos que se proporcionen suficientes trabajadores pre-alocados a través de la opción --workers.

    Se puede proporcionar un id de respaldo TKLBAM para instalar las dependencias de ejecución de trabajo necesarias (por ejemplo, scripts, paquetes, etc.) en la parte superior de TurnKey Core.

  3. Configuración de trabajadores.

    Después de que se asignan los trabajadores, se establecen. La clave de sesión temporal se añade a las teclas autorizadas, la superposición se aplica al sistema de ficheros raíz (si el usuario ha configurado un overlay) y el comando pre se ejecuta (si el usuario ha configurado un comando pre).

  4. Ejecución de empleo.

    CloudTask proporciona una lista de todos los trabajos que componen la tarea en una cola de trabajo. Cada trabajador remoto tiene un proceso de control local que lee un comando de trabajo de la cola y lo ejecuta sobre SSH en el trabajador.

    El trabajo puede ser un tiempo fuera antes de que haya completado si se ha configurado un --timeout.

    Mientras el trabajo está ejecutando, el proceso de supervisión revisará periódicamente que el trabajador sigue vivo cada 30 segundos si el trabajo no genera ninguna salida de consola. Si un trabajador ya no es accesible, es destruido y el trabajo abortado es puesto de nuevo en la cola de trabajo para la ejecución por otro trabajador.

  5. Limpieza del trabajo

    Cuando no hay órdenes de trabajo que quedan en la cola de entrada para proporcionar a un trabajador que se limpia ejecutando el comando post, eliminando la clave de sesión temporal de la autorizada llaves.

    Si Cloudtask lanzó al trabajador, también lo destruirá en este punto para detener las tasas de uso incremental.

  6. Presentación de informes en el período de sesiones

    Se puede configurar un gancho de presentación de informes que realice una acción una vez que la sesión haya terminado de ejecutar. Se admiten 3 tipos de ganchos de presentación de informes:

    1. correo: utiliza /usr/sbin/sendmail para enviar un correo electrónico sencillo sin encriptar que contiene el registro de sesión en el cuerpo.

    2. sh: ejecuta un comando shell, con la configuración de tarea incrustada en el medio ambiente y el directorio de trabajo actual establecido en el camino de sesión. Puede probar el contexto de ejecución como este:

      --report='sh: env && pwd'
    3. py: ejecuta un fragmento de código Python con los valores de sesión establecidos como variables locales. Puede probar el contexto de ejecución como este:

      --report='py: import pprint; pprint.pprint(locals())'
TURNKEYGNU / LINUX

Controla tu infraestructura sin empezar desde cero.

Explorar TurnKey
Acerca deDocumentaciónPreguntas frecuentesBlogGitHub
Libre y de código abiertoSeguro de forma predeterminadaListo para desplegar