Portando tu aplicación a serverless en 5 segundos con Lithops

·

·

, ,

Imagina que tienes una aplicación o programa en Python diseñado para ejecutarse localmente, pero te gustaría portarlo a la computación serverless. ¿Cómo lo harías? ¿Cuáles serían los pasos a seguir? ¿Qué desafíos encontrarías en el camino? Veamos cómo Lithops puede ayudarte en este proceso.

Recapitulando

En un artículo anterior, hablamos sobre el concepto de transparencia en sistemas distribuidos. Vimos qué tipos de transparencia existen, cuáles son sus características, su importancia y ejemplos prácticos. Por otro lado, en otro artículo, presentamos la herramienta Lithops y cómo nos permitía ejecutar aplicaciones serverless de forma unificada entre distintos proveedores de cloud, evitando así el vendor lock-in. Hoy presentaremos una funcionalidad de Lithops que nos permite portar aplicaciones a la computación serverless de forma sencilla, rápida y transparente.

Idea principal

La programación paralela en Python ha sido tradicionalmente implementada sobre la base de la librería multiprocessing. Esta librería contiene una serie de clases y abstracciones que permiten la creación de múltiples procesos que se ejecutan de forma concurrente, así como también la comunicación y sincronización entre ellos. Por ejemplo, multiprocessing nos ofrece la abstracción de Pool, que nos permite crear un conjunto de procesos que ejecutan una función en paralelo y nos devuelve los resultados de cada proceso. A nivel de estructuras de datos, disponemos de Queue, que nos permite compartir datos entre procesos de forma segura, o Pipe, que nos permite comunicar dos procesos entre sí.

Este alto nivel de abstracción sobre los procesos y su comunicación nos permite implementar la interfaz de esta librería sobre Lithops. De este modo, las aplicaciones que estén implementadas sobre multiprocessing pueden ser ejecutadas en serverless, a pesar de haber sido programadas para ejecutarse localmente. Obteniendo así los beneficios de la computación serverless, como por ejemplo, su gran escalabilidad o su pago por uso.

Este fue el resultado de uno de los artículos científicos publicados por el grupo de investigación CloudLab, en el que se evaluaba la transparencia de acceso en funciones serverless sobre la API de multiprocessing.

Introducción a la API de multiprocessing

La API de multiprocessing en Python proporciona una interfaz sencilla para crear y gestionar procesos. Algunas de las clases y funciones más utilizadas incluyen:

  • Process: Permite crear un nuevo proceso.
  • Pool: Permite crear un grupo de procesos para ejecutar tareas en paralelo.
  • Queue: Proporciona una cola segura para compartir datos entre procesos.
  • Pipe: Permite la comunicación entre dos procesos.

A continuación, se muestra un ejemplo básico de cómo utilizar multiprocessing para ejecutar una función en paralelo utilizando Pool:

import multiprocessing as mp

def square(x):
    return x * x

if __name__ == "__main__":
    with mp.Pool(processes=4) as pool:
        results = pool.map(square, range(10))
    print(results)

Lithops multiprocessing

Como Lithops implementa esta misma API, podemos ejecutar el mismo código anterior sobre serverless cambiando solo una línea de código, en particular la importación de la librería:

from lithops import multiprocessing as mp

El resto del código permanece inalterado, lo que nos permite portar aplicaciones a serverless de forma sencilla y transparente:

from lithops import multiprocessing as mp

def square(x):
    return x * x

if __name__ == "__main__":
    with mp.Pool(processes=4) as pool:
        results = pool.map(square, range(10))
    print(results)

Basándonos en esta dinámica, de cambiar los imports de `multiprocessing` por `lithops.multiprocessing`, podemos portar una multitud de aplicaciones programadas para ejecutarse localmente a la computación serverless.

Conclusión

En este artículo, hemos visto cómo Lithops nos permite portar aplicaciones a la computación serverless de forma sencilla y transparente. Gracias a la implementación de la API de `multiprocessing`, podemos ejecutar aplicaciones programadas para ejecutarse localmente sobre serverless sin necesidad de modificar su código. Esto nos permite aprovechar los beneficios de la computación serverless, como su escalabilidad y su pago por uso, sin tener que reescribir nuestras aplicaciones.

Y tú, ¿ya has probado a portar tus aplicaciones a serverless con Lithops? ¡Cuéntanos tu experiencia en los comentarios!


Discover more from Catedra T-Systems X URV

Subscribe to get the latest posts sent to your email.


Leave a Reply

Your email address will not be published. Required fields are marked *