v2.0

Balancear Carga dos Agentes

A seção Distribuição do processamento das etapas de agentes: quando uma etapa dispara muitas execuções de uma vez, distribui as execuções entre vários runtimes em vez de enviar todas ao ambiente do agente.

Em resumo

Para que serve

Cada execução de um agente que usa navegador abre o seu próprio navegador no runtime. Uma etapa que dispara por item de uma lista de duzentos pedidos abre duzentas execuções ao mesmo tempo, e um Paralelizar Agentes com quatro agentes, um deles por item, faz a mesma coisa somando tudo. Deixadas no ambiente do agente, elas caem todas na mesma máquina.

Há duas formas de limitar um lote, e elas se combinam: repartir entre máquinas (Distribuir entre runtimes, nesta página) e soltar a lista aos poucos, com uma quantidade específica por vez (seção Modo de enfileiramento do disparo). Detalhes do modo de enfileiramento: Enfileirar Agentes. O teto de execuções ao mesmo tempo de cada máquina (Enfileirar Jobs) continua valendo em cada runtime da distribuição. Detalhes: O que a fila do runtime muda.

Os runtimes marcados precisam ser equivalentes: mesmo sistema operacional, mesmo alcance de rede aos sistemas que o agente usa, as mesmas coisas instaladas. A escolha é por carga, então qualquer execução pode cair em qualquer um deles.

É a etapa que distribui, não o agente

O agente chamado continua com o seu Ambiente Runtime de sempre, para as execuções por API, agendamento e webhook. A distribuição vale só para as execuções disparadas por esta etapa, e cada etapa (e cada agente dentro de um Paralelizar) faz a sua própria escolha.

Onde a seção aparece

A seção Distribuição do processamento entra no painel da etapa quando há mais de uma execução para disparar de uma vez:

Seção Distribuição do processamento do painel da etapa, com Distribuir entre runtimes marcado e três runtimes na lista, cada um com a situação online e as execuções rodando e na fila
A seção Distribuição do processamento com Distribuir entre runtimes marcado: cada runtime da lista mostra se está online e quantas execuções tem rodando e na fila.

Desligar a repetição por item numa etapa Chamar Agente tira a seção do painel e a etapa volta a rodar no ambiente do próprio agente. No Paralelizar a seção fica, porque a etapa sempre dispara mais de um agente.

Como se configura

Ambiente do próprio agente

O padrão. Todas as execuções da etapa vão para o Ambiente Runtime configurado no agente chamado, o mesmo que ele usa quando é disparado por API ou por agendamento. Com Manter fluxo offline ligado nesse ambiente, um runtime desligado guarda as execuções na fila e roda quando voltar.

Distribuir entre runtimes

A opção só se deixa marcar com dois ou mais runtimes ligados na hora em que você configura; com menos, ela aparece desabilitada e o painel diz quantos há. Marcada, aparece a lista dos ambientes que o dono do agente chamado alcança, cada um com o nome e a situação: online, com quantas execuções estão rodando e quantas na fila, ou offline · não recebe. Marque os que devem entrar na distribuição, até vinte. Um ambiente offline não se deixa marcar.

Quais ambientes entram na lista:

Marcar é escolher o conjunto; quem decide a máquina de cada execução é a carga no momento do disparo, descrita a seguir.

Onde se altera depois

No mesmo painel. A lista mostra a situação dos runtimes no momento em que o painel é aberto; a distribuição em si usa a carga do momento do disparo. Um ambiente que você marcou e depois apagou faz a etapa falhar ao disparar, com a mensagem de que um dos runtimes escolhidos não existe mais: abra o painel e refaça a lista.

Como a carga é medida e repartida

No disparo, o sistema lê uma vez a carga de cada runtime marcado: as execuções que estão rodando nele mais as que esperam na fila dele. Só os runtimes ligados entram na conta; os desligados são deixados de fora, mesmo com Manter fluxo offline.

Depois, execução por execução, cada uma vai para o runtime com a menor carga naquele momento da conta, já somando as execuções que esta mesma etapa lhe entregou. O efeito é que o lote se espalha na proporção da folga: um runtime vazio recebe mais, um já ocupado recebe menos, e um empate segue a ordem da lista.

Situação no disparo30 execuções são repartidas assim
Runtime A vazio, Runtime B vazio15 para A, 15 para B, alternando.
Runtime A com 10 execuções (rodando ou na fila), Runtime B vazioAs 10 primeiras vão todas para B, até ele empatar com A. As 20 restantes alternam: no fim, A recebe 10 e B recebe 20.
Runtime A com 10, Runtime B com 10, Runtime C desligadoC não entra. 15 para A, 15 para B.
Todos os marcados desligadosNada é disparado. A etapa falha dizendo que nenhum dos runtimes escolhidos está ligado.

