2011-08-29 19 views
10

Sto iniziando il mio ultimo progetto di informatica e sto cercando di capire i miei primi passi. Per maggiori dettagli si può andare al progetto page.Sistema distribuito Java

Contesto: Dato che ho pochissima esperienza in sistemi distribuiti, fondamentalmente ho pensato a come affrontare una simile sfida. Quello che è venuto fuori è che il sistema dovrebbe funzionare come segue:

Il client invia un file o un set di file che contiene codice da elaborare. Quel codice implementerà un'interfaccia algoritmo distribuito scritta da me, una classe specifica. Il server creerà un oggetto dalla classe. L'oggetto sarà responsabile dell'algoritmo da eseguire. Il server restituirà i risultati al client. (In realtà ho letto su RMI più tardi e l'ho trovato molto simile).

L'invio di file è di base - I/O di rete comune. Il vero problema è la creazione dell'oggetto e il suo utilizzo come interfaccia predefinita in fase di esecuzione.

Domande:

  1. La sfida che ho presentato suona come una sfida di riflessione, è corretto?
  2. Hai qualche primo consiglio su come implementarlo?

Alla ricerca di alcuni sistemi distribuiti di tecnologie java, ho riscontrato RMI, TRMI, LINDA, CORBA, JINI e molti altri. RMI sembra il più attraente perché è molto simile a quello che ho raccolto per essere la soluzione, ma è anche vecchio.

  1. Che insieme di librerie pensi che aiutarmi a completare questo compito? Ricorda che sono uno studente di informatica, quindi le soluzioni fuori dal comune non resteranno con i miei professori.
  2. RMI è vecchio, qualsiasi soluzione migliore là fuori?
  3. qualsiasi tutorial completo su TRMI?

Se trovi la mia logica come difettosa, correggila.

Se si dispone di ulteriori suggerimenti sull'argomento che si ritiene di dover discutere, non esitate a contattarmi.

+2

RMI è l'impostazione predefinita per la comunicazione tra processi in Java. È "vecchio" perché è stato disponibile e perfezionato dall'inizio di Java - preferirei chiamarlo maturo. A seconda delle tue esigenze/professore, potresti anche provare a basare la tua soluzione su qualcosa come [Hadoop] (http: //hadoop.apache.org /) o almeno trarre ispirazione da lì. –

+0

Se è maturo che bello. Ho trovato solo una documentazione molto antica, quindi dal mio punto di vista ho pensato che non si evolvesse molto. Hai un link che descrive lo sviluppo della biblioteca nel tempo? – qballer

+0

RMI (* invocation metodo remoto *) non è una libreria. È una sorta di tecnologia e parte del JRE/JDK. –

risposta

1

Si potrebbe utilizzare this example e inviare file di classe per l'esecuzione (è possibile memorizzare i file di classe sul disco, e poi caricarli utilizzando l'URLClassLoader. Se non si desidera scrivere sul disco, McDowell ha a suggestion).

Per quanto riguarda la comunicazione, ci sono un sacco da scegliere. Una cosa a cui potresti pensare è se far passare il messaggio sincrono o asincrono. Non c'è nulla di sbagliato nella messaggistica sincrona (come RMI), ma si potrebbe voler cercare soluzioni asincrone e dovrebbero essere "calde" di recente. O potresti semplicemente andare con il tuo protocollo su HTTP o qualcosa del genere.

Un esercizio divertente sarebbe quello di distribuire i dati tra i nodi ed eseguire l'algoritmo con questi dati distribuiti, quindi combinare i risultati. In questo caso l'utente specificherà due algoritmi. Uno che genera dati e uno che aggrega il risultato.

+0

Per caricare il mio codice usando URLClassLoader Wrapper che ho scritto così ho scelto la tua risposta. – qballer

5

Non ci sono abbastanza informazioni per una raccomandazione di biblioteche o tecnologie. Così mi piacerebbe concentrarsi sulla parte "ulteriori suggerimenti" della tua domanda;)

  • server invia un file - Di solito si tratta di un clientche invia una richiesta a un server e il server creerà una risposta. Dovresti seguire quella convenzione.
  • file deve essere eseguito - Non possiamo eseguire un file. Un file può contenere alcuni script o codice binario che può essere eseguito da un interprete o da un computer. Motivo per essere pignoli: devi fare qualcosa con il contenuto del file (analisi, compilazione, interpretazione, collegamento, ...)
  • i file implementeranno un [...] Interfaccia - vedi sopra, i file non implementano nulla.
  • Il cliente verrà eseguito l'interfaccia - Un interfaccia non può essere eseguito o correre.
  • risultati di ritorno dell'algoritmo al server - Come accennato in precedenza: di solito si tratta di un clientche avrebbe inviato il file ("richiesta") a un server. Il server quindi accetta il file, esegue alcuni calcoli in base al contenuto dei file e restituisce un risultato ("risposta") al client.

Remote Method Invocation

Con RMI solito abbiamo il seguente scenario: Un cliente vuole chiamare un metodo remoto . Il client conosce l'interfaccia e l'indirizzo del server. Il server ha un'implementazione per tale interfaccia. Ora il client contatta il server e chiama il metodo su quel server.

Per il vostro progetto sembra un po 'diversa: Penso che il clienteha un'implementazione di un (file sorgente Java o file di classe compilato) algoritmo e vuole inviare ad uno o più server. Il server deve elaborare il file, eseguire l'algoritmo per alcuni input (la fetta) e restituire il risultato.

RMI può essere un candidato per il trasferimento di file ma non per la chiamata al metodo (algoritmo). Un metodo remoto potrebbe sembrare che (assumendo inviamo un file sorgente Java):

public Result process(String javaSource, Data data); 
+0

Grazie per la risposta dettagliata. Per quanto riguarda la correzione terminologica che hai fornito, sono d'accordo con loro. Giusto per chiarire cosa intendevo, il codice, inviato da un cliente e scritto dall'utente, implementerà un'interfaccia scritta da me. Vorrei creare un oggetto (sul server) di tale implementazione e utilizzare l'interfaccia per eseguire l'algoritmo. Puoi dare maggiori dettagli su come farlo? quello che mi è stato indicato come riflessione. – qballer

1

Si prega di guardare anche ai servizi web SOAP basato .. MTOM fornisce un modo più efficiente per il trasferimento contenuto binario.

Grazie ..

+1

*** Semplice *** Oggetto Protocollo di accesso agli oggetti, infatti. – bdares

+2

SOAP non è più un acronimo dalla 1.2 in poi ... grazie ... –

Problemi correlati