Migración de computación grid distribuida .net, recomendaciones sobre bibliotecas, arquitectura [cerrado]

StackOverflow https://stackoverflow.com/questions/1226728

Pregunta

Tengo una simulación de Monte Carlo de subprocesos múltiples de c # , la aplicación ya está estructurada de modo que se puede dividir en Tareas que se ejecutan de forma independiente, un TaskController ejecuta Tareas, agrega resultados intermedios, verifica convergencia (criterios de terminación temprana) luego devuelve resultados finales, esto se implementa actualmente usando un ThreadPool.

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

Para empezar, estoy pensando en tener un master exe (aplicación de consola) y varios esclavos en otros servidores como trabajadores dedicados (¿deberían ser exes? ¿o servicios de Windows?), eventualmente podría configurarlo para que se ejecute 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 temprana (verificación de resultados de convergencia intermedia), cancelación de tareas que ya no se requieren, implementación de trabajo, descubrimiento de máquinas disponibles y listas para la implementación de trabajo, aceleración / pausa de trabajo si una estación de trabajo ya no está inactiva? todo lo demás que va en un sistema distribuido?

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

Estoy buscando recomendaciones para .net grid / bibliotecas distribuidas que pueden ayudar y algunos consejos de arquitectura en este esfuerzo.

Update

¿Alguien tiene experiencia usando alguno 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 utilizó JavaSpaces, Jini de .net o encontró tecnologías .net equivalentes

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

Gracias

¿Fue útil?

Solución

Investigaría la posibilidad de utilizar una arquitectura basada en el espacio 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, se retirarán del espacio, procesarán y escribirán los resultados en ese espacio u otro (todo bajo una transacción). Etiquetará los trabajos como pertenecientes a una ejecución 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 completamente del conjunto de consumidores.

Debido a que el trabajo se procesa bajo una transacción, si un consumidor no completa, el trabajo vuelve al espacio y está disponible para que otro consumidor lo procese.

Puede manejar resultados intermedios fácilmente. El productor toma resultados del espacio y puede obtener intermedios a medida que los resultados estén disponibles. Puede cancelar trabajos fácilmente. Simplemente quítelos del espacio.

Puede agregar más productores muy fácilmente. Simplemente escriben en el mismo espacio, y si los trabajos se etiquetan adecuadamente, los resultados están vinculados al productor sin ambigüedades.

No estoy seguro de qué marcos están disponibles para .Net, desafortunadamente (soy del mundo Java y usaría Javaspaces : estos utilizan descubrimiento dinámico y casi no se necesita configuración). Pero vale la pena buscar en Google. Tal vez (si esto es lo suficientemente potente), puede escribir los productores / consumidores de C # para interactuar con una infraestructura de Javaspace.

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