2012-11-24 12 views
16

Potrzebuję menedżera kolejek zadań, który mogę kontrolować przez Internet. Powinien być w stanie wykonywać i zatrzymywać procesy, sprawdzać ich status (najlepiej zauważyć i wykonać kod po wyjściu z procesu), reagować na polecenia, a także być w stanie raportować z powrotem do serwera.Menedżer kolejek zadań z interfejsem RPC

Tło: Mam aplikację GWT, która umożliwia tworzenie zadań do wykonania w instancji chmury (obecnie EC2). Chcę przesłać "pakiet zadań" (dane dotyczące procesu do działania na itp.) Do S3, uruchomić instancję EC2 systemu Linux (lub użyć już uruchomionego) i powiadomić menedżera zadań o instancji, aby wykonał to zadanie (ewentualnie równolegle do innych zadań). Powinien następnie pobrać "pakiet zadań" z S3, uruchomić proces, który działa na tych danych i złożyć raport na serwerze, który działa na serwerze części mojej aplikacji GWT z pewnymi informacjami (np. Kod wyjścia, standardowe wyjście, stderr). Jeśli muszę napisać np. stdour/err do pliku z procesu i odczytaj ten plik, to też jest OK.

Bardzo chciałbym, aby menedżer był "blisko" procesów, które uruchamia, co oznacza, że ​​chcę uniknąć używania czegoś takiego jak Runtime.exec z JDK. Wygląda na to, że musiałbym to zrobić, gdybym na przykład użył Quartz.

Nie przeszkadza mi to, że połączenia w obu kierunkach są asynchroniczne. Nie mam żadnej rozsądnej technologii dla połączeń, o ile mogę łatwo zbudować interfejs dla tego po stronie mojego serwera GWT (np. Żądania HTTP do serwletu za pośrednictwem protokołu SSL byłyby ładne i banalne).

Menedżer zadań nie musi mieć bardzo wyrafinowanego systemu kolejkowania. Uruchamianie kilku procesów sekwencyjnie lub równolegle powinno być w porządku. Określanie, ile czasu obliczeń proces otrzymany w trakcie jego trwania byłby przyjemny (AFAIK, może to być trudne).

Nie znalazłem jeszcze żadnego oprogramowania, które to robi, w tym http://java-source.net/open-source/job-schedulers. Podejrzewam, że być może będę musiał zbudować interfejs RPC (z uwierzytelnianiem itp.) Wokół menedżera zadań; może użyć czegoś takiego jak Apache Commons Exec. W takim przypadku wolałbym Java lub Python dla części menedżera zadań.

Z przyjemnością wysłucham sugestii dotyczących wcześniejszego lub drugiego scenariusza!

+2

To jest strasznie specyficzna specyfikacja, z niewielką ilością pytania. Ogólne rozwiązanie, które je buduje, wymagałoby * partii * abstrakcji, aby działało z Quartz/GAE/etc, jak również logowaniem/stdout & err, nie wspominając już o sposobie uruchamiania zadań (iniekcja zależności? Class.newInstance()?), jak przechowywane są prace (twoja sprawa wymaga S3, ale datastore GAE, SQL itd. są sensowne dla "ogólnego" rozwiązania). –

+0

Dzięki za odpowiedź. Szukam głównie sugestii dla biblioteki, która oferuje kolejkowanie zadań i procesów oraz zarządzanie, dzięki którym mogę zbudować RPC/RMI/...warstwa wokół, aby móc przekazywać wiadomości między tą stroną a moją aplikacją GWT po stronie serwera lub kompletne rozwiązanie, które może to zrobić. Zadania będą uruchamiane jako procesy na komputerze z Linuksem - potrzebuję tylko miłego sposobu, aby przynajmniej wiedzieć, kiedy proces się kończy, i najlepiej dowiedzieć się o jego czasie obliczeń, być może w kolejce procesów. Sposób i miejsce przechowywania danych jest łatwo rozwiązany, moim zdaniem (mam całkiem niezły pomysł, jak to zrobić). – admr

+0

czy Quartz działa na EC2? – Peter

Odpowiedz

0

Twoje pytania nie są zbyt jasne.

  • Jeśli chcesz tylko kolejkę pracy, istnieje milion osób (SQS, AMPQ, Redis, etc)
  • Jeśli chcesz rodzajowy ramy dla prowadzenia pracy i wyników rejestrowania, spojrzeć na Rundeck
  • Jeśli chcesz mieć kontrolę zadań ad-hoc, po prostu użyj tmux i skryptuj ją przez skrypty SSH i/lub CGI.

Ale tak naprawdę, nie jestem pewien, czy istnieje "ogólny" komponent, który dokładnie zrobi to, co chcesz. Po prostu odpal twoją ulubioną frameworku i przeczytaj na syscalls z twojego ulubionego języka. Możesz wykonać dowolną operację (uruchom proces, proces sygnału, aby wstrzymać/zabić) z dowolnego języka, jeśli nauczysz się filozofii UNIX. Może przechowywać bazę danych bieżących zadań itp.

Powiązane problemy