Despliegue de cargas de trabajo por lotes nativas en la nube con el servicio por lotes de Oracle Cloud Infrastructure

Introducción

Las aplicaciones modernas dependen en gran medida del procesamiento en segundo plano para gestionar tareas como la transformación de datos, la generación de informes, el procesamiento de medios y las simulaciones a gran escala. Estas cargas de trabajo suelen utilizar muchos recursos informáticos, se ejecutan de forma asíncrona y pueden variar considerablemente en cuanto a escala y frecuencia. La gestión de estas cargas de trabajo mediante enfoques tradicionales puede ser compleja, ya que requiere que los equipos aprovisionen infraestructura, creen sistemas de programación y gestionen la ampliación manualmente.

El servicio por lotes de Oracle Cloud Infrastructure (OCI) está diseñado para simplificar este proceso. Proporciona una forma totalmente gestionada de ejecutar cargas de trabajo por lotes a escala, lo que le permite centrarse en definir sus trabajos mientras la plataforma gestiona la ejecución y la gestión de recursos.

En este tutorial, exploraremos cómo funciona OCI Batch, su arquitectura y cómo se puede utilizar de forma eficaz en escenarios reales.

¿Qué problema resuelve OCI Batch?

La ejecución de cargas de trabajo por lotes implica tradicionalmente varias capas de complejidad. A menudo, los equipos necesitan aprovisionar recursos informáticos con antelación, implantar sus propios mecanismos de programación de trabajos y crear lógica para gestionar reintentos, fallos y ampliaciones. Incluso cuando se utilizan plataformas como Kubernetes, se requiere un esfuerzo significativo para configurar y mantener el entorno. Esto aumenta la sobrecarga operativa y ralentiza el desarrollo.

OCI Batch aborda estos desafíos al proporcionar un servicio unificado que gestiona el ciclo de vida de las cargas de trabajo por lotes. Elimina la necesidad de crear programadores personalizados o gestionar la infraestructura, lo que permite a los equipos ejecutar trabajos a gran escala de forma más eficiente y con menos esfuerzo operativo.

Visión general del servicio por lotes de OCI

OCI Batch actúa como un servicio centralizado para gestionar y ejecutar cargas de trabajo por lotes. Cuando se envía un trabajo, se coloca en una cola y se procesa en función de las decisiones de programación y la disponibilidad de los recursos. El servicio evalúa los requisitos del trabajo y aprovisiona la capacidad informática de forma dinámica para ejecutar tareas. Cada tarea se ejecuta en un entorno en contenedores, lo que garantiza la consistencia y el aislamiento. Una vez finalizada la ejecución, se almacenan las salidas y se generan logs para la supervisión y la resolución de problemas.

Este enfoque proporciona un flujo de trabajo optimizado donde el envío de trabajos, la programación, la ejecución y la observabilidad se manejan dentro de un único servicio gestionado.

Análisis en profundidad de la arquitectura

La arquitectura de OCI Batch sigue un flujo claro desde la ejecución del trabajo hasta la ejecución y salida, como se muestra en el diagrama.

Archivo por lotes de OCI

El proceso comienza cuando un usuario envía un trabajo mediante la consola, la CLI o la API de OCI. Esta solicitud está asociada a Batch Context, que actúa como capa de configuración básica. El contexto define valores clave como redes, conjuntos de recursos informáticos y registro, lo que garantiza que todos los trabajos se ejecuten en un entorno coherente.

A continuación, los trabajos se organizan en Job Pools, que proporciona agrupación lógica y ayuda a controlar el comportamiento de programación. Esto resulta especialmente útil cuando se gestionan cargas de trabajo en diferentes equipos o entornos, ya que permite la priorización y el aislamiento. Cada trabajo enviado representa una unidad de trabajo completa y puede incluir una o más tareas. Las tareas son las unidades ejecutables más pequeñas y se ejecutan mediante un entorno de tareas definido. Esto permite que los trabajos se dividan en partes más pequeñas que se pueden ejecutar de forma independiente o secuencial, según las dependencias definidas.

Una vez enviados, los trabajos se colocan en Queue, donde esperan hasta que los recursos estén disponibles. El programador evalúa continuamente la cola y selecciona trabajos en función de la prioridad y la capacidad. Esto garantiza que las cargas de trabajo se procesen de manera eficiente sin abrumar al sistema.

Para ejecutar estas tareas, OCI Batch utiliza Compute Fleets, que representa la capacidad informática subyacente. Estas flotas se aprovisionan dinámicamente en función de la demanda de carga de trabajo. A medida que se envían más trabajos, se asigna capacidad adicional; cuando la demanda disminuye, los recursos se reducen. Esto garantiza un uso eficiente sin necesidad de intervención manual.

Después de la ejecución, los resultados se almacenan en OCI storage services y los logs y las métricas se capturan para obtener visibilidad. Esto proporciona una vista completa de la ejecución del trabajo y el rendimiento del sistema.

