Ruby "distribuito"

Ciao,
sto partecipando ad un progetto di ricerca genetica e sto realizzando
con altri colleghi un’applicazione web in Rails che tra le varie cose
consente di organizzare e gestire le analisi “intensive” (dal punto di
vista computazionale) che vengono poi eseguite su diverse macchine
remote.

La gestione della distribuzione dei calcoli e’ stata finora implementata
con una soluzione “fatta in casa”: inizialmente infatti tutte le analisi
venivano inviate ad un cluster controllato da un server che implementava
un gestore di code e di risorse (Torque+Maui). Ora abbiamo accesso ad
ulteriori macchine che hanno differenti gestori di code e vorremmo, se
possibile, sfruttare - nei momenti di non utilizzo - i personal computer
in dotazione.

Un’analisi e’ normalmente composta dai seguenti passi:

  • recupero di dati dal database o da un file di dati
  • preparazione del file di input
  • preparazione dello script da eseguire
  • accesso e trasferimento dello script, degli eseguibili (se non gia’
    presenti sulla macchina remota) e dei file di input (in SSH)
  • inizio esecuzione (se non è presente un gestore di code l’esecuzione
    inizia subito, altrimenti potrebbe venire rimandata)
  • trasferimento (SSH) dei file di output, cancellazione dei file dalla
    macchina remota
  • parsing dei risultati e salvataggio nel db

Ora vorrei rendere piu’ generale la procedura finora implementata per
eseguire in remoto (su pc o cluster) le varie analisi che tenga conto:

  • del tipo diverso di macchine (SO)
  • della presenza o meno di gestori di risorse e/o code
  • della disponibilita’ della macchina (carica o libera?)
  • della gestione delle abilitazioni delle macchine ad eseguire una certa
    analisi. Non ci sono solo eseguibili da linea di comando: ci sono
    analisi che richiedono Java, altre che richiedono il software statistico
    R, ecc. Altre analisi richiedono la presenza di specifiche librerie (ad
    esempio gnuplot, imagemagick, ecc.)
  • della gestione dei permessi dei vari utenti (l’utente U e’ autorizzato
    ad eseguire E su S?)

Inoltre sarebbe bello poter monitorare lo stato delle varie macchine che
come si evince sono piuttosto disomogenee, e memorizzare un minimo di
storico.

Prima di reinventare la ruota, esiste gia’ un plugin o una gemma che fa
qualcosa di simile a quanto vorrei realizzare?

Grazie mille, come al solito, per i vostri suggerimenti,
Iwan

Frose potrebbe interessarti questo post:

http://blog.pdatasolutions.com/post/191978092/ruby-on-hadoop-quickstart

che parla dell’uso di Apache Hadoop con Ruby.

Il 26 luglio 2010 12.13, Iwan B. [email protected] ha scritto:

un gestore di code e di risorse (Torque+Maui). Ora abbiamo accesso ad

  • inizio esecuzione (se non è presente un gestore di code l’esecuzione
  • della gestione delle abilitazioni delle macchine ad eseguire una certa

[email protected]
http://lists.ruby-it.org/mailman/listinfo/ml


Carlo P.
email: [email protected]
twitter: @carlopecchia

Ti consiglio distribute programming with ruby.


Raoul J.P. Bonnal
Life Science Informatics
Integrative Biology Program
Fondazione INGM
Via F. Sforza 28
20122 Milano, IT
phone: +39 02 006 623 26
fax: +39 02 006 623 46