Planificación de Code Engine

IBM Cloud® Code Engine admite estos tipos básicos de cargas de trabajo: aplicaciones, tareas, funciones y flotas.

Una aplicación, o app, ejecuta el código para servir solicitudes HTTP. Además de las solicitudes HTTP tradicionales, IBM Cloud® Code Engine también da soporte a aplicaciones que utilizan WebSockets como protocolo de comunicaciones. El número de instancias activas de una aplicación se amplía o se reduce automáticamente (hasta cero) en función de las solicitudes entrantes y de los parámetros de configuración. Una app contiene una o varias revisiones. Una revisión representa una versión inmutable de las propiedades de configuración de la app. Cada actualización de una propiedad de configuración de la app crea una nueva revisión de la app.

Un trabajo ejecuta una o más instancias de tu código ejecutable en paralelo. A diferencia de las aplicaciones, que gestionan solicitudes HTTP, los trabajos se han diseñado para que se ejecuten una vez y se salga. 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.

Una función es un fragmento de código sin estado que realiza tareas a medida que es invocado por peticiones HTTP. Con las funciones de IBM Code Engine, puede ejecutar su lógica empresarial de forma escalable y sin servidor. Las funciones de IBM Code Engine proporcionan un entorno de ejecución optimizado para dar soporte a escenarios de baja latencia y escalabilidad rápida. El código de tu función puede escribirse en un tiempo de ejecución gestionado que incluya versiones específicas de Node.js o Python.

Una flota, también llamada flota sin servidor, ejecuta una o más instancias de código de usuario para completar un conjunto de tareas específicas. Las flotas pueden procesar grandes cargas de trabajo de cálculo intensivo, permiten controlar los perfiles de las máquinas y pueden funcionar con recursos de GPU. Las flotas son de inquilino único, implementan colas de tareas dinámicas y proporcionan un control total sobre la configuración del perfil de la máquina. Además, las flotas pueden conectarse a nubes privadas virtuales (VPC) para acceder de forma segura a los datos y servicios de los usuarios.

Comparación de las aplicaciones, los trabajos, las funciones y las flotas de « Code Engine »
Característica Aplicación Trabajo Función Flota
Tiempo de ejecución (duración) Larga ejecución (10 minutos por solicitud) Larga ejecución (hasta 24 horas) Ejecución corta (2 minutos o menos) De larga duración (de minutos a semanas)
Latencia de inicio Medio Inicio planificado Bajo Bajo
Terminación Ejecución continua Ejecución hasta la finalización Ejecución hasta la finalización Ejecución hasta la finalización
Invocación Bajo petición o en ejecución permanente Planificado Bajo petición, instantánea Planificado
Modelo de programación Compilación y ejecución basada en contenedor Compilación y ejecución basada en contenedor Archivos de código fuente específicos del idioma y metadatos de dependencia Compilación y ejecución basada en contenedor
Paralelismo Ejecución paralela, flexible Ejecución en paralelo de bajo a medio Ejecución paralela alta Alta ejecución paralela y puesta en cola
Escalado horizontal Basado en el número de solicitudes Basado en la definición de carga de trabajo de trabajo Basado en sucesos o invocaciones directas En función del número de tareas y de instancias concurrentes
Aislamiento Varios arrendatarios Varios arrendatarios Varios arrendatarios De un solo arrendatario
Soporte de GPU No No No
Control sobre la configuración de la máquina Sin control Sin control Sin control control completo
Conectividad VPC A través de Private Path A través de Private Path A través de Private Path Nativo (a través de un grupo de subredes)
Optimizado para Carga de trabajo de larga ejecución altamente compleja y escalado bajo demanda Cargas de trabajo planificadas o planificadas con altas demandas de recursos Tiempo de inicio y escalado rápido Cargas de trabajo a gran escala que requieren un uso intensivo de recursos de computación

Casos de uso de Code Engine

Aunque los casos de uso para Code Engine varían mucho, aquí hay algunos ejemplos para empezar.

