El Throughput, la unidad más importante de un sistema
Cuando trabajamos con sistemas distribuidos como los microservicios, el objetivo es siempre ESCALAR, porque sino para que demonios usamos microservicios. La escalabilidad es la capacidad de ampliación de un sistema para satisfacer las necesidades del negocio, sin que esto requiera demasiados cambios en el sistema en sí.
Para escalar podemos hacerlo de dos formas fundamentales, vertical (sumando hardware mas potente) o horizontal mediante la cual agregamos más nodos o instancias de nuestro sistema para distribuir la carga y soportar mayor volumen de tráfico.
Este mayor volumen de tráfico es difícil de dimensionar, siempre como ingenieros de software nos preguntamos ¿Cuál es el volumen de tráfico que puede soportar mi plataforma ? Esta es probablemente la pregunta más difícil de responder por un equipo de ingeniería.
La verdad es que no existe una formula mágica, al menos no la conoce este servidor.
La unidad usada para dimensionar cuantas transacciones (efectivas) en un espacio de tiempo es capaz de procesar un sistema de software se llama Throughput.
Litle’s Law
Del campo de las matemáticas tenemos este teorema:
En la teoría matemática de las colas , el resultado , teorema , lema , ley o fórmula de Little [1] [2] es un teorema de John Little que establece que el número promedio a largo plazo L de clientes en un sistema estacionario es igual al número a largo plazo término tasa de llegada efectiva promedio λ multiplicada por el tiempo promedio W que un cliente pasa en el sistema.
Wikipedia source.
Si aplicamos ese mismo principio al cálculo del Throughput podemos definir a la tasa de transferencia efectiva como:
Por partes:
- λ : Seria la tasa de transferencia efectiva que es capaz de soportar nuestro sistema o arquitectura.
- L: Es la concurrencia promedio o el número de solicitudes procesadas simultaneamente.
- W: Es el tiempo promedio de procesamiento de una solicitud.
Mientras mas óptimo sea nuestro sistema en cuando al tiempo de procesamiento de la solicitudes (se procesen en menor tiempo) mayor tasa podría soportar.
La unidad de medida del Throughput es usualmente TPM o TPS.
- TPM: Transacciones por minuto.
- TPS: Transacciones por segundo.
Las herramientas de observabilidad mas conocidas permiten mostrar este valor, pero no permiten determinar los números limites de hasta donde puede llegar ese valor sin causar daños en la disponibilidad del servicio.
Consideraciones
El cálculo del Throughput NO es lineal. No significa que si un sistema tiene dos instancias y soporta 40 TPS por subir a 4 instancias vaya a soportar necesariamente 80 TPS. Muchos son los factores que influyen en este aspecto, por mencionar algunos:
- La infraestructura de software debe ser independiente y escalable por separado a lo mismos niveles que los servicios principales. Un elemento limitante por ejemplo seria la persistencia, es usual que un servicio de software se pueda escalar horizontalmente en 100 instancias, pero las 100 usualmente van a conectarse a la misma base de datos y existen limites. A medida que se escala la aplicación el rendimiento de la base de datos pudiera degradarse.
- La dependencia de terceros se va de nuestras manos, si nuestro sistema se conecta a terceros entonces tenemos un problema y hay que pensar que siempre puede fallar y diseñar los sistemas para que puedan fallar y aún así seguir funcionando (resilientes)
- La infraestructura de red debe soportar el aumento del tráfico, switches, routers, etc.
- Los algoritmos implementados en las aplicaciones deben tener un comportamiento lineal a medida que aumenta el volumen de datos a procesar y no siempre sucede.
Espero te haya servido el artículo para introducirte al menos en este concepto y tener algunas ideas que puedas aplicar.
Bye.