Pregunta

Tengo un doozy de un problema aquí.Estoy buscando para construir un marco para permitir la integración de los diferentes modelos de simulación de tráfico.Esta integración se basa en el intercambio de enlace de conectividades, los costos de los vínculos, y vehículos entre las simulaciones.

Para hacer un distribuidas de simulación, tengo la intención de un "coordinador" (topología en estrella).Todos los participantes de las simulaciones sólo tiene que registrarse con ella, y hablar con el coordinador.El coordinador coordina la ejecución de varias tareas, entre cada simulación.

Un rápido ejemplo de un problema de distribución, es cuando uno simulación es 'a cargo' de ciertos objetos, como una carretera.Y otro es el 'encargado' de otros caminos.Sin embargo, estos caminos están interconectados (y, por lo tanto, tenemos la necesidad de sincronización entre estas simulaciones, y deben ser capaces de intercambiar datos / métodos de invocación remota).

He echado un vistazo a RMI y estoy pensando que puede ser adecuado para esta tarea.(A lo abstracto no tener que crear un hilo de señalización de la disciplina).

Es esta la cordura?El problema aquí, es que la simulación de los participantes de la necesidad de centralizar algunos de su almacenamiento de datos en el "coordinador" para garantizar explícito de sincronización entre las simulaciones.Además, algunas de las simulaciones pueden requerir componentes o métodos de otras simulaciones.(De ahí la idea de usar RMI).

Mi enfoque básico es tener el "coordinador" ejecutar un gigante de la RMI de registro.Y cada simulación simplemente se ve todo en el registro, asegurando que los objetos correctos se utilizan en cada paso.

Alguien tiene algún consejo para la partida de este camino?

¿Fue útil?

Solución

Es posible que desee comprobar hacia fuera Hazelcast también. Hazelcast transaccional es un código abierto, distribuido / aplicación de cola dividida, tema, mapa, establezca, lista, bloqueo y servicio ejecutor. Es muy fácil trabajar con él; sólo tiene que añadir hazelcast.jar en su ruta de clase y empezar a programar. Casi no se necesita configuración.

Si está interesado en la ejecución de sus tareas, se puede llamar Ejecutables de una manera distribuida, por favor, echa un vistazo a la documentación de Servicio Distribuida al Ejecutor http://code.google.com/docreader/#p=hazelcast

Hazelcast se distribuye bajo la licencia Apache y soporte de nivel empresarial también está disponible.

Otros consejos

Es esta la cordura?En mi humilde opinión no.Y les diré por qué.Pero primero voy a añadir la advertencia de que este es un tema complicado por lo que cualquier respuesta tiene que ser visto como apenas arañar la superficie.

Primero, en lugar de repetir a mí mismo voy a señalar a un resumen de Java grid/clúster de tecnologías de la que escribí hace un rato.Su principalmente una lista completa.

La topología en estrella es "natural" para un "ingenuo" (no me refiero a que en una mala manera) implementación, debido a que punto-a-punto es simple y la centralización de la clave de la lógica del controlador, es también simple.Sin embargo, no es tolerante a fallas.Presenta problemas de escalabilidad y un único cuello de botella.Introduce la comunicación inefficiences (es decir, los puntos de comunicarse a través de un proceso de dos pasos a través del centro).

Lo que usted realmente desea para esto es probablemente un clúster (en lugar de datos informática/grid) de la solución, y yo sugiero que busque en Terracota.Lo ideal es que los miraba a Oracle Coherence pero es sin duda caro (en comparación con libre).Es un producto fantástico, aunque.

Estos dos productos se puede utilizar un número de maneras, pero la esencia de ambos es el tratamiento de un caché como un distribuida mapa.Poner las cosas en, usted toma las cosas y que el fuego fuera de código que altera la memoria caché.La coherencia (con el que estoy más familiarizado) en esta se refiere a las escalas de fantásticamente bien.Estos son más "servidor" a base de productos, aunque para un verdadero clúster.

Si usted está buscando en un modelo distribuido, a continuación, tal vez usted debe buscar en más de un enfoque basado en SOA.

Tener un vistazo a http://www.terracotta.org/

Es un distribuido de Java VM, por lo que tiene la ventaja de estar agrupado aplicación no es diferente que una aplicación Java estándar.

Lo he usado en aplicaciones y la velocidad es muy impresionante hasta ahora.

Paul

Ha considerado el uso de un enfoque de cola de mensajes? Se podría utilizar para comunicarse JMS / coordinar las tareas y los resultados entre un conjunto de servidores / nodos. Incluso se puede utilizar de Amazon SQS (Simple cola de servicio: aws.amazon.com/sqs). Y tienen los servidores que ejecutan en EC2 para permitir ajustar la escala arriba y hacia abajo según sea necesario

Sólo mi 2 centavos.

Tome un vistazo a JINI, podría ser de alguna utilidad para ti.

Bueno, Jini, o más específicamente JavaSpaces es un buen punto de partida para un enfoque simple para el problema. JavaSpaces le permite implementar un modelo maestro de trabajo, donde su maestro (coordinador en su caso) escribe tareas a la Javaspace, y la consulta de los trabajadores y procesar esas tareas, escribiendo los resultados de vuelta para el maestro. Debido a que su problema no es vergonzosamente paralelas, y sus trabajadores necesitan para sincronizar / intercambio de datos, esto va a añadir un poco de complejidad a su solución.

El uso de JavaSpaces agregará un conjunto mucho más abstracción para su aplicación que el uso normal RMI (que es utilizado por el marco Jini internamente como el valor por defecto "protocolo de conexión").

Tener un vistazo a este artículo del sol por un intro.

Y de Jan Newmarch Jini Tutorial es un buen lugar para comenzar a aprender Jini

Así como una adición a las otras respuestas que por lo que he visto todos se centran en la red y computación en la nube, usted debe notar que los modelos de simulación tienen una característica única: el tiempo de simulación.

Cuando se ejecuta distribuido modelos de simulación en paralelo y sincronizado entonces veo dos opciones:

  • Cuando cada modelo de simulación tiene su propia lista de reloj de simulación de eventos y entonces estos deben sincronizarse a través de la red.
  • Alternativamente podría haber un solo reloj simulación y lista de eventos que "tick el tiempo" para todos los modelos distribuidos (sub).

La primera opción ha sido ampliamente investigado para la Arquitectura de Alto Nivel (HLA) véase por ejemplo http: / /en.wikipedia.org/wiki/IEEE_1516 como titular.

Sin embargo, la segunda opción parece más simple y con menos sobrecarga para mí.

GridGain es una buena alternativa. Tienen un mapa / reducir aplicación con "soporte de API directa para la división y agregación" y "sesión de trabajo distribuida". Puede navegar por sus ejemplos y ver si alguno de ellos se ajusta a su las necesidades.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top