simulador de agendamento
filas, vagas, retries e timeouts em um relógio determinístico
Pergunta
O que acontece com um job quando as vagas são limitadas, uma tentativa falha ou um timeout dispara? Um modelo didático de agendador de jobs: mude durações, retries, backoff e falhas e avance pela fila um tick por vez. Ele ilustra a ideia por trás das configurações de job do Orbit; o Orbit ainda não tem agendador, e esta página não o executa.
Bancada
Três jobs, uma vaga. Veja a fila esvaziar na ordem de envio.
O movimento reduzido está ativo: executar vai direto ao final, sem exibir tick a tick. Avançar continua andando um tick por vez.
Tick 0
Escolha um cenário ou edite os jobs e depois avance ou execute.
- a aguardando: ainda não enviado ou em backoff antes de uma nova tentativa
- f na fila: pronto, sem vaga livre
- E executando: ocupa uma vaga
- C concluído
- F falhou de vez
- X cancelado
O que observar
- agendamento
- Decidir qual job pronto recebe a próxima vaga livre. Aqui a regra é o primeiro a ficar pronto ser o primeiro atendido; em empate, vale o job listado antes.
- fila
- Um job pronto sem vaga fica na fila (f). A fila cresce quando o trabalho chega mais rápido do que as vagas se liberam.
- concorrência
- Mais vagas encurtam o tempo total só enquanto há trabalho para dividir. Duas vagas não terminam cinco jobs antes do mais longo deles.
- retries
- Uma tentativa que falhou pode ser repetida, até o máximo de retries. A primeira tentativa não conta como retry, então 2 retries permitem 3 tentativas.
- backoff
- Esperar antes de tentar de novo (a) dá tempo para uma dependência em dificuldade se recuperar. O fixed espera sempre o mesmo tempo; o exponential dobra. Sistemas reais costumam somar um jitter aleatório; este modelo não tem, para que toda execução se repita igual.
- timeouts
- O timeout interrompe uma tentativa que não terminou. Uma tentativa com a mesma duração do timeout ainda dá certo; com um tick a mais, não. Sem timeout, um job travado fica com a vaga até você reiniciar.
- tratamento de falhas
- Um erro encerra a tentativa; um hang nunca termina sozinho. Os dois podem ser repetidos; quando os retries acabam, o job falha de vez e a fila segue.
Limites
- É um modelo didático com relógio de números inteiros. Nenhum job real roda, nada é agendado em segundo plano e nada é guardado.
- Não é o Orbit. O Job do Orbit registra um máximo de retries e um timeout de execução, mas as notas de arquitetura dele deixam retries e workers fora do escopo inicial; não existe um agendador do Orbit para espelhar.
- Agendadores reais têm prioridades, agendas cron, persistência, falha de workers e deriva de relógio. Nada disso é modelado aqui.
- A simulação para depois de 120 ticks.
Fidelidade
Inspirado nas configurações de job da revisão 2967494 do Orbit (máximo de retries e timeout de execução). As notas de arquitetura do Orbit deixam retries e workers fora do escopo inicial, então nenhum comportamento do Orbit é reproduzido. O tempo é um relógio de números inteiros, nada roda em segundo plano e nada é guardado.