I dag er alt hype omkring de distribuerede realtidsbehandlingsrammer som Apache Hadoop, Apache Kafka eller Apache Spark. Disse frameworks er veletablerede og en nødvendighed, hvis du er en virksomhed som Facebook, Netflix eller LinkedIn, men de er ikke rigtig udviklervenlige – indlæringskurven er høj, og det er ikke en triviel opgave at administrere den infrastruktur, de kører på.
Og lad os se det i øjnene – vi arbejder ikke alle sammen for en virksomhed som de ovenfor nævnte – der behandler terabyte af data hver dag.
Ofte skal vi bare løse nogle komplekse forretningsprocesser med en moderat mængde data. Jeg mangler selv stadig at møde min første kunde, som har mere end en terabyte relevante data inden for den samme forretningsproces.
Hvad jeg dog har haft brug for at gøre – allerede et par gange – er at lave nogle virkelig vanskelige beregninger på flere gigabyte data. Og til disse typer beregninger fandt jeg aldrig den rette Java-ramme til at hjælpe mig med at få arbejdet udført pålideligt og i en ren kode.
Ja, der er Spring Batch (bestemt ikke min favorit) eller Quartz, men disse frameworks får dig alle til at implementere brugerdefinerede interfaces, og de tilføjer en masse overhead, mens jeg bare ønsker at køre nogle langvarige opgaver i baggrunden.
Så, præsentere JobRunr.io!
JobRunr giver dig mulighed for at oprette baggrundsjobs ved hjælp af bare Java 8 lambda’er! Et eksempel:
BackgroundJob.enqueue(() -> myService.doWork());
Denne ene kodelinje sørger for, at lambdaen – inklusive type, metode og argumenter – serialiseres til persistent lagring (en RDBMS som Oracle, Postgres, MySql og MariaDB eller en NoSQL-database, som snart vil blive understøttet). En dedikeret arbejderpulje af tråde vil derefter udføre disse baggrundsjobs i køen så hurtigt som muligt.
Har du brug for at planlægge et baggrundsjob i morgen? I næste uge? Næste måned? JobRunr har dig dækket:
BackgroundJob.schedule(() -> System.out.println("Reliable!"), now().plusHours(5));
Selv tilbagevendende job har aldrig været nemmere – JobRunr gør det muligt at udføre enhver form for tilbagevendende opgave ved hjælp af CRON-udtryk.
BackgroundJob.scheduleRecurringly(() -> service.doWork(), Cron.daily());
Fordelene:
- Nemt: Der er ingen ny ramme at lære – du skal bare bruge dine eksisterende Java 8-færdigheder.
- Enkel: Da du ikke behøver at implementere særlige grænseflader eller udvide abstrakte klasser, er din kode næsten agnostisk i forhold til JobRunr. Du kan genbruge dine eksisterende tjenester uden ændringer.
- Fejltolerant: Der kan ske dårlige ting – en tjeneste, du bruger, kan være nede, diskene kan blive fulde, SSL-certifikater udløber, … . Hvis JobRunr støder på en undtagelse, vil den som standard omplanlægge baggrundsjobbet med en eksponentiel back-off-politik. Hvis baggrundsjobbet fortsætter med at mislykkes ti gange, vil det gå til
Failed
-tilstand. Du kan derefter beslutte at sætte det fejlslagne job i kø igen, når den grundlæggende årsag er blevet løst.
- Gennemsigtig: JobRunr indeholder et indbygget dashboard, som giver dig mulighed for at overvåge dine job. Det giver dig et overblik over alle dine baggrundsjobs, og du kan observere tilstanden for hvert job i detaljer.
- Distribueret: Da lambda- eller baggrundsjobbet serialiseres til persistent lagring, kan baggrundsprocessen rejse over JVM-grænser, og dette muliggør distribueret behandling. Har du brug for at behandle 1.000.000.000 baggrundsjobs? Tilføj midlertidigt ekstra baggrundsjobservere – lad os sige 10 – som kan behandle disse job, og din samlede behandlingstid vil blive divideret med næsten 10.
- Selvvedligeholdelse: Du behøver ikke at foretage manuel oprydning af lageret – JobRunr holder det så rent som muligt og fjerner succesfuldt afsluttede job automatisk.