Astăzi toată agitația este în jurul cadrelor de procesare distribuită în timp real, cum ar fi Apache Hadoop, Apache Kafka sau Apache Spark. Aceste cadre sunt bine stabilite și reprezintă o necesitate dacă sunteți o companie precum Facebook, Netflix sau LinkedIn, dar nu sunt cu adevărat prietenoase cu dezvoltatorii – curba de învățare este mare, iar gestionarea infrastructurii pe care rulează nu este o sarcină banală.
Și, să recunoaștem – nu lucrăm cu toții pentru o companie precum cele menționate mai sus – care procesează terabyte de date în fiecare zi.
De multe ori avem nevoie doar să rezolvăm unele procese de afaceri complexe cu o cantitate moderată de date. Eu însumi încă trebuie să mă întâlnesc cu primul meu client care are mai mult de un terabyte de date relevante în cadrul aceluiași proces de afaceri.
Ceea ce a trebuit să fac – deja de câteva ori – este, să fac niște calcule foarte dificile pe mai mulți gigabyte de date. Iar pentru aceste tipuri de calcule, nu am găsit niciodată cadrul Java potrivit care să mă ajute să fac treaba în mod fiabil și cu un cod curat.
Da, există Spring Batch (cu siguranță nu este preferatul meu) sau Quartz, dar toate aceste framework-uri te obligă să implementezi interfețe personalizate și adaugă o mulțime de costuri suplimentare în timp ce eu vreau doar să execut niște sarcini de lungă durată în fundal.
Așa că, vă prezint JobRunr.io!
JobRunr vă permite să creați sarcini în fundal folosind doar lambda-uri Java 8! Un exemplu:
BackgroundJob.enqueue(() -> myService.doWork());
Acest singur rând de cod se asigură că lambda – inclusiv tipul, metoda și argumentele – este serializat în memoria persistentă (o bază de date RDBMS precum Oracle, Postgres, MySql și MariaDB sau o bază de date NoSQL care va fi susținută în curând). Un grup de fire de lucru dedicat va executa apoi aceste lucrări de fundal puse la coadă cât mai curând posibil.
Trebuie să programați mâine o lucrare de fundal? Săptămâna viitoare? Luna viitoare? JobRunr vă acoperă:
BackgroundJob.schedule(() -> System.out.println("Reliable!"), now().plusHours(5));
Inclusiv joburile recurente nu au fost niciodată mai simple – JobRunr permite realizarea oricărui tip de sarcină recurentă folosind expresii CRON.
BackgroundJob.scheduleRecurringly(() -> service.doWork(), Cron.daily());
Beneficii:
- Ușor: nu este nevoie să învățați un nou framework – folosiți doar abilitățile Java 8 existente.
- Simplu: deoarece nu trebuie să implementați interfețe speciale sau să extindeți clasele abstracte, codul dvs. este aproape agnostic față de JobRunr. Puteți reutiliza serviciile dvs. existente fără nicio modificare.
- Tolerant la erori: Lucrurile rele se întâmplă – un serviciu pe care îl consumați poate fi oprit, discurile se pot umple, certificatele SSL expiră, … . Dacă JobRunr întâlnește o excepție, în mod implicit va reprograma activitatea de fundal cu o politică de retragere exponențială. Dacă sarcina de fundal continuă să eșueze de zece ori, aceasta va trece în starea
Failed
. Puteți decide apoi să reintroduceți în lista de așteptare jobul eșuat atunci când cauza principală a fost rezolvată. - Transparent: JobRunr include un tablou de bord încorporat care vă permite să vă monitorizați lucrările. Acesta vă oferă o imagine de ansamblu a tuturor joburilor dvs. de fundal și puteți observa în detaliu starea fiecărui job.
- Distribuit: deoarece jobul lambda sau de fundal este serializat în memoria persistentă, procesul de fundal poate călători peste granițele JVM și acest lucru permite procesarea distribuită. Aveți nevoie să procesați 1.000.000 de joburi de fundal? Adăugați temporar servere suplimentare de joburi de fundal – să zicem 10 – care pot procesa aceste joburi și timpul total de procesare va fi împărțit la aproape 10.
- Auto-întreținute: nu trebuie să efectuați curățarea manuală a memoriei – JobRunr o menține cât mai curată posibil și elimină automat joburile finalizate cu succes.