Por qué es importante esta arquitectura

Una fortaleza clave de OCI Batch reside en su separación entre el envío de trabajos y la ejecución. En lugar de ejecutar inmediatamente cada trabajo, el sistema utiliza colas y lógica de programación para gestionar las cargas de trabajo de forma eficiente. Este diseño permite a OCI Batch manejar picos repentinos de demanda sin necesidad de infraestructura previamente aprovisionada. También garantiza que los trabajos de mayor prioridad se puedan ejecutar en primer lugar, lo que mejora la previsibilidad en entornos compartidos.

Mediante la gestión dinámica de la asignación de recursos y el control de la ejecución mediante colas, el servicio proporciona un equilibrio entre rendimiento, escalabilidad y rentabilidad.

Componentes principales del lote de OCI

OCI Batch se crea en torno a un conjunto de componentes principales que trabajan juntos para ofrecer capacidades de procesamiento por lotes.

Ejemplo del mundo real: pipeline de procesamiento de video

Considere un escenario en el que se deben procesar miles de videos. Por ejemplo, convertir formatos, generar miniaturas o aplicar filtros.

Con OCI Batch, cada vídeo se puede tratar como una tarea independiente dentro de un trabajo. Estas tareas se pueden ejecutar en paralelo en varios recursos informáticos, lo que reduce significativamente el tiempo total de procesamiento. A medida que aumenta la demanda de carga de trabajo, OCI Batch aprovisiona automáticamente capacidad informática adicional para gestionar las tareas. Una vez finalizado el procesamiento, se almacenan los resultados y se generan logs para la supervisión. Este patrón se puede aplicar a muchos otros casos de uso, incluidos pipelines de datos, cargas de trabajo de aprendizaje automático y simulaciones de ingeniería.

Requisitos

Siga los ejemplos de políticas de IAM para permitir que el servicio OCI Batch acceda a los servicios de OCI necesarios.

También deberá descargar la CLI de OCI si va a utilizarla para crear trabajos.

Tarea 1. Crear contexto de lote

El contexto de lote es la capa de configuración de nivel superior para las cargas de trabajo por lotes. Incluye redes, conjuntos, derechos, valores de prioridad de trabajo y configuración de registro.

Para crear un contexto de lote, vaya al servicio Batch y seleccione Contextos de Lote y, a continuación, seleccione Crear Contexto de Lote. Complete los siguientes detalles según su entorno.

  1. Nombre
  2. Compartimiento
  3. Descripción
  4. VCN
  5. Subred
  6. Conjunto
  7. Derechos (opcional)
  8. Configuración de prioridad de trabajo (opcional)
  9. Configuración de Registro

    Crear contexto de lote

Tarea 2. Crear pool de trabajos

Un pool de trabajos es simplemente un contenedor lógico para los trabajos. Al ejecutar un trabajo, seleccionará un pool de trabajos en el que crearlo. Para crear un pool de trabajos, solo necesita las siguientes configuraciones.

  1. Nombre
  2. Descripción
  3. Compartimiento

    Crear pool de trabajos

Tarea 3. Crear perfil de tarea

Un perfil de tarea es una configuración reutilizable que define los recursos informáticos mínimos necesarios para las tareas, como 1 OCPU y 16 GB de memoria. Puede crear varios perfiles, cada uno correspondiente a un requisito de recurso diferente. Para crear un perfil de tarea, necesita las siguientes configuraciones:

  1. Nombre
  2. Descripción
  3. Mínimo de OCPU: puede definirlo en 1 para este ejemplo
  4. Memoria mínima en GB: puede definirla en 8 para este ejemplo

    Crear perfil de tarea

Tarea 4. Configuración de imágenes de contenedor push y entorno local

  1. Extraiga el código de GitHub y muévalo al directorio correcto.

     git clone https://github.com/oracle-devrel/technology-engineering.git
     cd technology-engineering/app-dev/developer-tools-and-lowcode/batch/video-transcoding/ 
    
  2. Crear un repositorio en OCI Container Registry (OCIR).

    Crear registro de contenedor

  3. Transfiera la imagen de contenedor a OCIR. La ruta de imagen debe coincidir con la región, el espacio de nombres de arrendamiento, el nombre del repositorio y la etiqueta de imagen, es decir, iad.ocir.io/<tenancy-namespace>/convert_mp4_to_avi:latest

     docker build -t <image>:<tag> .
     docker push <image>:<tag>
    

    Transferir contenedor a OCIR

  4. Cree cubos de Object Storage para vídeos de entrada y salida.

    Crear cubo de entrada

    Crear cubo de salida

  5. Cargar archivo de video en Object Storage

Tarea 5. Crear entorno de tarea

