Par défaut, chaque application SchedulerX prend en charge jusqu'à 1 000 tâches. Lorsque votre charge de travail nécessite des dizaines de milliers de tâches planifiées individuelles, chacune avec sa propre heure de déclenchement, cette limite bloque le déploiement. SchedulerX propose la mise à l'échelle automatique et un pool de conteneurs partagé pour supprimer la limitation de 1 000 tâches sans surcharger l'agent.
Cas d'utilisation nécessitant des tâches planifiées individuelles
Chaque tâche planifiée dans SchedulerX s'exécute selon son propre calendrier. Les tâches distribuées MapReduce ne peuvent pas remplacer les tâches planifiées individuelles, car toutes les tâches au sein d'un job MapReduce s'exécutent simultanément. Les scénarios suivants nécessitent généralement entre 10 000 et plus de 100 000 tâches autonomes :
| Scénario | Pourquoi des tâches individuelles sont nécessaires | Échelle |
|---|---|---|
| Contrôle des appareils IoT | Chaque commutateur Internet des objets (IoT) allume ou éteint un appareil à un moment différent. Une tâche autonome par commutateur est requise. | 10 000 à plus de 100 000 tâches |
| Évaluation des règles d'alerte | Un système de surveillance évalue les règles d'alerte une fois par minute. Les règles complexes prennent plus de temps et peuvent bloquer le cycle de déclenchement suivant. Une tâche autonome par règle empêche les règles lentes de retarder les autres. | 10 000 à plus de 100 000 tâches |
| Plateforme de planification d'entreprise | Une équipe construit une plateforme de planification interne basée sur SchedulerX et expose une API PoP pour la création de tâches. À mesure que l'adoption augmente, le nombre total de tâches dépasse les 100 000. | Plus de 100 000 tâches |
Fonctionnement de la mise à l'échelle automatique et du pool de conteneurs partagé
Deux mécanismes fonctionnent conjointement pour prendre en charge un nombre élevé de tâches :
Mise à l'échelle automatique -- Lorsque le nombre de tâches d'une application atteint la limite supérieure de 1 000, SchedulerX crée automatiquement une sous-application. Cela permet de répartir les tâches sur plusieurs applications logiques tout en conservant une gestion centralisée. Vous n'avez pas besoin de gérer manuellement les sous-applications.
Pool de conteneurs partagé -- Par défaut, chaque déclenchement de tâche alloue son propre pool de conteneurs pour l'exécution. Avec plus de 10 000 tâches, cela épuise rapidement la mémoire et le CPU de l'agent, rendant ce dernier indisponible. L'activation du pool de conteneurs partagé permet à toutes les tâches de partager un seul pool, de sorte que la consommation de ressources reste maîtrisée quel que soit le nombre de tâches.
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
Activation de la mise à l'échelle automatique et du pool de conteneurs partagé
Cette procédure utilise une application Spring Boot à titre d'exemple. Pour les autres types d'applications, consultez Quick start > Connect an agent to SchedulerX.
Étape 1 : Demander l'activation de la mise à l'échelle automatique
La mise à l'échelle automatique n'est pas disponible en libre-service. Contactez le support technique SchedulerX pour l'activer pour votre application.
Une fois la mise à l'échelle automatique activée, SchedulerX crée une sous-application chaque fois que le nombre de tâches d'une application atteint 1 000.
Étape 2 : Vérifier la version de l'agent
Ouvrez votre fichier pom.xml et confirmez que la version de la dépendance de l'agent SchedulerX est 1.2.1 ou ultérieure.
Les versions de l'agent antérieures à la 1.2.1 ne prennent pas en charge le pool de conteneurs partagé. Si votre version est plus ancienne, mettez à jour le numéro de version dans votre déclaration de dépendance avant de poursuivre.
Étape 3 : Activer le pool de conteneurs partagé
Ajoutez les propriétés suivantes à votre fichier de configuration Spring Boot (par exemple, 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
| Propriété | Description |
|---|---|
spring.schedulerx2.shareContainerPool |
Lorsqu'elle est définie sur true, toutes les tâches partagent un seul pool de conteneurs au lieu que chaque tâche crée son propre pool. |
spring.schedulerx2.sharePoolSize |
Spécifie la taille du pool de conteneurs partagé. La valeur de l'exemple est 128. |
Sans l'activation du pool de conteneurs partagé, chaque déclenchement de tâche crée son propre pool. Avec plus de 10 000 tâches, cela épuise rapidement la mémoire et le CPU de l'agent, rendant ce dernier indisponible.
Bonnes pratiques pour la production
Ajuster la taille du pool
Commencez avec une taille de pool de 128 comme indiqué dans l'exemple de configuration et surveillez l'utilisation du CPU et de la mémoire de l'agent. Ajustez en fonction des caractéristiques de vos tâches et de leur consommation de ressources.
Décaler les horaires des tâches
Évitez de regrouper les heures de déclenchement autour de la même seconde. Lorsque des milliers de tâches partagent la même expression CRON (par exemple, 0 * * * * ? pour chaque minute à la seconde 0), elles se déclenchent toutes simultanément et créent une charge de pointe sur l'agent.
Répartissez les expressions CRON sur différentes secondes :
# 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
Cela permet de répartir la charge plus uniformément dans le temps et de réduire la charge concurrente de pointe sur l'agent.
Surveiller la création de sous-applications
Vérifiez régulièrement la console SchedulerX pour confirmer que les sous-applications sont créées comme prévu lorsque le nombre de tâches augmente.
Gérer les échecs d'exécution des tâches
Avec un nombre élevé de tâches, des échecs individuels sont attendus. Concevez vos tâches de manière idempotente afin que les nouvelles tentatives ne produisent pas d'effets secondaires dupliqués. Configurez des valeurs de délai d'attente appropriées pour empêcher les tâches lentes de bloquer le pool de conteneurs partagé.
Quotas et limites
| Élément | Valeur | Notes |
|---|---|---|
| Tâches par application (avant la mise à l'échelle automatique) | 1 000 | Utilisez la mise à l'échelle automatique pour dépasser cette limite |
| Version minimale de l'agent pour le pool de conteneurs partagé | 1.2.1 | Les versions antérieures ne prennent pas en charge cette fonctionnalité |
| Taille du pool de conteneurs partagé (exemple de configuration) | 128 | Configurable via la propriété sharePoolSize |
Pour activer la mise à l'échelle automatique et augmenter le nombre total de tâches au-delà de 1 000, contactez le support technique SchedulerX .