3

Nous avons beaucoup de travaux par lots qui sont aujourd'hui programmés via des expressions cron dans une seule application. Nous aimerions isoler davantage ces travaux et donc les déplacer vers une tâche de cloud printanier.Ai-je besoin d'un processus JVM pour chaque tasktrigger de printemps?

Mais la lecture de la documentation [1], je viens à la conclusion que je dois utiliser un triggertask (source) qui envoie à son tour un TaskLaunchRequest à un tasklauncher (évier) pour enfin lancer le nouveau processus.

Ce moyen (si j'ai une seule tâche/lot) je besoin d'au moins les processus JVM suivants en cours d'exécution pour déclencher un nouveau processus:

  • serveur flux
  • triggertask (source)
  • tasklauncher (lavabo)

OK, le débit serveur et tasklauncher sera partagé pour toutes les tâches à venir, mais triggertask ne peut prendre la définition cron pour une seule tâche et a donc répliqué fo r toute définition de tâche à venir. Donc j'ai besoin d'au moins un "processus de nounou" pour chaque tâche?

vraiment ??? cela ressemble à une énorme surcharge ... De mon point de vue, je m'attendais à ce que la programmation de cron soit une fonctionnalité de base de la définition de tâche, donc la seule chose nécessaire serait le serveur de flux. Est-ce que je comprends bien ou est-ce que j'ai manqué quelque chose? Existe-t-il un moyen plus simple de le faire dans l'environnement des nuages ​​de printemps? J'aime vraiment l'idée d'avoir un serveur de flux démarrant de nouvelles machines virtuelles Java au besoin, mais tous ces processus supplémentaires semblent vraiment être la mauvaise approche.

Si cela devait fonctionner sur CloudFoundry e.g. http://run.pivotal.io alors cela signifie que j'ai un ordonnanceur cron pour un seul travail coûtant mes 35 $/Mth (car Java BuildPack 4.0 Processus JVM avec seulement 512 Mo ne démarrera plus [2]) - c'est une définition cron cher ...

[1] https://github.com/spring-cloud/spring-cloud-stream-app-starters/tree/master/triggertask/spring-cloud-starter-stream-source-triggertask [2] https://www.cloudfoundry.org/just-released-java-buildpack-4-0/

Répondre

3

TL; DR; Ne le faites pas et écrivez votre propre logique de planification ou intégrez l'API REST de Spring Cloud Data Flow à votre planificateur d'entreprise.

La version longue
Laissez-moi vous donner un peu d'histoire sur ce sujet et fournir ensuite mes réflexions sur ce qu'il faut faire. Lorsque le projet Spring Cloud Task a été démarré, nous avons voulu créer un certain nombre d'exemples d'applications illustrant l'utilisation des tâches dans de nombreux cas d'utilisation différents. La possibilité de lancer facilement une tâche en réaction à un message reçu était un cas d'utilisation que nous avons identifié pour créer un échantillon autour. Vous pouvez voir cet échantillon here et here. Lorsque le flux de données Spring Cloud (SCDF) est apparu, l'un des cas d'utilisation que nous voulions pouvoir traiter en comme était la planification des tâches. Le problème est que nous voulons que le serveur SCDF soit sans état (puisqu'il s'agit d'un microservice natif du cloud lui-même). Cela signifie que l'intégration d'un planificateur n'est pas une option. De là, nous avons estimé que l'intégration avec ce que chaque plate-forme a fourni pour la planification a eu le plus de sens. Cependant, il a également nécessité le plus de travail.Cette approche est en fait sur notre feuille de route, mais nous n'avons pas eu les commentaires des utilisateurs pour pousser cette fonction plus haut sur la liste.

La solution que nous avons adoptée pour répondre à cette exigence à plus court terme était ce que vous trouvez dans la documentation aujourd'hui. La réutilisation de ces exemples d'applications en combinaison avec une application trigger-task qui gère la pièce cron du puzzle pour lancer des tâches à un moment donné. Ma recommandation personnelle est que si vous n'avez pas de planificateur que vous utilisez déjà, écrivez une application de démarrage qui utilise Quartz ou un autre planificateur interne (Spring Scheduler, etc) pour appeler l'API SCDF pour lancer les tâches à un calendrier donné. Compte tenu du DataFlowTemplate disponible, écrire votre propre planificateur devrait être simple.

+0

merci beaucoup pour ces détails! Donc, si je comprends bien, à l'avenir, il y aura une intégration native du planificateur, dans notre cas de la CF de toute façon? Y a-t-il un problème que je peux suivre? – domi

+1

Bonjour, @Domi. Pour CF en particulier, il y a un MVP de CF-Scheduler dans les travaux qui aura la capacité de planifier et de lancer des tâches via les API REST de SCDF. L'idée est de définir le langage DSL dans SCDF et d'utiliser l'API REST dans CF-Scheduler pour le programmer pour une date/heure ou un cron. L'équipe de CF-Scheduler cible la version GA en août. Nous prévoyons également d'interagir directement avec le CF-Scheduler (via ses API et la liaison de service) de SCDF. Notre tableau de bord aura la possibilité de fournir des expressions date/heure et cron pour chaque tâche. –