Rendimiento de Flogo: ¿Qué tan eficientes pueden ser tus servicios con Flogo? (Flogo vs Python)

Introducción

En publicaciones anteriores, hemos hablado mucho sobre todas las capacidades de Flogo y cómo hacer diferentes tipos de cosas con Flogo, y un mensaje siempre se subrayó allí: rendimiento, rendimiento, rendimiento… pero ¿cómo se compara el rendimiento de Flogo con otros lenguajes de programación modernos?

Para poder compartir algunos datos reales, lo mejor que podemos hacer es realizar nuestra prueba. Para hacer nuestra prueba, vamos a comparar nuestro desarrollo en Flogo frente al mismo usando Python.

Podrías preguntar por qué estamos comparando desarrollos en Flogo y desarrollos en Python y la respuesta es muy simple. Python es ahora uno de los lenguajes más de moda, recientemente agregado como el tercer lenguaje principal en el Índice TIOBE y el lenguaje principal cuando hablamos de scripting de ciencia de datos:

Índice TIOBE que muestra a Python como el 3er lenguaje más usado

Escenario

Prueba 1

Nos gustaría probar ambas tecnologías, pero también ver cómo se comparan con la nueva realidad para microservicios y poder integrarse con Servicios en la Nube, y creemos que la mejor opción para esta prueba será usar Amazon S3 para poder ver cómo se desempeñan ambas tecnologías.

Entonces, vamos a subir archivos a Amazon S3 y ver cómo se desempeñan ambas tecnologías. Y seleccionamos las siguientes pruebas:

  • Archivo A: pequeño 138 KB. Número de iteraciones, 1, 10, 50.
  • Archivo B: mediano 7 MB. Número de iteraciones 1, 10, 50.
  • Archivo C: grande 50MB. Número de iteraciones 1, 10, 50.

Estamos usando el siguiente script de Python para probar la integración con S3:

import boto3
import time
import sys
import psutil
from botocore.exceptions import NoCredentialsError
ACCESS_KEY = 'XXXXXXXXXXXXXXXXX'
SECRET_KEY = 'XXXXXXXXXXXXXXXXXXXXXXXXXXX'
def upload_to_aws(local_file, bucket, s3_file):
       s3 = boto3.client('s3', aws_access_key_id=ACCESS_KEY,
       aws_secret_access_key=SECRET_KEY)
       try:
           s3.upload_file(local_file, bucket, s3_file)
          print("Subida Exitosa")
          return True
       except FileNotFoundError:
          print("El archivo no fue encontrado")
          return False
       except NoCredentialsError:
          print("Credenciales no disponibles")
          return False
def launch():
    start = time.time()
    for x in range(0, int(sys.argv[1])):
    uploaded = upload_to_aws('D:/Data/Downloads/export.sql', 'testflogovspython', 'export.sql')
    end = time.time()
    print("Tiempo: " +  str(end - start))
launch()

Y vamos a usar la siguiente Aplicación Flogo (varios flujos para cada uno de los casos que nos gustaría verificar)

Prueba 2

Ahora, como esto va a ser para construir microservicios o aplicaciones en un mundo en la nube, veamos cómo se desempeñan ambos al hacer una simple API REST de Hello World. Para la parte de Python vamos a usar Flask para crear el servicio web y el siguiente fragmento:

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "¡Hola Mundo!"
if __name__ == '__main__':
    app.run(debug=True)

NOTA: Mantenemos el debug=True para hacerlo equivalente al nivel de sistema INFO predeterminado en la Aplicación Flogo

Y para Flogo un simple REST Hello World como este:

Flogo Hello World REST API

Resultados y Conclusiones

Prueba 1

Estamos obteniendo los siguientes números como puedes ver en el gráfico a continuación:

Incluso en este ejemplo de código bastante simple, el rendimiento de la aplicación Flogo es demasiado increíble para compararse con otro lenguaje bien ejecutado como Python.

Estamos hablando de un promedio de más del 50% más rápido el desarrollo en Flogo frente al de Python, y aún más cuando el tamaño del archivo es pequeño y lo más importante es cómo el lenguaje y las plataformas están manejando las cosas porque el porcentaje de tiempo respecto al ancho de banda no es lo suficientemente grande como para hacer que todos los valores dependan de la conexión que tengas disponible en ese momento.

Si hablamos sobre el consumo de memoria, los datos son bastante estables para ambos lenguajes, lo cual es una muy buena señal de cómo se maneja la memoria para esas plataformas. Pero en esta batalla también gana Flogo porque si usamos el último, el más grande, Flogo es estable en 22,7 MB frente a 55 MB de Python, también más del 50% mejor una vez más.

Prueba 2

Para los resultados del servicio API REST son bastante similares a los de la primera PRUEBA, y estamos viendo los siguientes resultados respecto a TPS y tiempo de respuesta:

Transacciones por segundo API REST Python vs Flogo
Tiempo de Respuesta API REST Python vs Flogo

Como podemos ver, en primer lugar, el tiempo de respuesta siempre es menor desde la API de Flogo (y recuerda que esta es una prueba predeterminada, sin ajustes especiales o algo similar) y también el tiempo de respuesta se desempeña mejor en Flogo, siendo capaz de mantenerse estable casi hasta 4 hilos y luego ser capaz de controlar el aumento mientras que el servicio REST de Python después de 2 hilos el tiempo de respuesta aumenta más del doble con cada prueba.

Lo mismo ocurre con respecto a TPS, donde en el caso de Flogo todos los valores son mejores que el anterior. Por supuesto, se alcanza algún tipo de límite en 8 hilos, pero en el caso de Python esta raíz se alcanza en 2 hilos y después de ese punto todos los valores son peores que el anterior.

En cuanto a la memoria, el consumo es bastante similar al de la prueba anterior, ambas soluciones mantienen el uso de memoria bastante bajo y estable. En este caso, Python siempre es estable en 20.3 MB y Flogo comienza en 15 MB pero alcanza su pico en 21.8 y luego vuelve a 18.8 MB. Así que, como dije, son bastante similares en cuanto al uso de memoria en esta prueba.

Consumo de Memoria Flogo vs Python

Conclusiones

Entonces, la conclusión es clara, no importa cuán bien creas que tu lógica se está ejecutando en Python, deberías intentar hacerlo usando Flogo porque, en este tiempo donde cada MB y cada milisegundo cuenta para hacer más pequeña tu factura de Infraestructura, Flogo va a ser tu mejor herramienta para exprimir todo el poder de tu infraestructura.

Recursos

Puedes encontrar todo el código que he usado para estas pruebas en el repositorio de GitHub que se muestra a continuación:

Alexandre Vazquez: