Dnes se všechen humbuk točí kolem distribuovaných frameworků pro zpracování v reálném čase, jako je Apache Hadoop, Apache Kafka nebo Apache Spark. Tyto frameworky jsou dobře zavedené a jsou nutností, pokud jste společnost jako Facebook, Netflix nebo LinkedIn, ale nejsou zrovna přívětivé pro vývojáře – křivka učení je vysoká a správa infrastruktury, na které běží, není triviální úkol.
A přiznejme si – ne všichni pracujeme pro společnosti, jako jsou výše zmíněné – které denně zpracovávají terabajty dat.
Často potřebujeme jen vyřešit nějaké složité obchodní procesy s mírným množstvím dat. Já sám se ještě musím setkat s prvním zákazníkem, který má v rámci jednoho obchodního procesu více než jeden terabajt relevantních dat.
Co jsem ale musel udělat – už několikrát – je, provést opravdu složité výpočty na několika gigabajtech dat. A pro tyto typy výpočtů jsem nikdy nenašel vhodný framework Javy, který by mi pomohl provést práci spolehlivě a v čistém kódu.
Ano, je tu Spring Batch (rozhodně ne můj oblíbený) nebo Quartz, ale všechny tyto frameworky vás nutí implementovat vlastní rozhraní a přidávají spoustu režie, zatímco já chci jen spouštět nějaké dlouhodobé úlohy na pozadí.
Takže představuji JobRunr.io!
JobRunr umožňuje vytvářet úlohy na pozadí jen pomocí lambda v Javě 8! Příklad:
BackgroundJob.enqueue(() -> myService.doWork());
Tento jediný řádek kódu zajistí, že lambda – včetně typu, metody a argumentů – bude serializována do trvalého úložiště (RDBMS jako Oracle, Postgres, MySql a MariaDB nebo databáze NoSQL, která bude brzy podporována). Vyhrazený pool pracovních vláken pak tyto úlohy na pozadí zařazené do fronty provede co nejdříve.
Potřebujete na zítra naplánovat úlohy na pozadí? Příští týden? Příští měsíc? JobRunr má pro vás řešení:
BackgroundJob.schedule(() -> System.out.println("Reliable!"), now().plusHours(5));
Také opakující se úlohy nebyly nikdy jednodušší – JobRunr umožňuje provádět jakýkoli druh opakující se úlohy pomocí výrazů CRON.
BackgroundJob.scheduleRecurringly(() -> service.doWork(), Cron.daily());
Výhody:
- Snadné: nemusíte se učit žádný nový framework – stačí použít vaše stávající znalosti jazyka Java 8.
- Jednoduché: protože nemusíte implementovat speciální rozhraní ani rozšiřovat abstraktní třídy, váš kód je téměř nezávislý na JobRunr. Můžete znovu použít své stávající služby beze změny.
- Odolné vůči poruchám: Špatné věci se stávají – služba, kterou spotřebováváte, může být mimo provoz, disky se mohou zaplnit, certifikáty SSL vyprší, … . Pokud JobRunr narazí na výjimku, ve výchozím nastavení přeplánuje úlohu na pozadí s exponenciální zásadou back-off. Pokud úloha na pozadí selže ještě desetkrát, přejde do stavu
Failed
. Poté se můžete rozhodnout, že neúspěšnou úlohu znovu zařadíte, až bude vyřešena hlavní příčina. - Transparentní: JobRunr obsahuje vestavěný řídicí panel, který umožňuje sledovat úlohy. Poskytuje vám přehled o všech vašich úlohách na pozadí a můžete podrobně sledovat stav každé úlohy.
- Distribuovaný: Vzhledem k tomu, že lambda nebo úloha na pozadí je serializována do trvalého úložiště, může proces na pozadí cestovat přes hranice JVM a to umožňuje distribuované zpracování. Potřebujete zpracovat 1 000 000 úloh na pozadí? Dočasně přidejte další servery úloh na pozadí – řekněme 10 – které mohou tyto úlohy zpracovávat, a váš celkový čas zpracování se vydělí téměř deseti.
- Samostatně udržovatelné: nemusíte provádět ruční čištění úložiště – JobRunr jej udržuje co nejčistší a úspěšně dokončené úlohy odstraňuje automaticky.