Por padrão, cada aplicação SchedulerX suporta até 1.000 jobs. Quando a carga de trabalho exige dezenas de milhares de jobs periódicos agendados individualmente — cada um com seu próprio horário de acionamento — esse limite impede a implantação. O SchedulerX oferece Auto Scaling e um pool de contêineres compartilhado para eliminar o teto de 1.000 jobs sem sobrecarregar o agente.
Quando são necessários jobs periódicos individuais
No SchedulerX, cada job periódico é executado conforme sua própria programação. Jobs distribuídos MapReduce não substituem jobs periódicos individuais, pois todas as tarefas de um job MapReduce são executadas simultaneamente. Os cenários a seguir geralmente exigem de 10.000 a mais de 100.000 jobs independentes:
|
Cenário |
Motivo para usar jobs individuais |
Escala |
|
Controle de dispositivos IoT |
Cada interruptor de Internet das Coisas (IoT) liga ou desliga um dispositivo em horários diferentes, exigindo um job independente por interruptor. |
10.000–mais de 100.000 jobs |
|
Avaliação de regras de alerta |
Sistemas de monitoramento avaliam regras de alerta uma vez por minuto. Regras complexas demoram mais e podem bloquear o próximo ciclo de acionamento; um job independente por regra evita que regras lentas atrasem as demais. |
10.000–mais de 100.000 jobs |
|
Plataforma de agendamento corporativo |
Uma equipe constrói uma plataforma interna de agendamento sobre o SchedulerX e expõe uma API PoP para criação de jobs. Com o aumento da adoção, o total de jobs ultrapassa 100.000. |
Mais de 100.000 jobs |
Funcionamento do Auto Scaling e do pool de contêineres compartilhado
Dois mecanismos atuam em conjunto para suportar um alto volume de jobs:
Auto Scaling — Quando o número de jobs de uma aplicação atinge o limite superior de 1.000, o SchedulerX cria automaticamente uma subaplicação. Isso distribui os jobs entre várias aplicações lógicas, mantendo-as gerenciadas em conjunto, sem necessidade de gerenciamento manual das subaplicações.
Pool de contêineres compartilhado — Por padrão, cada acionamento de job aloca seu próprio pool de contêineres para execução. Com mais de 10.000 jobs, isso esgota rapidamente a memória e a CPU do agente, tornando-o inoperante. Ao ativar o pool de contêineres compartilhado, todos os jobs passam a utilizar um único pool, mantendo o consumo de recursos controlado independentemente da quantidade de jobs.
Without shared pool (default): With shared pool:
Job 1 trigger → Container pool 1 Job 1 trigger ─┐
Job 2 trigger → Container pool 2 Job 2 trigger ──┤
Job 3 trigger → Container pool 3 Job 3 trigger ──┼→ Shared container pool (size: 128)
... ... ... │
Job N trigger → Container pool N Job N trigger ─┘
→ Agent memory exhausted → Bounded resource usage
Ative o Auto Scaling e o pool de contêineres compartilhado
Este procedimento utiliza uma aplicação Spring Boot como exemplo. Para outros tipos de aplicação, consulte Quick start > Conectar um agente ao SchedulerX.
Etapa 1: Solicitar o Auto Scaling
O Auto Scaling não é um recurso de autoatendimento. Entre em contato com o suporte técnico do SchedulerX para ativá-lo em sua aplicação.
Após a ativação do Auto Scaling, o SchedulerX cria uma subaplicação sempre que a contagem de jobs de uma aplicação atingir 1.000.
Etapa 2: Verificar a versão do agente
Abra o arquivo pom.xml e confirme se a versão da dependência do agente SchedulerX é 1.2.1 ou posterior.
Versões do agente anteriores à 1.2.1 não suportam o pool de contêineres compartilhado. Caso utilize uma versão mais antiga, atualize o número da versão na declaração de dependência antes de prosseguir.
Etapa 3: Ativar o pool de contêineres compartilhado
Adicione as seguintes propriedades ao arquivo de configuração do Spring Boot (por exemplo, application.properties):
# Enable the shared container pool so all jobs reuse a single pool
spring.schedulerx2.shareContainerPool=true
# Set the size of the container pool
spring.schedulerx2.sharePoolSize=128
|
Propriedade |
Descrição |
|
|
Se definida como |
|
|
Define o tamanho do pool de contêineres compartilhado. O valor de exemplo é |
Sem o pool de contêineres compartilhado ativo, cada acionamento de job cria seu próprio pool. Com mais de 10.000 jobs, isso esgota rapidamente a memória e a CPU do agente, tornando-o inoperante.
Melhores práticas para produção
Ajustar o tamanho do pool
Comece com um tamanho de pool de 128, conforme o exemplo de configuração, e monitore o uso de CPU e memória do agente. Faça ajustes com base nas características dos seus jobs e no consumo de recursos.
Distribuir os agendamentos dos jobs
Evite concentrar os horários de acionamento no mesmo segundo. Quando milhares de jobs compartilham a mesma expressão CRON (por exemplo, 0 * * * * ? para cada minuto no segundo 0), todos disparam simultaneamente e geram picos de carga no agente.
Distribua as expressões CRON ao longo de segundos diferentes:
# Instead of all jobs at second 0:
0 * * * * ? # All 10,000 jobs fire at :00
# Spread across 60 seconds:
0 * * * * ? # Jobs 1-167 fire at :00
1 * * * * ? # Jobs 168-334 fire at :01
2 * * * * ? # Jobs 335-501 fire at :02
...
59 * * * * ? # Jobs 9834-10000 fire at :59
Essa abordagem distribui a carga de forma mais uniforme ao longo do tempo e reduz o pico de carga concorrente no agente.
Monitorar a criação de subaplicações
Verifique periodicamente o console do SchedulerX para confirmar se as subaplicações estão sendo criadas conforme esperado à medida que o número de jobs aumenta.
Tratar falhas na execução de jobs
Em cenários com alto volume de jobs, falhas individuais são esperadas. Projete seus jobs para serem idempotentes, evitando que novas tentativas gerem efeitos colaterais duplicados. Configure valores de timeout adequados para impedir que jobs lentos bloqueiem o pool de contêineres compartilhado.
Cotas e limites
|
Item |
Valor |
Observações |
|
Jobs por aplicação (antes do Auto Scaling) |
1.000 |
Utilize o Auto Scaling para ultrapassar este limite |
|
Versão mínima do agente para pool de contêineres compartilhado |
1.2.1 |
Versões anteriores não suportam este recurso |
|
Tamanho do pool de contêineres compartilhado (configuração de exemplo) |
128 |
Configurável pela propriedade |
Para ativar o Auto Scaling e aumentar o total de jobs além de 1.000, entre em contato com o suporte técnico do SchedulerX .