Contexto:
Tengo un grupo de hosts H que sirven una API, donde cada host sirve la API usando un número P (constante) de procesos (python, pero irrelevantes) (asincrónicamente, pero por lo demás también irrelevantes).
Tengo acceso a la siguiente información (en forma de gráficos):
- el número promedio (por segundo) de consultas del receptor en todo el clúster, R(t)
- La latencia media (tiempo que lleva procesar una solicitud) L=
L(t)
, que también varía con el tiempo.- La media es de más de segundos y en todos los procesos/hosts.
- La cantidad de hosts
H(t)
, que cambia con el tiempo debido al escalado automático.
Puede ocurrir un error que finalice un proceso completo y todas las consultas en proceso, pero los procesos restantes siguen funcionando.
- La tasa de error (por ejemplo, en #bloqueos por día por host) es conocida y constante, por ejemplo
E
.
Problema: quiero calcular el número (¿esperado?) de consultas fallidas como resultado de un bloqueo.
Supuestos:
- las consultas están igualmente equilibradas entre hosts y procesos.
- un proceso fallido se recupera "inmediatamente"
Algunos pensamientos:
- En cualquier segundo dado, el número denuevoLas consultas deben ser
R(t) / [P*H(t)]
. - Esto no tiene en cuenta las consultas "en ejecución" que aún no han finalizado. Creo que quiero relacionar esto de alguna manera con L(t)...
- La inversa del número de consultas nuevas por segundo,
[P*H(t)] / R(t)
debería ser menor queL(t)
, ya que de lo contrario significaría que tomaría más tiempo completar una consulta que recibir una nueva, lo que eventualmente sobrecargaría los servidores (¡lo cual no está sucediendo!)