Cargas de trabajo de trabajos por lotes
IBM Cloud® Code Engine es una plataforma totalmente gestionada y sin servidor que ejecuta las cargas de trabajo contenerizadas, incluidas las cargas de trabajo de aplicaciones o trabajos por lotes. Más información sobre la ejecución de trabajos por lotes en Code Engine.
¿Qué son las cargas de trabajo por lotes?
Un trabajo en Code Engine ejecuta una o más instancias de su código ejecutable. A diferencia de las aplicaciones, que gestionan peticiones HTTP, los trabajos están diseñados para ejecutarse una vez y salir, de forma que se liberan los recursos para ejecutar la carga de trabajo del trabajo.
Puede escalar trabajos por lotes definiendo varias instancias. Las cargas de trabajo se pueden dividir en tareas paralelas para reducir el tiempo de cálculo. Puede establecer el trabajo para que se ejecute con reintento automático para direccionar las cargas de trabajo anómalas dentro de una instancia de trabajo. Puede desencadenar trabajos por lotes manualmente, mediante programación y por sucesos, como por ejemplo sucesos de Object Storage.
Cuando creas un trabajo, puedes especificar la información de configuración de la carga de trabajo que se utiliza cada vez que se ejecuta el trabajo.
Las cargas de trabajo típicas de los trabajos por lotes incluyen:
- Formación de modelos de máquina
- Análisis de archivos, como el análisis de voz o el reconocimiento de imágenes
- Comprimir o descomprimir archivos
- Archivar la información
Cuando crea un trabajo, puede especificar la información de configuración de carga de trabajo que se utiliza cada vez que se ejecuta el trabajo.
¿Cuál es el ciclo de vida de un trabajo por lotes?
Cuando somete un trabajo por lotes, se ejecuta hasta el final. Normalmente, los trabajos por lotes recuperan datos de entrada, realizan trabajo de cálculo y almacenan los resultados en almacenes de datos persistentes. Cuando se completa el trabajo por lotes, los recursos que se utilizan para ejecutar el trabajo se eliminan y no se incurre en ningún coste para los recursos en espera.
¿Qué son las matrices de tareas y los estados de las matrices de tareas?
La especificación de la matriz del trabajo forma parte de la configuración del trabajo y de la ejecución del trabajo. Una matriz de trabajos tiene dos funciones:
- Determina el número de instancias concurrentes que se inician para la ejecución del trabajo.
- Permite que el código de usuario determine qué parte del trabajo debe realizar cada instancia en función del índice de matriz individual que se le proporcione.
Especifique una matriz de trabajos por tamaño de matriz o por un conjunto de índices de matriz:
-
Si especifica un tamaño de array con un valor n, el número de instancias que se inician para la ejecución del trabajo es n. A cada instancia se le proporciona un índice de matriz (0, 1, 2, etc., hasta n-1 ), utilizando la variable de entorno
JOB_INDEX. La variable de entornoJOB_ARRAY_SIZEse establece en n a menos que se especifique un valor concreto. -
Si especifica un conjunto de uno o más índices de matriz, el número de instancias que se inician es el número de índices. A cada instancia se le proporciona uno de los índices especificados mediante la variable de entorno
JOB_INDEX. La variable de entornoJOB_ARRAY_SIZEse establece en el número de índices especificados a menos que se especifique un valor concreto para ella.
La variable de entorno JOB_ARRAY_SIZE también está disponible para el código de usuario y, por defecto, se establece en el número de índices.
Si una instancia finaliza con un código de retorno correcto, el estado del índice de matriz asociado cambia a completado. En caso contrario, Code Engine inicia una nueva instancia para el mismo índice, si aún no se ha superado el número de reintentos configurado. Si una instancia falla, y no se permiten más reintentos, el índice del array asociado cambia su estado a fallido.
¿Cuáles son las características clave del trabajo por lotes de Code Engine ?
Revise los temas siguientes para obtener más información sobre cómo trabajar con trabajos por lotes en Code Engine.
- Aislamiento
- Registro
- Colocación en cola
- Retries
- Ejecución de trabajos por lotes
- Escalado
- Estado
- Enviar trabajos por lotes similares
- Desencadenamiento de trabajos por lotes con sucesos
Aislamiento
Code Engine es un servicio regional multiarrendatario en el que los arrendatarios comparten la misma infraestructura de cálculo y red. En particular, la red y la infraestructura de cálculo son recursos compartidos y algunos componentes de gestión son comunes a todos los arrendatarios. Sin embargo, los arrendatarios y sus cargas de trabajo se aíslan entre sí utilizando proyectos Code Engine. Code Engine impide la comunicación entre proyectos, proporcionando aislamiento a las aplicaciones dentro de un entorno de varios arrendatarios. Además, hay controles de acceso que se realizan en un nivel de recurso para permitir que sólo los usuarios autorizados realicen determinadas operaciones en recursos de proyecto, como aplicaciones u otras cargas de trabajo de Code Engine.
Para obtener más información sobre el aislamiento de carga de trabajo, consulte Aislamiento de carga de trabajo deCode Engine.
Registro
Cuando trabajas con trabajos ' Code Engine en la consola con el registro activado, los registros se reenvían a una instancia de servicio ' IBM Cloud Logs ' que está asociada a tu proyecto ' Code Engine '. En la instancia de servicio IBM Cloud Logs, los registros se indexan, lo que permite realizar búsquedas de texto completo en todos los mensajes generados y realizar cómodas consultas basadas en campos específicos. Consulte Obtención de registros para trabajos.
La información sobre eventos del sistema también puede ser útil para solucionar problemas al ejecutar trabajos. Se puede ver la información de sucesos del sistema con la CLI. Consulte Obtención de información de sucesos del sistema para trabajos.
Para obtener más información, consulte Visualización de registros.
Colocación en cola
Los trabajos por lotes enviados se ponen automáticamente en cola y están en estado pendiente hasta que se asignan. Los trabajos por lotes se ejecutan basándose en los recursos de cálculo disponibles definidos por el proyecto Code Engine. Los
trabajos por lotes que están en estado pending se pueden eliminar de la cola. Puede supervisar trabajos por lotes pendientes, en ejecución o completados utilizando la consola o la interfaz de línea de mandatos de Code Engine.
Reintentos
Cada instancia de trabajo se ejecuta hasta el final. Sin embargo, el código de carga de trabajo puede encontrar un error durante la ejecución del trabajo. Cuando una instancia de trabajo se completa con un código de retorno distinto de cero, Code Engine reinicia la instancia de trabajo. Con Code Engine, puede especificar que se limite el número de reintentos para evitar reiniciar las instancias de trabajo fallidas.
Ejecución de trabajos por lotes
Tanto si su código existe como fuente en un archivo local o en un repositorio de Git, como si su código es una imagen de contenedor que existe en un registro público o privado, Code Engine le proporciona una forma racionalizada de ejecutar su código como un trabajo.
Puede crear y ejecutar trabajos por lotes en Code Engine de las maneras siguientes:
- Ejecutar una imagen de contenedor existente. Cree un trabajo y proporcione una referencia a su imagen para utilizarla al enviar el trabajo. Para ver un ejemplo, consulte Crear y ejecutar un trabajo.
- Empiece con el código fuente. Si está empezando con el código fuente que se encuentra en un repositorio Git o en la estación de trabajo local, puede apuntar a la ubicación del origen y Code Engine se encarga de crear la imagen. Consulte Crear un trabajo a partir del código fuente del repositorio y Crear un trabajo a partir del código fuente local.
Para obtener más información, consulte Trabajar con trabajos.
Escalado
Un trabajo en Code Engine (trabajo por lotes) consta de una o más instancias de trabajo. Mientras que las instancias de trabajo se ejecutan independientemente entre sí, ejecutan el mismo código. Supongamos que tiene una base de datos con 100
registros para analizar. Puede ejecutar el trabajo de forma que cada instancia de trabajo analice 10 registros cada uno. Por ejemplo, la primera instancia de trabajo analiza los registros 0-9, la segunda instancia de trabajo puede analizar
los registros 10-19, etc. En este ejemplo, cada instancia de trabajo recibe el parámetro de entrada de trabajo proporcionado por el sistema JOB_INDEX como una variable de entorno que puede utilizar para calcular el rango de
registros de base de datos que debe analizar cada instancia de trabajo. El número de instancias de trabajo se especifica cuando se somete el trabajo por lotes.
Cuando ejecuta un trabajo por lotes, durante el tiempo de inicio, las instancias de trabajo pueden permanecer en un estado pendiente a medida que se inician las instancias. Los tiempos pendientes para las instancias de trabajo pueden variar debido al sistema y a la infraestructura de red, a medida que el sistema se ajusta para satisfacer las demandas de recursos relacionadas con esta ejecución del trabajo. Si la infraestructura del sistema está respondiendo a una gran demanda de uso, el resultado puede ser un retardo de varios minutos del inicio para los trabajos porque las instancias de trabajo se suministran justo a tiempo.
Estado
Un trabajo por lotes está en estado Succeeded cuando se completan todas las instancias de ejecución de trabajos.
Un trabajo por lotes está en estado Failed después de que una o varias instancias de ejecución de trabajo alcancen el límite de reintentos. Además, si un trabajo tarda demasiado en completarse, el estado del trabajo es Failed siempre que se alcance el tiempo máximo de ejecución. Para obtener más información, consulte estado de trabajo.
Envío de trabajos por lotes similares
Cuando crea un trabajo, puede especificar la información de configuración de carga de trabajo que se utiliza cada vez que se ejecuta el trabajo. Cuando utiliza un conjunto común de información de configuración para trabajos por lotes, con Code Engine, puede especificar parámetros adicionales con el envío del trabajo para sobrescribir los parámetros del trabajo por lotes para este envío de trabajo específico.
Desencadenamiento de trabajos por lotes con sucesos
Los trabajos por lotes se pueden enviar automáticamente basándose en sucesos, como temporizadores periódicos, sucesos de Object Storage o temas de Kafka.
Supongamos que desea desencadenar automáticamente el trabajo por lotes basándose en una suscripción a un grupo IBM Cloud Object Storage que genera sucesos siempre que un archivo cambia o se añade al grupo Object Storage. Revise el ejemplo
Code Engine cos-event-job para obtener información sobre cómo crear Object Storage sucesos y utilizar los sucesos para
desencadenar trabajos por lotes.
Para obtener más información sobre cómo utilizar los sucesos con trabajos Code Engine, consulte los temas siguientes: Trabajar con el generador de sucesos de temporizador periódico(cron), Trabajar con el productor de sucesos IBM Cloud Object Storage y Trabajar con el productor de sucesos Kafka.
¿Desea ver más ejemplos de código? Consulte los ejemplos de para IBM Cloud Code Engine GitHub.
¿Cómo puedo empezar con los trabajos por lotes?
Para crear y ejecutar una aplicación de trabajo por lotes Code Engine simple con la imagen de ejemplo icr.io/codeengine/firstjob, consulte Ejecución del primer Code Engine.
Además, puede probar una guía de aprendizaje de trabajos por lotes, consulte Ejecución y actualización de trabajos.
Para profundizar en el trabajo con trabajos por lotes, consulte Trabajar con trabajos y ejecuciones de trabajos.