A decisão é feita no disparo e não muda depois: uma execução entregue a um runtime fica com ele. O log do pai diz quantas execuções foram para cada runtime, pelo nome, e cada uma aparece no Control Room no ambiente que a recebeu.

A fila entra na conta de carga: um runtime com muitas execuções normais esperando em Enfileirar Jobs já está comprometido, mesmo que só uma esteja rodando, e por isso recebe menos.

Quando um runtime da distribuição está fora do ar

A distribuição só entrega a quem está ligado no momento do disparo, e desligado não recebe, mesmo com Manter fluxo offline. Com três runtimes marcados:

No disparoO que acontece
1 dos 3 está fora do arOs dois ligados recebem o lote inteiro, repartido pela carga de cada um. O que está fora não recebe nada, e ninguém espera por ele.
2 dos 3 estão fora do arO único ligado recebe o lote inteiro. Ele passa a ser o limite: com teto de execuções ao mesmo tempo, o resto espera na fila dele.
3 dos 3 estão fora do arNada é disparado. A etapa falha dizendo que nenhum dos runtimes escolhidos está ligado, e entra na Gestão de Erros.
Um deles cai depois de receber a parte deleAs execuções que já rodavam nele param onde estavam. As que esperavam na fila dele passam, depois de 2 minutos sem o runtime, para o runtime ligado menos carregado da mesma distribuição e rodam lá; o agente principal recebe o retorno delas como o de qualquer outra. Ficam na fila do runtime que caiu, até ele voltar, as que levam parâmetro Secreto (o valor vai cifrado para aquela máquina, e só ela o abre) e as de uma distribuição sem outro runtime ligado; para essas vale Quando o runtime do agente chamado sai do ar.

Com isso, o que ainda não tinha começado não fica parado à espera da máquina que caiu. A troca acontece uma vez por execução, sai da fila de origem antes de entrar na outra, e a execução roda uma vez só.

O log do agente principal diz quais runtimes escolhidos ficaram de fora do disparo e por quê (desligado, ou desatualizado para rodar um agente chamado) e para onde as execuções foram. Com a lista saindo aos poucos, a linha se repete só quando esse conjunto muda, e outra linha avisa quando todos voltam a receber.

Com a lista saindo uma quantidade específica por vez (Enfileirar Agentes), a distribuição é refeita a cada leva: um runtime que caiu no meio da lista deixa de receber as levas seguintes, e um que voltou passa a receber.

Para um agente que não pode parar quando todos os runtimes da distribuição caem, a saída é não depender da distribuição: Ambiente do próprio agente com Manter fluxo offline ligado guarda as execuções até o runtime voltar. A Gestão de Erros da etapa, com nova tentativa, cobre a queda passageira nos dois casos.

O que a fila do runtime muda

Distribuir funciona com ou sem Enfileirar Jobs nos runtimes marcados. Sem ele, cada runtime começa na hora tudo o que recebe, e cada execução que usa navegador abre o seu: um lote de 300 itens, todos ao mesmo tempo, repartido entre 3 runtimes, são cerca de 100 execuções simultâneas em cada máquina.

Cada runtime da distribuição aplica o teto dele. Um runtime com Enfileirar Jobs ligado recebe a parte dele do lote, começa até o número de execuções ao mesmo tempo do cadastro e deixa o resto esperando na fila, com o agente chamado na frente das execuções de sempre. O log do chamador diz "iniciada" quando o Router entregou a execução; ela pode estar esperando vaga na máquina. Detalhes: Paralelizar Agentes → Runtime em modo fila.

A carga que a distribuição lê já inclui o que espera na fila de cada runtime, então uma máquina com teto baixo e fila cheia recebe menos. Quem limita quantas execuções da etapa caem numa mesma máquina são três coisas que se somam: o teto do ambiente, o teto do próprio agente chamado (Execuções ao mesmo tempo, aplicado por máquina) e a seção Modo de enfileiramento do disparo (Enfileirar Agentes). O teto da etapa (5000 execuções somando todos os agentes dela) é de sanidade, não de proteção.

Quando ligar Enfileirar Jobs nos runtimes da distribuição

Quando a preocupação é só com o agente chamado (o sistema que ele acessa aceita poucos acessos, ou poucas cópias dele cabem numa máquina), o teto do agente basta: ele vale em cada runtime mesmo sem Enfileirar Jobs. Quando é com o tamanho da lista, use a quantidade específica por vez. Mudar Enfileirar Jobs ou o número de execuções ao mesmo tempo só vale depois de reiniciar o runtime daquele ambiente (Ambientes Runtime).

Créditos

Distribuir não muda o preço: cada execução do agente chamado consome 1 crédito da empresa dona dele, além do crédito do pai. Antes de disparar, o sistema confere o saldo para todas as execuções da etapa, somando todos os agentes e todos os itens; se ele não cobrir, nenhuma é disparada e a etapa falha dizendo quantos créditos faltam.