Tiene experiencia en el uso de contenedores, pero no tiene conocimientos o presupuesto para gestionar clústeres
Usted es un desarrollador que tiene conocimientos sobre contenedores. Sin embargo, no le agrada la complejidad o el consumo de tiempo derivados de la gestión de un clúster. Con Code Engine, no tiene que preocuparse por los conocimientos necesarios para gestionar un clúster ni por el tiempo que se tarda en hacerlo. Code Engine elimina estas complejidades y el equipo de IBM gestiona la infraestructura como parte del servicio IBM Cloud.
Cargas de trabajo con picos intermitentes
Su sitio web tiene muchas visitas durante los fines de semana, pero experimenta menos tráfico durante la semana. Debido a que este sitio web experimenta picos de actividad seguidos de periodos de inactividad, Code Engine constituye una buena solución. Con Code Engine, la aplicación del sitio web aumenta automáticamente el número de instancias de la aplicación para ajustarlas al aumento del tráfico y luego las vuelve a reducir durante los periodos de inactividad (incluso hasta cero).
Cargas de trabajo por lotes integradas con almacenamiento
Su trabajo por lotes procesa los salarios de los empleados al final de cada mes. Dado que esta tarea se ejecuta mensualmente, permanece inactiva la mayor parte del tiempo, pero consume una gran cantidad de CPU y memoria cuando se ejecuta. El trabajo por lotes debe integrarse con el almacenamiento para almacenar los resultados. Mediante el uso de Code Engine, puede integrar el trabajo por lotes con IBM Cloud Object Storage y se factura solo por los recursos que utiliza el trabajo cuando se ejecuta. Cuando el trabajo está desocupado, no consume ningún recurso y, por lo tanto, no incurre en cargos. Sin embargo, el trabajo puede incurrir en costes con la instancia de IBM Cloud Object Storage.
Traer su propia carga de trabajo
Parte de su trabajo consiste en crear imágenes y desplegarlas. Tiene experiencia en la creación de imágenes de contenedor y en el despliegue de las mismas, pero desea simplificar este proceso para poder concentrarse en otras tareas. Con Code Engine, puede crear imágenes y desplegarlas directamente desde la misma interfaz, simplificando así las tareas diarias y disponiendo de más tiempo para desarrollar más código.
Pruebas, pruebas de conceptos o "revisión a fondo"
Está interesado en aprender más sobre la arquitectura basada en contenedores. Su equipo ha desarrollado una aplicación, pero desea probarla antes de presentarla a las partes interesadas. Esta aplicación es pequeña, por lo que no desean pagar ni tan siquiera por un pequeño clúster dedicado. En este caso, puede probar la aplicación y, a continuación, presentar una prueba de concepto del diseño a las partes interesadas sin el coste que puede significar un clúster dedicado.

Cuándo utilizar una aplicación, trabajo o función

Las aplicaciones y los trabajos son muy similares: en ambos casos se ejecuta código. Sin embargo, hay algunos aspectos clave que debes tener en cuenta a la hora de decidir si estructuras tu código como una aplicación o como un trabajo.

¿Su código necesita responder a un evento?

En el contexto de Code Engine, cualquier solicitud HTTP de entrada (incluso la solicitud de carga de una página web) o una llamada API REST, se considera un suceso. El concepto 'controlado por sucesos' suele ser el factor clave al elegir entre una aplicación o un trabajo porque, por definición, las aplicaciones se ejecutan por una solicitud HTTP mientras los trabajos se ejecutan como resultado de una invocación.

Si sabe que la carga de trabajo responde a las solicitudes HTTP entrantes, la app es la opción adecuada. Sin embargo, si la carga de trabajo se ejecuta y se realiza, un trabajo constituye la mejor opción.

¿Cómo escala su código?

Tanto las apps como los trabajos son escalables. Las apps se escalan en respuesta a criterios mensurables en tiempo real como, por ejemplo, el número de solicitudes entrantes activas, porque cada instancia de la app solo puede procesar un determinado número de solicitudes simultáneas a la vez. Los trabajos se escalan en función del número de instancias que se especifican cuando se crea el trabajo.

Si sabe que desea que se ejecute un número específico de instancias de su código y cada instancia se puede ejecutar sin una solicitud HTTP de entrada, un trabajo es la opción correcta. Sin embargo, si el número de instancias se debe escalar dinámicamente en función de la carga HTTP de entrada, las apps constituyen una mejor opción.

Escenarios comunes para Code Engine

