¿Estás visitando desde Argentina?
Ingresá a Linware Argentina ⯈
Continuar en Linware Argentina ⯈
×
¿Qué estás buscando?
BUSCAR!
BLOG
Perf8: métricas de rendimiento para Python
Publicada el 28/12/2022

Elastic esta creando este excelente servicio en Python para ingerir datos en Elasticsearch desde varias fuentes (MySQL, Network Drive, AWS, etc.) para Enterprise Search.

Succionar datos de un servicio de terceros a Elasticsearch suele ser una actividad vinculada a E/S. Su código se encuentra en sockets abiertos y pasa datos de un extremo al otro. Ese es un excelente caso de uso para una aplicación asincrónica en Python, pero debe diseñarse cuidadosamente.

Cuando los datos fluyen a través de esa canalización, queremos asegurarnos de no gastar los recursos disponibles (RAM/CPU/FD). También queremos maximizar el resultado sin eliminar Elasticsearch o el servicio de backend.

Por lo tanto, se trata de implementar las protecciones correctas de aceleración y contrapresión y mostrar la configuración correcta, para que pueda dimensionar adecuadamente qué tan agresivo será el servicio según el ancho de banda de su red, la RAM disponible y el tamaño del clúster de Elasticsearch.

Puntos de bonificación si la aplicación puede hurgar en su entorno de ejecución y tomar algunas decisiones para adaptar su comportamiento de forma automática y dinámica.

Todo este trabajo de ajuste y verificación de rendimiento debe realizarse para cada nueva fuente. El rendimiento del servicio podría degradarse simplemente porque una nueva fuente de datos bloquea el bucle de eventos o infla la memoria.

Ahí es donde se pone súper interesante: para comprobar el rendimiento, cada desarrollador tiene sus herramientas habituales, y se hace difícil compartir este conocimiento de forma estandarizada. Python tiene numerosas herramientas para verificar el rendimiento de sus aplicaciones, y no existe la "herramienta perfecta".

Eso hace retroceder 12 años cuando se enfrento el mismo dilema con las herramientas de control de calidad y lanzo Flake8 0.1 : el cual quería tener esa única CLI unificada para ejecutar una lista seleccionada de herramientas de control de calidad.

El proyecto se hizo popular porque evolucionó y fue mantenido por personas increíbles, pero también porque la idea inicial (una CLI para gobernarlos a todos) tenía mucho sentido para las personas que querían adoptar un estándar de control de calidad y un conjunto de buenas prácticas para su proyecto. sin tener que profundizar demasiado en lo que se supone que deben ejecutar. Solo córtalo .

Esto es exactamente lo que se está viendo hoy para las pruebas de rendimiento. Una única herramienta unificada para ejecutar pruebas de rendimiento, crear un estándar para nuestros proyectos de Python y producir el mismo informe estándar cada vez.

Desde Elastic lo llaman perf8 por la referencia flake8 (que se llamó flake8 porque es una contracción de pyflakes y pep8 ), y el trabajo está sucediendo aquí .

El ecosistema actual de herramientas de rendimiento en Python es tan sorprendente en comparación con lo que estaba disponible hace 12 años. 

Se ha integrado Memraypy-spy con informes de speedscope y otras cosas geniales, como un gráfico de puntos generado por gprof2dot. Py-spy es superior a cProfile en los casos de uso porque se ejecuta fuera del proceso y no agregará una sobrecarga de velocidad masiva al ejecutar la aplicación. Pero no funcionará con las últimas versiones de macOS. Por lo tanto, cProfile es una alternativa decente en ese caso, y la vista de puntos generalmente muestra rápidamente los puntos calientes.

Y produce un informe agregado unificado en un directorio HTML autónomo para que se pueda comprimir y pasar, producir en automatización o en una computadora portátil de desarrollador. 

Todo lo que tiene que hacer para usarlo es ejecutar su aplicación Python con: $ perf8 -c /path/to/app.py.

Además del informe HTML, el directorio contiene todas las métricas sin procesar como artefactos, por lo que si algún día queremos conectar nuestro CI a un tablero de Kibana y disfrutar de una mejor interfaz de usuario con datos históricos, podremos aprovechar Perf8.

Pero por ahora, ¡el informe HTML estático simple es lo suficientemente bueno!.

El objetivo es desarrollar una lista seleccionada de herramientas que brinden todo el espectro de métricas que podríamos necesitar cuando analizamos el rendimiento en general.  

Bob: creo que su aplicación tiene un problema de rendimiento

Joe: Veámoslo. ¿Me puede enviar su informe Perf8?

¿Qué piensas?

Este es un proyecto de código abierto de Elastic y las contribuciones son bienvenidas. Si conoce una biblioteca/herramienta de rendimiento que debería estar allí o tiene buenas ideas para mejorarla, únase a la diversión iniciando una conversación en el rastreador de problemas del proyecto .

Ir al Blog