Esta es una colección de utilidades basada en las recomendaciones de los residentes de Hacker News y GitHub. La lista incluye: Locust, Vegeta, Slow_cooker, k6 y Siege. Son utilizados por ingenieros de DICE, EA y Buoyant, así como por los desarrolladores de Kubernetes y Load Impact. Hablemos de estas herramientas.
Fotos - Victor Freitas - UnsplashHerramienta para sitios de prueba de estrés. Todos los scripts están escritos en Python. Una interfaz web especial construida en
Flask permite monitorear los resultados en tiempo real. Los autores de Locust son ingenieros suizos, entre los cuales se encuentran empleados de empresas DICE y EA involucradas en el desarrollo y publicación de juegos de computadora.
La herramienta se basa en un concepto interesante: la langosta ("langosta") emula el comportamiento de un enjambre de insectos (usuarios virtuales), "atacando" el sitio durante la prueba. Las solicitudes se forman utilizando una biblioteca de red para organizar la computación paralela -
gevent . Aquí hay un ejemplo de una prueba simple, que se ofrece en el sitio web oficial del proyecto:
from locust import HttpLocust, TaskSet, task class WebsiteTasks(TaskSet): def on_start(self): self.client.post("/login", { "username": "test_user", "password": "" }) @task def index(self): self.client.get("/") @task def about(self): self.client.get("/about/") class WebsiteUser(HttpLocust): task_set = WebsiteTasks min_wait = 5000 max_wait = 15000
Locust usa la biblioteca de solicitudes. Este complemento para herramientas estándar de Python simplifica el trabajo con HTTP y SSL y hace que el código sea más visual. Por cierto, la
documentación de las solicitudes se puede utilizar como una hoja de trucos para las pruebas de depuración de Locust.
Esta herramienta de prueba de estrés ha existido por más de siete años. Durante este tiempo, se ha formado una extensa comunidad a su alrededor: en GitHub,
más de 10 mil estrellas . Locust se utilizó para evaluar el rendimiento de la red Battlelog para la serie de juegos Battlefield. Armin Ronacher, autor del marco Flask,
habló positivamente sobre la herramienta.
Entre las desventajas de Locust
, hay un rendimiento bastante bajo y errores periódicos en la estimación del tiempo de respuesta de los sitios. La herramienta tampoco sabe cómo construir gráficos, pero el problema se resuelve cargando los resultados en forma de archivos
CSV y renderizando gráficos en el editor de tablas.
Si desea conocer más de cerca a Locust, debe prestar atención a la
documentación de la herramienta. También puedes recomendar una
actuación de Alexei Romanov de Wargaming en el Python Meetup. Habla sobre cómo escribir scripts que emulen el comportamiento del usuario.
Go utilidad de línea de comandos para probar servicios HTTP escritos en Go. Se puede conectar como una biblioteca para crear sus propias herramientas de prueba de carga. Vegeta fue desarrollado por uno de los autores de la plataforma
Sourcegraph de código abierto, un motor para revisar y navegar el código fuente utilizado por Lyft, Uber y Yelp.
Vegeta evalúa las capacidades de los recursos de la red, "bombardeando" sus solicitudes con una frecuencia establecida. Por ejemplo, para verificar localhost, simplemente ingrese el siguiente comando:
echo "GET http://localhost/" | vegeta attack -duration=5s | tee results.bin | vegeta report
De forma predeterminada, Vegeta funciona con la secuencia de lectura de comandos estándar (stdin), por lo que el recurso para la prueba se transmite a través del eco. El parámetro de duración indica la duración de la prueba. El informe se generará en el archivo results.bin. Vegeta genera informes en formato de texto, pero puede
dibujar gráficos . Puede generarlos con el siguiente comando:
vegeta plot -title=Results results.bin > results-plot.html
Se formó una gran comunidad alrededor de Vegeta:
12 mil estrellas en GitHub . Los desarrolladores de Kubernetes incluso
utilizaron la herramienta para evaluar el rendimiento de su plataforma; luego Vegeta generó alrededor de 10 millones de solicitudes por segundo a un grupo de miles de nodos.
La documentación que describe todas las funciones y marcas para las pruebas de Vegeta se encuentra
en el repositorio en GitHub . También
puede encontrar archivos ejecutables precompilados allí.
Esta es una herramienta de prueba de carga del servidor escrita en Go. Fue desarrollado por ingenieros de Buoyant, que crea una red de servicios para Kubernetes - Linkerd. Forma parte de la Cloud Native Computing Foundation y
se considera un competidor de
Google Istio .
Fotos - Joshua Aragon - UnsplashPor lo general, las utilidades para la prueba de carga verifican las capacidades del servidor, enviándole tantas solicitudes como sea posible en poco tiempo. Los autores de slow_cooker dicen que su herramienta le permite evaluar el trabajo del hierro bajo una carga predecible durante mucho tiempo.
Los expertos boyantes utilizan su desarrollo para probar Linkerd y otros servicios, como nginx. El instrumento es bastante joven, tiene unos tres años, así que hasta que consiguió una gran comunidad. Pero la situación puede cambiar en el futuro, por ejemplo, su repositorio ya se ha
bifurcado en Skysanner, un servicio internacional para buscar boletos de avión.
Puedes encontrar el código fuente
en GitHub .
Una herramienta para pruebas de carga y regresión de microservicios, contenedores y sitios alojados en la nube. Está escrito en Go y por los desarrolladores de JavaScript de Load Impact: esta es una aplicación para probar la "persistencia" de los sitios.
El trabajo con k6 se basa en todo como modelo de código, cuando la lógica de prueba y todas las configuraciones están escritas en JavaScript. En los guiones, los pasos individuales se pueden agrupar, lo que puede ser conveniente para aquellos que están acostumbrados a seguir los principios de BDD. Aquí hay un ejemplo de tal grupo:
import { group } from "k6"; export default function() { group("user flow: returning user", function() { group("visit homepage", function() {
La herramienta también permite
grabar scripts y
construir gráficos : esta última función se implementa en InfluxDB y Grafana. Y tiene integraciones con sistemas de CI como Jenkins, Circle CI, Team City y GitLab.
Los usuarios dicen que k6
no consume muchos recursos y tiene una API conveniente. Pero hay varios inconvenientes, en particular, k6
no admite websocket y
no sabe cómo realizar pruebas en sistemas distribuidos. Aunque los desarrolladores de k6 en el hilo temático en Hacker News
dijeron que estas características aparecerán en el futuro.
Si desea familiarizarse con las capacidades de k6 usted mismo, los residentes de HN recomiendan comenzar con
documentación técnica : detallada y con ejemplos. Si tiene alguna pregunta, puede contactar
al foro oficial .
Siege le permite cargar servidores web de prueba. La utilidad fue creada por el ingeniero Jeff Fulmer (Jeff Fulmer), para que los desarrolladores puedan verificar el consumo de recursos de su código en condiciones cercanas al combate. Siege emula un flujo continuo de acceso al sitio de muchos usuarios, como si mantuviera el servidor "asediado", de ahí el nombre de la herramienta.
Después de la prueba, la utilidad muestra: el tiempo de exploración, el número de transacciones por segundo, el rendimiento, el número de solicitudes exitosas y no exitosas, así como su número con un código de respuesta de 200. Aquí hay
un ejemplo de un informe generado por Siege.
El asedio está bastante extendido en la comunidad de TI. Por ejemplo, una sección completa del libro "
NGINX High Performance " está dedicada a las pruebas de carga con su ayuda. También es
utilizado por algunos proveedores de la nube.
Entre las deficiencias de Siege, se pueden distinguir la sintaxis no estándar y los métodos no obvios para calcular los parámetros de prueba; por ejemplo, las redirecciones
se consideran transacciones exitosas, por lo que su número puede exceder el número total de solicitudes. Si quiere probar Siege en la práctica, estudie el
manual en línea : hay algunas "rarezas" del sistema.
Lectura adicional en el blog 1cloud.ru:
Novedades del kernel 5.3 de Linux: controladores de gráficos, virtualización y otras actualizaciones
¿Por qué los desarrolladores de navegador convencionales se negaron nuevamente a mostrar el subdominio?
Por qué Apple cambió los requisitos para los desarrolladores de aplicaciones