Planos

Distribuir entre runtimes existe a partir do plano Professional. Nos planos sem paralelismo, a seção Distribuição do processamento aparece do mesmo jeito, com a opção travada e o botão Conhecer planos: o agente roda no ambiente dele.

O plano conferido é o da empresa dona do agente chamado, e ele é conferido de novo a cada disparo. Uma etapa marcada para distribuir numa conta cujo plano não comporta a distribuição (o plano mudou depois que a etapa foi configurada) vira pendência no fluxo, e o disparo é recusado com a mensagem do plano. No painel da etapa, a seção travada mostra o botão Usar o ambiente do próprio agente, que devolve a entrada ao ambiente dele e resolve a pendência.

Um agente importado numa conta sem paralelismo chega com essas entradas já no ambiente do próprio agente. Detalhes: Importar e Exportar Agentes.

Limites e tetos

LimiteValorO que acontece ao passarContorno
Runtimes marcados numa distribuição20Só os vinte primeiros marcados contam.Reparta o lote em mais de um agendamento.
Runtimes ligados para distribuirPelo menos 2Com menos, a opção não se deixa marcar e o disparo é recusado.Use Ambiente do próprio agente até o segundo runtime subir.
PlanoA partir do ProfessionalA opção aparece travada, com o convite ao upgrade; o agente roda no ambiente dele. Uma etapa já marcada para distribuir vira pendência.Mudar de plano, ou Usar o ambiente do próprio agente (botão da seção travada) e limitar o lote com uma quantidade específica por vez.
Runtime sem Enfileirar JobsSem tetoO runtime começa na hora tudo o que recebe, e cada execução que usa navegador abre o seu. A máquina é o limite.Ligue Enfileirar Jobs com um número que a máquina aguente, ou limite o agente pelo teto dele.
Teto de cada runtime (Enfileirar Jobs com número)Do cadastro de cada ambienteO que não cabe espera na fila daquela máquina.Marque mais máquinas, ou suba o teto onde a máquina aguenta.
Teto do agente chamado (Execuções ao mesmo tempo)Por máquinaCada runtime aplica o teto na dele: com 1 e três runtimes, podem rodar três, uma em cada.Se o sistema de destino não aceita nem isso, use Ambiente do próprio agente (uma máquina só).
Execuções por etapa5000Nada é disparado; a etapa falha dizendo quantas dispararia.Fatie a lista.
Execução na fila de um runtime que desligou2 minutosPassa para o runtime ligado menos carregado da mesma distribuição.A que leva parâmetro Secreto fica no runtime de origem: mantenha os runtimes da distribuição ligados, ou use Ambiente do próprio agente com Manter fluxo offline.

Quando algo dá errado

SituaçãoO que acontece
Menos de dois runtimes marcados na distribuiçãoO disparo é recusado: para distribuir, informe 2 ou mais runtimes. A etapa falha e entra na Gestão de Erros.
Nenhum dos runtimes marcados está ligadoNada é disparado. A etapa falha dizendo que nenhum dos runtimes escolhidos está ligado. Manter fluxo offline não vale para a distribuição.
Um dos runtimes marcados foi apagado, ou está fora do alcance do dono do agenteNada é disparado. A etapa falha dizendo que um dos runtimes escolhidos não existe ou está fora do alcance do dono. Refaça a lista no painel.
O plano da empresa dona do agente não comporta a distribuiçãoA etapa aparece como pendência no fluxo, e o disparo é recusado com a mensagem do plano Professional. No painel, use o botão Usar o ambiente do próprio agente da seção travada, ou mude de plano.
Agente de outro dono marcado para rodar num ambiente privado seuO painel não lista esse ambiente. Se a etapa foi importada ou editada de outro jeito, o disparo é recusado por ambiente fora do alcance do dono.
Créditos insuficientes para o lote inteiroNada é disparado, em nenhum runtime. A etapa falha dizendo quantos créditos a etapa precisa e quantos a empresa tem.
Um ou mais runtimes marcados estão desligados ou desatualizados no disparoO lote vai para os ligados. O log do agente principal diz quem ficou de fora, por quê e para onde as execuções foram.
Um runtime cai depois de receber a parte deleAs que rodavam nele param onde estavam. As que esperavam na fila dele passam, em 2 minutos, para o runtime ligado menos carregado da distribuição; as que levam parâmetro Secreto ficam nele, e o pai que espera recebe a falha delas quando a plataforma desiste (30 minutos sem o runtime), ou o prazo dele acaba antes. Com uma quantidade específica por vez, as levas seguintes vão para os runtimes ligados. Veja Quando um runtime da distribuição está fora do ar.