Aujourd’hui, tout le battage médiatique tourne autour des frameworks de traitement distribué en temps réel, comme Apache Hadoop, Apache Kafka ou Apache Spark. Ces cadres sont bien établis et une nécessité si vous êtes une entreprise comme Facebook, Netflix ou LinkedIn, mais ils ne sont pas vraiment conviviaux pour les développeurs – la courbe d’apprentissage est élevée et la gestion de l’infrastructure sur laquelle ils fonctionnent n’est pas une tâche triviale.
Et, soyons réalistes – nous ne travaillons pas tous pour une entreprise comme celles mentionnées ci-dessus – qui traitent des téraoctets de données chaque jour.
Souvent, nous avons juste besoin de résoudre certains processus d’affaires complexes avec une quantité modérée de données. Moi-même, je dois encore rencontrer mon premier client qui a plus d’un téraoctet de données pertinentes dans le même processus d’affaires.
Ce que j’ai dû faire – déjà quelques fois – est, faire des calculs vraiment difficiles sur plusieurs gigaoctets de données. Et pour ces types de calculs, je n’ai jamais trouvé le bon framework Java pour m’aider à faire le travail de manière fiable et dans un code propre.
Oui, il y a Spring Batch (définitivement pas mon préféré) ou Quartz, mais ces frameworks vous font tous implémenter des interfaces personnalisées et ils ajoutent beaucoup de surcharge alors que je veux juste exécuter quelques tâches de longue durée en arrière-plan.
Donc, présentation de JobRunr.io!
JobRunr vous permet de créer des tâches en arrière-plan en utilisant juste des lambdas de Java 8 ! Un exemple :
BackgroundJob.enqueue(() -> myService.doWork());
Cette seule ligne de code s’assure que le lambda – y compris le type, la méthode et les arguments – est sérialisé vers un stockage persistant (un SGBDR comme Oracle, Postgres, MySql et MariaDB ou une base de données NoSQL qui sera bientôt prise en charge). Un pool de threads dédié aux travailleurs exécutera ensuite ces travaux d’arrière-plan en file d’attente dès que possible.
Vous devez faire planifier un travail d’arrière-plan demain ? La semaine prochaine ? Le mois prochain ? JobRunr vous couvre :
BackgroundJob.schedule(() -> System.out.println("Reliable!"), now().plusHours(5));
Même les travaux récurrents n’ont jamais été aussi simples – JobRunr permet d’exécuter tout type de tâche récurrente en utilisant des expressions CRON.
BackgroundJob.scheduleRecurringly(() -> service.doWork(), Cron.daily());
Les avantages :
- Facile : il n’y a pas de nouveau framework à apprendre – utilisez simplement vos compétences Java 8 existantes.
- Simple : comme vous n’avez pas besoin de mettre en œuvre des interfaces spéciales ou d’étendre des classes abstraites, votre code est presque agnostique de JobRunr. Vous pouvez réutiliser vos services existants sans aucun changement.
- Tolérant aux pannes : Les mauvaises choses arrivent – un service que vous consommez peut être en panne, les disques peuvent être pleins, les certificats SSL expirent, … . Si JobRunr rencontre une exception, par défaut, il reprogrammera le travail d’arrière-plan avec une politique de recul exponentiel. Si le travail d’arrière-plan continue à échouer dix fois, il passera à l’état
Failed
. Vous pouvez alors décider de remettre en file d’attente le travail en échec lorsque la cause première a été résolue. - Transparent : JobRunr comprend un tableau de bord intégré qui vous permet de surveiller vos travaux. Il vous donne un aperçu de tous vos jobs d’arrière-plan et vous pouvez observer l’état de chaque job en détail.
- Distribué : comme le lambda ou le job d’arrière-plan est sérialisé vers un stockage persistant, le processus d’arrière-plan peut voyager au-delà des frontières de la JVM et cela permet un traitement distribué. Avez-vous besoin de traiter 1.000.000 de tâches d’arrière-plan ? Ajoutez temporairement des serveurs de tâches d’arrière-plan supplémentaires – disons 10 – qui peuvent traiter ces tâches et votre temps de traitement total sera divisé par presque 10.
- Auto-maintenable : vous n’avez pas besoin d’effectuer un nettoyage manuel du stockage – JobRunr le garde aussi propre que possible et supprime automatiquement les tâches terminées avec succès.