2009-08-04 11 views
7

Tengo C# multi-threaded monte carlo simulation, la aplicación ya está estructurada de modo que se puede particionar en Tareas que se ejecutan de forma independiente, un TaskController ejecuta Tareas , agrega resultados intermedios, verifica la convergencia (criterios de terminación anticipada) y luego arroja los resultados finales; esto se implementa actualmente utilizando un ThreadPool..net grid computing computing migration, recomendaciones sobre bibliotecas, arquitectura

Me gustaría como aprovechar más de una computadora para ayudar en este cálculo. No tengo aprobación o infraestructura para usar IIS (esta política no va a cambiar) pero puedo usar, por ejemplo, WCF con el enlace de punto final NetTcpBinding, probé esta comunicación en el servidor y tiene los permisos apropiados y trabajos.

Para empezar estoy pensando en tener un maestro exe (aplicación de consola) y varios esclavos en otros servidores como trabajadores dedicados (¿deberían ser éstos? O servicios de Windows?), Eventualmente podría tener este conjunto ejecutándose en cientos de estaciones de trabajo (así como servidores) dentro de la empresa durante tiempo de inactividad (o cuando un protector de pantalla está activo).

Podría escribir esto yo mismo, pero tendré que manejar las comunicaciones, 1, 2 vías? terminación anticipada (comprobación de resultados de convergencia intermedia), cancelación de tareas que ya no son necesarias, despliegue del trabajo, descubrimiento de máquinas disponibles y listas para el despliegue del trabajo, regulación/pausa del trabajo si una estación de trabajo ya no está inactiva. todo lo demás que entra en un sistema distribuido?

Si el maestro (controlador de tareas) conoce las direcciones (ip) de todos los trabajadores esclavos y les indica que trabajen (si están disponibles) o si los trabajadores esclavos solo conocen la dirección maestra y solicitan trabajo cuando están ¿En una posición para hacerlo, o la comunicación debería fluir en ambos sentidos? Esto se ejecutará en un reloj de 24 horas con aproximadamente 9 ejecuciones iniciadas por día para admitir diferentes regiones comerciales.

Estoy buscando recomendaciones para .net grid/distributed libraries que pueden ayudar y algunos consejos de arquitectura en este empeño.

actualización

tiene experiencia cualquier persona que utilice cualquiera de los siguientes?

http://www.digipede.net/ (commercial) 
http://www.gridbus.org/~alchemi/ 
http://ngrid.sourceforge.net/ 
http://www.osl.iu.edu/research/mpi.net/ 

o usados ​​JavaSpaces, Jini de tecnologías .NET .NET o equivalentes que se encuentran

http://java.sun.com/developer/technicalArticles/tools/JavaSpaces/ 
http://www.jini.org 

, gracias

Respuesta

3

me gustaría investigar la posibilidad de utilizar un space-based architecture para esto.

El maestro escribiría los trabajos en un espacio (esencialmente un repositorio de objetos). Los clientes consumidores siempre están buscando trabajo y, a medida que los trabajos estén disponibles, extraerán del espacio, procesarán y escribirán los resultados en ese espacio u otro (todo bajo una transacción). Debería etiquetar los trabajos como pertenecientes a una ejecución en particular para agrupar los resultados.

La ventaja de esto es que esto se escala muy fácilmente (simplemente agregando más consumidores).Los consumidores tendrían que determinar cuándo pueden trabajar y simplemente deben configurarse con información sobre el espacio (cómo encontrarlo). El productor está desacoplado por completo del conjunto de consumidores.

Como el trabajo se procesa en una transacción, si un consumidor no puede completarlo, el trabajo vuelve al espacio y está disponible para que otro consumidor lo procese.

Puede manejar resultados intermedios fácilmente. El productor toma los resultados del espacio y puede derivar productos intermedios a medida que los resultados estén disponibles. Puede cancelar trabajos fácilmente. Simplemente elimínalos del espacio.

Puede agregar más productores muy fácilmente. Simplemente escriben en el mismo espacio, y si los trabajos están etiquetados adecuadamente, los resultados están vinculados al productor de forma inequívoca.

No estoy seguro de qué marcos están disponibles para .Net, desafortunadamente (soy del mundo de Java y usaría Javaspaces - estos usan descubrimiento dinámico, y junto a ninguna configuración es necesaria). Pero vale la pena buscar en Google. Tal vez (si esto es lo suficientemente poderoso), puede escribir al productor/consumidores C# para interactuar con una infraestructura de Javaspace.

+0

La tecnología de Jini y Javaspaces parece realmente interesante. ¿Son estos fáciles de alojar en la infraestructura de Windows? ¿son servicios de Windows? Un equivalente de .net sería muy agradable. – m3ntat

+0

Solo necesita una VM Java estándar, y puede envolverla como un servicio utilizando http://wrapper.tanukisoftware.org/doc/english/download.jsp (ediciones gratuitas o profesionales). No sé sobre .net, desafortunadamente, pero usted podría obtener fácilmente .net MC impl para ser conducido desde un proceso Java hablando a los espacios. Sus objetos en el espacio de Javaspace podrían ser independientes del idioma, por ej. XML: para facilitar un simple paso al mundo .net. –

Cuestiones relacionadas