Tänä päivänä kaikki hype pyörii hajautettujen reaaliaikaisten käsittelykehysten ympärillä, kuten Apache Hadoop, Apache Kafka tai Apache Spark. Nämä kehykset ovat vakiintuneita ja välttämättömiä, jos olet Facebookin, Netflixin tai LinkedInin kaltainen yritys, mutta ne eivät ole varsinaisesti kehittäjäystävällisiä – oppimiskäyrä on korkea, eikä niiden käyttämän infrastruktuurin hallinta ole mikään triviaali tehtävä.
Ja myönnettäköön, ettemme kaikki työskentele edellä mainittujen kaltaisissa yrityksissä, jotka käsittelevät teratavuja dataa päivittäin.
Usein meidän on vain ratkaistava joitain monimutkaisia liiketoimintaprosesseja kohtuullisella datamäärällä. Itse joudun vielä tapaamaan ensimmäisen asiakkaani, jolla on yli yksi teratavu relevanttia dataa samassa liiketoimintaprosessissa.
Mitä jouduin tekemään – jo pari kertaa – on, tehdä joitakin todella vaikeita laskutoimituksia useilla gigatavuilla dataa. Tällaisia laskutoimituksia varten en koskaan löytänyt oikeaa Java-kehystä, joka olisi auttanut minua tekemään työn luotettavasti ja puhtaalla koodilla.
Joo, on olemassa Spring Batch (ei todellakaan suosikkini) tai Quartz, mutta nämä kehykset kaikki pakottavat sinut toteuttamaan mukautettuja rajapintoja ja ne lisäävät paljon yleiskustannuksia, kun taas haluan vain suorittaa joitain pitkäkestoisia tehtäviä taustalla.
Niin, esittelen JobRunr.io:n!
JobRunr:n avulla voit luoda taustatehtäviä pelkkiä Java 8:n lambdoja käyttäen! Esimerkki:
BackgroundJob.enqueue(() -> myService.doWork());
Tämä yksi koodirivi varmistaa, että lambda – mukaan lukien tyyppi, metodi ja argumentit – sarjallistetaan pysyvään tallennustilaan (RDBMS kuten Oracle, Postgres, MySql ja MariaDB tai NoSQL-tietokanta, jota tuetaan pian). Erillinen säikeistä koostuva työntekijäpooli suorittaa sitten nämä jonossa olevat taustatehtävät mahdollisimman pian.
Tarvitseeko sinun aikatauluttaa taustatehtävät huomenna? Ensi viikolla? Ensi kuussa? JobRunr huolehtii sinusta:
BackgroundJob.schedule(() -> System.out.println("Reliable!"), now().plusHours(5));
Kertautuvat työt eivät ole koskaan olleet yksinkertaisempia – JobRunr mahdollistaa kaikenlaisten toistuvien tehtävien suorittamisen CRON-lausekkeiden avulla.
BackgroundJob.scheduleRecurringly(() -> service.doWork(), Cron.daily());
Hyötyjä:
- Helppo: mitään uutta kehystä ei tarvitse opetella – käytä vain olemassa olevia Java 8 -taitojasi.
- Yksinkertainen: Koska sinun ei tarvitse toteuttaa erityisiä rajapintoja tai laajentaa abstrakteja luokkia, koodisi on lähes riippumaton JobRunrista. Voit käyttää olemassa olevia palvelujasi uudelleen ilman muutoksia.
- Vikasietoinen: Huonoja asioita tapahtuu – käyttämäsi palvelu voi olla alhaalla, levyt voivat täyttyä, SSL-varmenteet vanhentua, … . Jos JobRunr kohtaa poikkeuksen, se oletusarvoisesti aikatauluttaa taustatyön uudelleen eksponentiaalisella back-off-käytännöllä. Jos taustatyö epäonnistuu edelleen kymmenen kertaa, se siirtyy tilaan
Failed
. Voit sitten päättää asettaa epäonnistuneen työn uudelleen jonoon, kun perimmäinen syy on ratkaistu. - Läpinäkyvä: JobRunr sisältää sisäänrakennetun kojelaudan, jonka avulla voit seurata töitäsi. Sen avulla saat yleiskuvan kaikista taustatöistäsi ja voit tarkkailla kunkin työn tilaa yksityiskohtaisesti.
- Hajautettu: Koska lambda- tai taustatyö sarjallistetaan pysyvään tallennustilaan, taustaprosessi voi kulkea yli JVM-rajojen, mikä mahdollistaa hajautetun käsittelyn. Pitääkö sinun käsitellä 1.000.000 taustatehtävää? Lisää tilapäisesti ylimääräisiä taustatyöpalvelimia – sanotaan vaikka 10 – jotka voivat käsitellä näitä töitä, ja kokonaiskäsittelyaikasi jakautuu lähes 10:llä.
- Itsehuollettava: sinun ei tarvitse suorittaa manuaalista tallennustilan siivousta – JobRunr pitää sen mahdollisimman puhtaana ja poistaa onnistuneesti suoritetut työt automaattisesti.