La computación dentro de una solución Big Data esta soportada por medio del servicio AWS Lambda (entre otros), que permite ejecutar código sin aprovisionar ni
administrar servidores. Se trata de uno de los servicios más interesantes de la
plataforma donde únicamente se paga por el tiempo de ejecución de las
funciones, por cada 100 ms que el código se ejecute y no por el número de veces
que se activa el código. Cuando AWS Lambda ejecuta una función Lambda, se
encarga de aprovisionar y administrar los recursos necesarios para ejecutar la
función. Al crear una función Lambda, se especifica información de
configuración, como la cantidad de memoria y el tiempo de ejecución máximo que
se desea permitir.
Cuando
se invoca una función Lambda, AWS Lambda lanza un contenedor (es decir, un
entorno de ejecución) basado en los ajustes de configuración que se han proporcionado. Se necesita tiempo para
configurar el contenedor y hacer el bootstrapping necesario, lo que añade
latencia cada vez que se invoca la función Lambda. Esta latencia se
observa cuando se invoca una función Lambda por primera vez o después de que se
ha actualizado, AWS Lambda intenta reutilizar el contenedor para invocaciones
posteriores de la función. Después de ejecutar una función Lambda, AWS Lambda
mantendrá el contenedor durante algún tiempo en previsión de otra invocación de
la función Lambda.
En
la siguiente imagen mostramos cómo funcionan las funciones Lambda.
Podemos
escribir las funciones Lambda en 4 lenguajes principalmente:
- Node.js
- Java
- C#
- Phyton
El modelo de programación nos
aporta un conjunto de características que debemos tener en cuenta:
- Handler. Es la función AWS Lambda para iniciar la ejecución de nuestra función Lambda. Cuando se invoca una función Lambda, AWS Lambda comienza a ejecutar su código llamando a la función del manejador. AWS Lambda pasa todos los datos de eventos a este controlador como el primer parámetro. El manejador debe procesar los datos de eventos entrantes y puede invocar cualquier otra función / método dentro del código aportado.
- Contexto (interacción en tiempo de ejecución). AWS Lambda también aporta un objeto de contexto a la función Handler como segundo parámetro. Por medio de este objeto de contexto, el código puede interactuar con AWS Lambda. Por ejemplo, puede controlar el tiempo de ejecución restante antes de que AWS Lambda termine la ejecución de la función Lambda. Para lenguajes como Node.js, existe una plataforma asíncrona que utiliza devoluciones de llamada. AWS Lambda proporciona métodos adicionales sobre este objeto de contexto.
- Registro. La función Lambda puede contener declaraciones de registro. AWS Lambda escribe estos registros en los registros de CloudWatch.
- Excepciones. La función Lambda puede requerir comunicar el resultado de la ejecución a AWS Lambda. Dependiendo del lenguaje en el que haya creado el código de función Lambda existen diferentes maneras de finalizar una solicitud con éxito o de notificar a AWS Lambda un error durante la ejecución. Si se invoca la función de forma síncrona, AWS Lambda reenvía el resultado al cliente.
A continuación mostramos el
código de una handler básico desarrollado en Python:
Comentarios
Publicar un comentario