Todos os produtos
Search
Central de documentação

Microservices Engine:Scale a SchedulerX application to 100,000+ periodic jobs

Última atualização: Jun 28, 2026

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.

Importante

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

spring.schedulerx2.shareContainerPool

Se definida como true, todos os jobs compartilham um único pool de contêineres em vez de criar pools individuais.

spring.schedulerx2.sharePoolSize

Define o tamanho do pool de contêineres compartilhado. O valor de exemplo é 128.

Importante

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 sharePoolSize

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 .

Tópicos relacionados