2012-05-16 6 views
7

Sto cercando una libreria generale per la pianificazione di molte attività. La libreria deve fornire la possibilità di suddividere le attività tra i nodi in cluster, eseguire il bilanciamento del carico e la tolleranza agli errori, quindi se un nodo scende, le attività per il nodo devono essere distribuite tra i restanti nodi.Libreria di pianificazione distribuita per uso generico per Java

Ho guardato l'Hadoop, ma sembra che funzioni bene per le attività di riduzione delle mappe. Nel mio caso le attività sono semplicemente mittenti di notifiche, checker per stato dell'oggetto ecc.

Il quarzo sembra essere ottimo, ma non è chiaro quanto è buono quando si tratta di inviare eventi ai nodi.

Altre opzioni?

risposta

7

Suona come un caso d'uso per Akka.

+1

o per [servizio scheduler Redisson] (https://github.com/mrniko/redisson/wiki/9.-distributed-services/#94-distributed-scheduled-executor-service) –

0

Oppure si può anche provare Quartz, è in grado di gestire quasi tutto quello che vuoi :)

+0

cosa sull'elaborazione delle attività distribuite e sui casi in cui un nodo non funziona? Sembra che non ci sia soluzione pronta per l'uso. – jdevelop

3

Sono d'accordo con Christian che Akka sembra una migliore vestibilità. Il quarzo è ottimo per quello che fa, ma il suo blocco di base è un lavoro che dovrebbe essere eseguito. Non ti aiuterà a scomporre il tuo lavoro in componenti distribuibili.

Se tutte le attività possono essere scomposte in lavori, Quartz può aiutarti a programmarle, è ciò che fa meglio. Ma se un lavoro ha bisogno di decomporsi in sottoattività, allora dovrai usare un altro framework.

Un'altra opzione potrebbe essere spring batch, a seconda delle esigenze.

+0

Per ora, è possibile eseguire un'attività come "lavoro", ma non vedo come il quarzo possa gestire la gestione delle attività distribuite e gestire i casi quando un nodo è inattivo. E utilizza il polling, quindi è necessario configurare una sorta di database in cui il lavoro deve essere memorizzato, questo è un potenziale collo di bottiglia. Mi sto perdendo qualcosa? – jdevelop

+0

il database è davvero un collo di bottiglia. per le attività distribuite, è possibile configurare il clustering, ma questo è un po 'limitato –

1

Si potrebbe provare ProActive, un programmatore del flusso di lavoro che si integra bene con Java (scritto in Java). Supporta le funzionalità che hai elencato. È un progetto open source, parte di OW2.

le seguenti caratteristiche per esempio, sono disponibili:

  • flussi di lavoro, vale a dire un insieme di attività con dipendenze e costrutti, come loop/se/replica
  • compiti vengono eseguiti su nodi, cioè agenti esecuzione su macchine diverse
  • le attività possono essere riavviati automaticamente in caso di guasto del nodo

[Avviso legale] sono parte della Activeeon, la società che fornisce supporto professionale per Pr oActive [/ disclaimer]

+0

Si prega di leggere [risposta], la risposta dovrebbe includere anche informazioni sufficienti per essere utile anche se il collegamento muore. –