Lea algunos de estos escenarios comunes para comprender cuándo elegir un tipo específico de carga de trabajo.

¿Su carga de trabajo requiere una baja latencia o es interactiva?
Si la carga de trabajo requiere que un cliente o un usuario espere de forma síncrona la respuesta a la solicitud y la respuesta debe estar disponible en unos pocos milisegundos, utilice una aplicación. Las aplicaciones proporcionan un punto final accesible externamente y responden de forma síncrona a la solicitud. Ejemplos de cargas de trabajo de este tipo son sitios web, chatbots y aplicaciones móviles. Utilice aplicaciones.
¿Su cálculo es ligero y requiere poca CPU, memoria y E/S?
Si la carga de trabajo es ligera y requiere poca CPU, memoria y E/S, la opción de simultaneidad, disponible para las aplicaciones, puede resultar útil. Un ejemplo típico es un servidor de API que proporciona operaciones básicas y está respaldado por una base de datos NoSQL. Estos tipos de solicitudes suelen tener una pequeña cantidad de datos y requieren poca memoria o menos ciclos de CPU. Con una mayor simultaneidad, la aplicación puede procesar los datos de una primera solicitud mientras la segunda solicitud está a la espera de E/S. Dado que los requisitos de CPU y memoria son bajos, se pueden ejecutar muchas solicitudes simultáneamente. Utilice aplicaciones.
¿Su cálculo está vinculado a CPU, memoria o E/S?
Para procesar una determinada cantidad de datos, donde cada fragmento de datos es grande y requiere una gran cantidad de CPU y memoria, los trabajos suelen ser la mejor opción. Sin embargo, si la carga de trabajo requiere un patrón de solicitud-respuesta, también es posible utilizar apps. En ambos casos, la tarea de cálculo se ejecuta con una sola concurrencia. Cada instancia de aplicación o tarea de trabajo procesa solo una solicitud o fragmento de datos simultáneamente para aprovechar completamente los recursos que se han configurado para la instancia. El paralelismo lo consigue el número de instancias o tareas, donde el coste de crear una tarea adicional es insignificante debido a las altas restricciones de los recursos. Un ejemplo típico es el proceso de datos de imagen en un grupo de Object Storage o el suministro de modelos de machine learning. Utilice aplicaciones o trabajos.
¿Se ejecuta su cálculo durante mucho tiempo?
Si la duración de la tarea de cálculo es larga, los trabajos son la mejor opción debido a su naturaleza asíncrona. La duración máxima de las aplicaciones es siempre limitada porque mantener una conexión abierta a escala resulta costoso. Las cargas de trabajo típicas son modelos de machine learning de entrenamiento u optimización de hiperparámetros. Utilice trabajos.
¿Puede especificar la simultaneidad de su cálculo por adelantado?
Si sabe la cantidad de cálculo que necesita realizar, puede ejecutar un trabajo con el número exacto de instancias hasta que finalice. Los ejemplos típicos son el ajuste de hiperparámetros o el entrenamiento de una red neuronal. Utilice trabajos.
¿Su carga de trabajo reacciona a algún suceso?
Si la carga de trabajo debe reaccionar ante un suceso, como por ejemplo una confirmación de Git que se envía al repositorio, un objeto que se carga en un grupo de Object Storage o un documento que se modifica en la base de datos, utilice aplicaciones. Las aplicaciones proporcionan un punto final que se puede configurar de modo que reciba sucesos del origen de sucesos. Utilice aplicaciones.
¿Necesita procesar una gran cantidad de datos en poco tiempo en respuesta a sucesos o solicitudes?
Si la carga de trabajo requiere una respuesta rápida a solicitudes o sucesos no previstos, las aplicaciones suelen resultar más adecuadas porque las aplicaciones se escalan de forma dinámica, incluso desde cero. Utilice aplicaciones.
Combinación de apps y trabajos
Puede incluso combinar apps y trabajos, donde una aplicación puede iniciar un trabajo para externalizar cálculos específicos. Los trabajos también pueden consultar una aplicación. Un ejemplo típico de una combinación de trabajos y apps es la formación y el suministro de modelos de machine learning. Los trabajos se suelen utilizar para entrenar los modelos y las aplicaciones se utilizan para suministrar los modelos. Utilice aplicaciones y trabajos.