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 runtime 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 runtime 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 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 runtime do próprio agente. No Paralelizar a seção fica, porque a etapa sempre dispara mais de um agente.

Como se configura

Runtime do próprio agente

O padrão. Todas as execuções da etapa vão para o runtime configurado no agente chamado, no ambiente dele (Desenvolvimento, Homologação ou Produção), o mesmo que ele usa quando é disparado por API ou por agendamento. Com Manter fluxo offline ligado na instalação, uma instalação desligada guarda as execuções na fila e roda quando voltar.

Distribuir entre runtimes

Você marca runtimes, e a máquina de cada um é a instalação que ele tem no ambiente do agente chamado. A opção só se deixa marcar com dois ou mais runtimes ligados nesse ambiente na hora em que você configura; com menos, ela aparece desabilitada e o painel diz quantos há. Marcada, aparece a lista dos runtimes que você alcança (com agente de outro dono, só os visíveis para toda a empresa), cada um com o nome e a situação da instalação daquele ambiente: online, com quantas execuções estão rodando e quantas na fila, offline · não recebe, suspensa pelo plano · não recebe (a instalação desse ambiente passou do limite do plano, veja Quantos runtimes o plano permite), ou sem instalação em e o ambiente, seguido de não recebe. Abaixo da lista, o painel lembra em qual instalação o agente roda, por exemplo Em cada um, o agente roda na instalação de Produção, o ambiente dele. Marque os que devem entrar na distribuição, até vinte. Um runtime offline não se deixa marcar.

Quais runtimes 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 runtime marcado que foi removido, ou que saiu do alcance do dono do agente chamado (deixou de ser visível para a empresa, ou é privado e, depois de Trocar agente, a etapa chama o agente de outro dono), aparece numa linha Runtime removido, marcada, com não recebe · desmarque e um aviso. No canvas, a etapa fica com a pendência agente "X": runtime marcado na distribuição não existe mais ou saiu do alcance do dono do agente. No disparo ele fica de fora e os outros recebem; desmarque a linha para tirar a pendência.

Em Meus Runtimes, remover ou deixar privado um runtime marcado na distribuição de uma etapa (na versão publicada de um agente que o alcança) é recusado, dizendo qual etapa desmarcar antes.

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. Um runtime sem instalação no ambiente do agente chamado também fica de fora, e o log o lista com o motivo sem instalação no ambiente do agente. Do mesmo modo ficam de fora o runtime cuja instalação nesse ambiente está suspensa pelo plano (motivo instalação suspensa pelo plano) e o runtime removido ou fora do alcance do dono do agente chamado (motivo runtime removido ou fora do alcance do dono do agente). Se nenhum runtime marcado tem instalação nesse ambiente, o disparo é recusado: Nenhum dos runtimes escolhidos tem instalação em Produção, o ambiente do agente seguido do nome do agente. Se nenhum pode receber por uma mistura desses motivos, o disparo é recusado (400) dizendo quais runtimes ficaram de fora e por quê, e pedindo para ajustar a distribuição na etapa.

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 runtime 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, sem instalação no ambiente do agente, instalação suspensa pelo plano, runtime removido ou fora do alcance do dono do agente, 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: Runtime 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 configurado na instalação 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 runtime, 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 aquele runtime (Runtimes e Ambientes).

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 runtime 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 runtime do próprio agente, que devolve a entrada ao runtime dele e resolve a pendência.

Um agente importado numa conta sem paralelismo chega com essas entradas já no runtime 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 Runtime 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 runtime dele. Uma etapa já marcada para distribuir vira pendência.Mudar de plano, ou Usar o runtime 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)Da instalação de cada runtime no ambiente do agente chamadoO 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 Runtime 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 Runtime 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.
Nenhum dos runtimes marcados tem instalação no ambiente do agente chamadoNada é disparado. A etapa falha dizendo Nenhum dos runtimes escolhidos tem instalação em e o ambiente, com o nome do agente. Marque runtimes com instalação nesse ambiente, ou dê a eles uma instalação em Meus Runtimes.
Um dos runtimes marcados foi removido, ou está fora do alcance do dono do agenteEle fica de fora e os outros recebem; o log do agente principal registra runtime removido ou fora do alcance do dono do agente. O painel mostra a linha Runtime removido e a etapa fica com pendência até ser desmarcada. Se nenhum dos marcados pode receber, nada é disparado e a etapa falha dizendo quais ficaram de fora e por quê.
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 runtime do próprio agente da seção travada, ou mude de plano.
Agente de outro dono marcado para rodar num runtime seu que não é visível para a empresaO painel não lista esse runtime entre os que se deixam marcar. Se ele já estava marcado (agente trocado por Trocar agente), aparece como Runtime removido e fica de fora do disparo, como na linha acima.
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, sem instalação no ambiente do agente, com a instalação suspensa pelo plano 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.