Contexto:
Eu tenho um cluster de hosts H que atendem uma API, onde cada host atende a API usando um número P (constante) de processos (python, mas irrelevantes) (de forma assíncrona, mas também irrelevante).
Tenho acesso às seguintes informações (na forma de gráficos):
- o número antigo (por segundo) de receptor de consultas em todo o cluster, R (t)
- A latência média (tempo necessário para processar uma solicitação) L=
L(t)
, que também varia com o tempo.- a média é superior a segundos e em todos os processos/hosts
- O número de hosts
H(t)
, que muda ao longo do tempo devido ao escalonamento automático.
Pode ocorrer um erro que mata um processo inteiro e todas as consultas em processo, mas os processos restantes continuam funcionando.
- A taxa de erro (por exemplo, em #crashes por dia por host) é conhecida e constante, digamos
E
.
Problema: quero calcular o número (esperado?) de consultas com falha como resultado de uma falha.
Premissas:
- as consultas são igualmente equilibradas entre hosts e processos.
- um processo com falha se recupera "imediatamente"
Alguns pensamentos:
- A qualquer segundo, o número denovoas consultas devem ser
R(t) / [P*H(t)]
. - Isso não leva em consideração as consultas "em execução" ainda não concluídas. Acho que quero relacionar isso de alguma forma com L(t)...
- O inverso do número de novas consultas por segundo,
[P*H(t)] / R(t)
, deveria ser menor queL(t)
, caso contrário levaria mais tempo para concluir uma consulta do que para receber uma nova, eventualmente sobrecarregando os servidores (o que não está acontecendo!)