Pular para o conteúdo
Hora local do proprietário em SP:
EXPERIMENTO 004 · orbit

simulador de agendamento

filas, vagas, retries e timeouts em um relógio determinístico

ativosimuladocriado em orbit 2967494código-fonte ↗

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

bancada · simulada neste navegador
Cenários

Três jobs, uma vaga. Veja a fila esvaziar na ordem de envio.

Configuração
Job job-1
Job job-2
Job job-3
Execução

Tick 0

Escolha um cenário ou edite os jobs e depois avance ou execute.

Linha do tempo
  • 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
Jobs
Registro de eventos

    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

    modelosimulação didática · relógio de inteiros
    orbitapenas as configurações de job · ainda não há agendador
    trabalho em segundo plano, persistêncianenhum · recarregar a página recomeça do zero
    aleatoriedadenenhuma · toda execução se repete

    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.

    Relacionados

    estados de execuçãolab · 002notas de arquitetura do Orbit — em inglêsgithub ↗código-fonte do Orbitgithub ↗