Un entorno de tareas es la configuración de tiempo de ejecución de las tareas. Para configurar un entorno de tareas, necesitará:

  1. Nombre
  2. Descripción
  3. Contexto de Seguridad:
    1. ID de usuario: establecer en 1
    2. ID de grupo: establecer en 1
    3. ID de grupo de sistema de archivos: establecer en 1
  4. Directorio de trabajo: Establecer esto en /video

    Crear entorno de tarea

Tarea 6. Ejecutar trabajo

Existen varias formas de enviar un trabajo al servicio por lotes. Para este tutorial, vamos a utilizar la CLI de OCI.

  1. Cree un archivo llamado video_conversion_job.json.
  2. Copie y pegue el siguiente código en video_conversion_job.json
     {
     "batchJobPoolId": "JOB_POOL_OCID",
     "compartmentId": "COMPARTMENT_ID",
     "description": "Task to convert video from MP4 to AVI format",
     "displayName": "convert_video",
     "maxWaitSeconds": 0,
     "tasks": [
         {
         "batchJobPoolId": "JOB_POOL_OCID",
         "compartmentId": "COMPARTMENT_ID",
         "description": "Task to convert video from MP4 to AVI format",
         "displayName": "convert_video",
         "maxWaitSeconds": 0,
         "tasks": [
             {
               "batchTaskEnvironmentId": "TASK_ENVIRONMENT_OCID",
               "batchTaskProfileId": "TASK_PROFILE_OCID",
               "description": "Task to convert video from MP4 to AVI format",
               "environmentVariables": [
                 {
                   "name": "INPUT_BUCKET",
                   "value": "input_bucket"
                 },
                 {
                   "name": "INPUT_OBJECT",
                   "value": "input.mp4"
                 },
               {
                   "name": "OCI_BUCKET",
                   "value": "output_bucket"
               },
               {
                   "name": "OUTPUT_FILENAME",
                   "value": "output.avi"
               },
               {
                   "name": "OCI_NAMESPACE",
                   "value": "TENANCY_NAMESPACE"
               },
               {
                   "name": "OCI_REGION",
                   "value": "REGION"
               }
               ],
               "fleetAssignmentPolicy":
               {
                   "type": "BEST_FIT"
                 },
               "name": "convert_video",
               "type": "COMPUTE"
             }
         ],
         "waitForState": [
           "ACCEPTED"
         ],
         "waitIntervalSeconds": 0
              
    

    Sustituya lo siguiente según su entorno:

    • JOB_POOL_OCID
    • COMPARTIMENTO_ID
    • TASK_ENVIRONMENT_OCID
    • TASK_PROFILE_OCID
    • ESPACIO DE NOMBRES DE ARRENDAMIENTO
    • REGION
  3. Ejecute el siguiente comando:

     oci batch batch-job create --from-json file://video_conversion_job.json
    

    El trabajo tardará hasta 10 minutos en completarse. Observe el trabajo en la consola de OCI para ver en qué etapa se encuentra.

Tarea 7. Validar Resultados

  1. En la consola de OCI, vaya a Object Storage.
  2. Busque el bloque de salida y valide si el vídeo transcodificado está presente.

OCI Batch frente a enfoques tradicionales

Las soluciones tradicionales de procesamiento por lotes a menudo requieren la gestión de la infraestructura, la configuración de los programadores y la gestión de la escala manualmente. Esto aumenta la complejidad y la sobrecarga operativa. Sin embargo, OCI Batch elimina estos desafíos al proporcionar un entorno gestionado en el que la programación, la ejecución y el aprovisionamiento de recursos se gestionan automáticamente. Esto facilita la ejecución de cargas de trabajo a gran escala sin una amplia experiencia en infraestructura.

Mejores prácticas

Para utilizar OCI Batch de forma eficaz, las cargas de trabajo deben diseñarse teniendo en cuenta la escalabilidad. Romper grandes trabajos en tareas más pequeñas permite una mejor ejecución en paralelo y un mejor rendimiento. También es importante definir perfiles de tarea adecuados para que los recursos se asignen de manera eficiente. Se debe activar el registro y la supervisión adecuados para garantizar la visibilidad de la ejecución del trabajo. El uso de grupos de trabajos y prioridades ayuda a garantizar que las cargas de trabajo críticas se ejecuten a tiempo, especialmente en entornos compartidos.

Conclusión

El servicio OCI Batch proporciona una forma simplificada y escalable de ejecutar cargas de trabajo por lotes en la nube. Al gestionar la orquestación de trabajos, la programación y el aprovisionamiento de recursos informáticos en un solo servicio, se reduce la complejidad operativa y se mejora la eficiencia. Para las organizaciones que se ocupan de cargas de trabajo a gran escala y con un uso intensivo de los recursos informáticos, OCI Batch ofrece una solución fiable y flexible que permite a los equipos centrarse en ofrecer resultados en lugar de gestionar la infraestructura.

Enlaces relacionados

Acuses de recibo

Más recursos de aprendizaje

Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal de YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en un explorador de Oracle Learning.

Para obtener documentación sobre el producto, visite Oracle Help Center.