2011-08-29 20 views
10

Estoy comenzando mi último año de proyecto de informática y estoy tratando de descubrir mis primeros pasos. Para más detalles, puede ir al proyecto page.Sistema distribuido Java

Antecedentes: Como tengo muy poca experiencia en sistemas distribuidos, básicamente, ¿cómo debo enfrentar este desafío? Lo que se me ocurrió es que el sistema debería funcionar de la siguiente manera:

El cliente envía un archivo, o un conjunto de archivos que contiene el código para ser procesado. Ese código implementará una interfaz de algoritmo distribuido escrito por mí, una clase específica. El servidor creará un objeto de la clase. Ese objeto será responsable de que se ejecute el algoritmo. El servidor devolverá los resultados al cliente. (De hecho, leí acerca de RMI más tarde y lo encontré muy similar).

El envío de archivos es básico: E/S de red común. El problema real es la creación de objetos y su uso como la interfaz predefinida en tiempo de ejecución.

Preguntas:

  1. El reto que he presentado suena como un desafío la reflexión, ¿es correcto?
  2. ¿Tiene algún consejo sobre cómo implementarlo?

Buscando algunos sistemas distribuidos tecnologías java Me he encontrado con RMI, TRMI, LINDA, CORBA, JINI y muchos otros. RMI suena muy atractivo porque es muy similar a lo que he reunido para ser la solución, pero también es viejo.

  1. ¿Qué conjunto de bibliotecas cree que me ayudarán a completar esta tarea? Recuerde que soy un estudiante de ciencias de la computación, por lo que las soluciones integrales no se quedarán con mis profesores.
  2. RMI es viejo, ¿hay alguna solución mejor?
  3. ¿algún tutorial completo sobre TRMI?

Si encuentra que mi lógica es defectuosa, corríjala.

Si tiene más consejos sobre el tema que cree que deberían discutirse, no dude en ponerse en contacto conmigo.

+2

RMI es el valor predeterminado para la comunicación entre procesos en Java. Es "viejo" porque ha estado disponible y mejorado desde el comienzo de Java, prefiero llamarlo maduro. Dependiendo de sus requisitos/profesor, también podría intentar basar su solución en algo como [Hadoop] (http: //hadoop.apache.org /) o al menos obtener algo de inspiración de allí. –

+0

Si es maduro que excelente. Encontré solo documentación muy antigua, así que desde mi punto de vista, pensé que no había evolucionado demasiado. ¿Tiene un enlace que describe el desarrollo de la biblioteca a lo largo del tiempo? – qballer

+0

RMI (* invocación de método remoto *) no es una biblioteca. Es una especie de tecnología y parte de JRE/JDK. –

Respuesta

1

Usted podría utilizar this example y enviar archivos de clase para su ejecución (que puede almacenar los archivos de clase en el disco, y luego cargarlos mediante el URLClassLoader. Si no desea escribir en el disco, McDowell tiene a suggestion).

En cuanto a la comunicación, hay MUCHO para elegir. Una cosa en la que podrías pensar es si hacer que el mensaje pase sincrónico o asíncrono. No hay nada de malo en la mensajería sincrónica (como RMI), pero es posible que desee buscar soluciones asíncronas y que se supone que están "calientes" recientemente. O simplemente podría ir con su propio protocolo encima de HTTP o algo así.

Un ejercicio divertido sería distribuir datos entre los nodos y ejecutar el algoritmo en contra de estos datos distribuidos, y luego combinar los resultados. En este caso, el usuario especificará dos algoritmos. Uno que genera datos, y uno que agrega el resultado.

+0

Para cargar mi código usando URLClassLoader Wrapper que escribí, así que elijo su respuesta. – qballer

5

No hay suficiente información para una recomendación de bibliotecas o tecnologías. Así que me gustaría a concentrarse en la parte "más consejos" de su pregunta;)

  • servidor envía un archivo - Por lo general es un clienteque envía una petición a un servidor y la servidor creará una respuesta. Debes seguir esa convención.
  • es necesario ejecutar el archivo - No podemos ejecutar un archivo . Un archivo puede contener algún script o código binario que pueda ser ejecutado por un intérprete o una computadora. Motivo de ser quisquilloso: tiene que hacer algo con el contenido del archivo (análisis, compilación, interpretación, vinculación, ...)
  • archivos implementará un [...] interfaz - ver arriba, los archivos no implementan nada.
  • El cliente ejecutará la interfaz - Una interfaz no se puede ejecutar o ejecutar.
  • devuelven resultados del algoritmo para el servidor - Como se mencionó anteriormente: por lo general es un clienteque enviaría el archivo ("solicitud") a un servidor. El servidor tomaría el archivo, haría algunos cálculos basados ​​en el contenido de los archivos y devolvería un resultado ("respuesta") al cliente.

invocación de métodos remotos

Con RMI normalmente tenemos el siguiente escenario: Un cliente quiere llamar a un método remoto. El cliente conoce la interfaz y la dirección del servidor. El servidor tiene una implementación para esa interfaz. Ahora el cliente se pone en contacto con el servidor y llama al método en ese servidor.

Para su proyecto, parece algo diferente: creo que el cliente tiene una implementación de un algoritmo (archivo fuente java o archivo de clase compilado) y desea enviarlo a uno o más servidores. El servidor procesará el archivo, ejecutará el algoritmo para alguna entrada (el segmento) y devolverá el resultado.

RMI puede ser un candidato para la transferencia de archivos pero no para la llamada al método (algoritmo). Un método remoto podría parecer que (suponiendo que enviamos un archivo fuente de Java):

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

Gracias por la respuesta detallada. En cuanto a la corrección terminológica que ha proporcionado, estoy de acuerdo con ellos. Solo para aclarar lo que quise decir es que el código, enviado por un cliente y escrito por el usuario, implementará una interfaz escrita por mí. Me gustaría crear un objeto (en el servidor) de esa implementación y usar la interfaz para ejecutar el algoritmo. ¿Puedes dar más detalles sobre cómo hacer eso? a lo que me referí como reflejo. – qballer

1

favor Ver también en los servicios web a base de jabón .. MTOM proporciona una forma de transferencia de contenido binario más eficiente.

Gracias ..

+1

*** Simple *** Object Access Protocol, de hecho. – bdares

+2

SOAP no es más un acrónimo de 1.2 en adelante ... gracias ... –

Cuestiones relacionadas