Dzisiaj cały szum jest wokół frameworków rozproszonego przetwarzania w czasie rzeczywistym, takich jak Apache Hadoop, Apache Kafka czy Apache Spark. Te frameworki mają ugruntowaną pozycję i są niezbędne, jeśli jesteś firmą taką jak Facebook, Netflix lub LinkedIn, ale nie są one naprawdę przyjazne dla deweloperów – krzywa uczenia się jest wysoka, a zarządzanie infrastrukturą, na której działają, nie jest trywialnym zadaniem.
I spójrzmy prawdzie w oczy – nie wszyscy pracujemy dla firm takich jak te wymienione powyżej, które przetwarzają terabajty danych każdego dnia.
Często po prostu musimy rozwiązać niektóre złożone procesy biznesowe z umiarkowaną ilością danych. Ja sam wciąż muszę spotkać się z moim pierwszym klientem, który ma więcej niż jeden terabajt odpowiednich danych w ramach tego samego procesu biznesowego.
To, co musiałem zrobić – już kilka razy – to wykonać kilka naprawdę trudnych obliczeń na kilku gigabajtach danych. I dla tego typu obliczeń, nigdy nie znalazłem odpowiedniego frameworka Java, który pomógłby mi wykonać zadanie w sposób niezawodny i w czystym kodzie.
Tak, jest Spring Batch (zdecydowanie nie mój ulubiony) lub Quartz, ale te wszystkie frameworki zmuszają cię do implementacji niestandardowych interfejsów i dodają wiele kosztów ogólnych, podczas gdy ja chcę po prostu uruchomić niektóre długo trwające zadania w tle.
Więc, prezentując JobRunr.io!
JobRunr pozwala ci tworzyć zadania w tle używając tylko lambda w Javie 8! Przykład:
BackgroundJob.enqueue(() -> myService.doWork());
Ta jedna linia kodu upewnia się, że lambda – w tym typ, metoda i argumenty – jest serializowana do trwałej pamięci masowej (RDBMS jak Oracle, Postgres, MySql i MariaDB lub bazy danych NoSQL, która będzie obsługiwana wkrótce). Dedykowana pula wątków robotniczych wykona te kolejkowane zadania w tle tak szybko, jak to możliwe.
Czy musisz zaplanować zadania w tle na jutro? W przyszłym tygodniu? W następnym miesiącu? JobRunr ma dla ciebie pokrycie:
BackgroundJob.schedule(() -> System.out.println("Reliable!"), now().plusHours(5));
Nawet zadania rekurencyjne nigdy nie były prostsze – JobRunr pozwala na wykonywanie dowolnego rodzaju zadań rekurencyjnych używając wyrażeń CRON.
BackgroundJob.scheduleRecurringly(() -> service.doWork(), Cron.daily());
Zalety:
- Łatwe: nie ma nowego frameworka do nauki – po prostu użyj swoich istniejących umiejętności Java 8.
- Prosty: ponieważ nie musisz implementować specjalnych interfejsów ani rozszerzać klas abstrakcyjnych, twój kod jest prawie niezależny od JobRunr. Możesz ponownie wykorzystać istniejące usługi bez żadnych zmian.
- Odporny na błędy: Złe rzeczy się zdarzają – usługa, którą zużywasz, może być wyłączona, dyski mogą się zapełnić, certyfikaty SSL wygasają, … . Jeśli JobRunr napotka wyjątek, domyślnie zmieni harmonogram zadania w tle z wykładniczą polityką back-off. Jeśli zadanie w tle nie powiedzie się dziesięć razy, przejdzie do stanu
Failed
. Można wtedy zdecydować o ponownym umieszczeniu nieudanego zadania w kolejce, gdy podstawowa przyczyna została rozwiązana. - Przejrzysty: JobRunr zawiera wbudowany pulpit nawigacyjny, który pozwala monitorować twoje zadania. Daje on przegląd wszystkich zadań w tle i można obserwować stan każdego zadania w szczegółach.
- Rozproszony: jako lambda lub zadanie tła jest serializowane do trwałego przechowywania, proces tła może podróżować przez granice JVM, a to pozwala na przetwarzanie rozproszone. Czy potrzebujesz przetworzyć 1.000.000 zadań w tle? Tymczasowo dodaj dodatkowe serwery zadań w tle – powiedzmy 10 – które mogą przetwarzać te zadania, a całkowity czas przetwarzania będzie podzielony przez prawie 10.
- Samonaprawialne: nie musisz wykonywać ręcznego czyszczenia pamięci masowej – JobRunr utrzymuje ją tak czystą, jak to możliwe i automatycznie usuwa pomyślnie zakończone zadania.