Oggi tutto il clamore è intorno ai framework di elaborazione distribuita in tempo reale, come Apache Hadoop, Apache Kafka o Apache Spark. Questi framework sono ben consolidati e una necessità se siete un’azienda come Facebook, Netflix o LinkedIn, ma non sono proprio a misura di sviluppatore – la curva di apprendimento è alta e gestire l’infrastruttura su cui girano non è un compito banale.
E, ammettiamolo – non lavoriamo tutti per un’azienda come quelle menzionate sopra – che elaborano terabyte di dati ogni giorno.
Spesso abbiamo solo bisogno di risolvere alcuni processi aziendali complessi con una quantità moderata di dati. Io stesso devo ancora incontrare il mio primo cliente che ha più di un terabyte di dati rilevanti all’interno dello stesso processo di business.
Quello che ho dovuto fare – già un paio di volte – è, fare alcuni calcoli veramente difficili su diversi gigabyte di dati. E per questo tipo di calcoli, non ho mai trovato il giusto framework Java che mi aiutasse a fare il lavoro in modo affidabile e con un codice pulito.
Sì, c’è Spring Batch (decisamente non il mio preferito) o Quartz, ma tutti questi framework ti fanno implementare interfacce personalizzate e aggiungono un sacco di overhead mentre io voglio solo eseguire alcuni compiti di lunga durata in background.
Così, presentando JobRunr.io!
JobRunr ti permette di creare lavori in background usando solo lambda di Java 8! Un esempio:
BackgroundJob.enqueue(() -> myService.doWork());
Questa linea di codice fa in modo che la lambda – incluso il tipo, il metodo e gli argomenti – sia serializzata in una memoria persistente (un RDBMS come Oracle, Postgres, MySql e MariaDB o un database NoSQL che sarà presto supportato). Un pool dedicato di threads eseguirà quindi questi lavori in background accodati il prima possibile.
Hai bisogno di programmare un lavoro in background domani? La prossima settimana? Il mese prossimo? JobRunr ti ha coperto:
BackgroundJob.schedule(() -> System.out.println("Reliable!"), now().plusHours(5));
Anche i lavori ricorrenti non sono mai stati così semplici – JobRunr permette di eseguire qualsiasi tipo di compito ricorrente usando le espressioni CRON.
BackgroundJob.scheduleRecurringly(() -> service.doWork(), Cron.daily());
I vantaggi:
- Facile: non c’è nessun nuovo framework da imparare – basta usare le tue competenze Java 8 esistenti.
- Semplice: dato che non hai bisogno di implementare interfacce speciali o estendere classi astratte, il tuo codice è quasi agnostico rispetto a JobRunr. Puoi riutilizzare i tuoi servizi esistenti senza alcun cambiamento.
- Tollerante ai guasti: Le cose brutte accadono – un servizio che usi può essere fuori uso, i dischi possono riempirsi, i certificati SSL scadono, … . Se JobRunr incontra un’eccezione, per default riprogrammerà il lavoro in background con una politica di back-off esponenziale. Se il lavoro in background continua a fallire dieci volte, andrà nello stato
Failed
. Puoi quindi decidere di rimettere in coda il lavoro fallito quando la causa principale è stata risolta. - Trasparente: JobRunr include un dashboard integrato che ti permette di monitorare i tuoi lavori. Ti dà una panoramica di tutti i tuoi lavori in background e puoi osservare lo stato di ogni lavoro in dettaglio.
- Distribuito: poiché il lambda o il lavoro in background è serializzato su uno storage persistente, il processo in background può viaggiare oltre i confini della JVM e questo permette un’elaborazione distribuita. Avete bisogno di elaborare 1.000.000 di lavori in background? Aggiungete temporaneamente altri server di lavoro in background – diciamo 10 – che possono elaborare questi lavori e il vostro tempo di elaborazione totale sarà diviso per quasi 10.
- Auto-manutenzione: non è necessario eseguire la pulizia manuale dello storage – JobRunr lo mantiene il più pulito possibile e rimuove automaticamente i lavori completati con successo.