Información y enlaces

Participa comentando, viendo lo que otros tienen que decir, o enlazandolo desde tu blog.


Otros artículos
Leaving Firefox: me voy a la Opera
Chikilicuatre y la inyección de lógica en la capa de cliente

Tips: Problemas con el tiempo de “Leasing” en sistemas de cálculo distribuidos

Posteado por Félix García Borrego en 2 April, 2008

Desde hace unos meses llevo trabajando en un proyecto que requiere una enorme capacidad de calculo para su correcto funcionamiento, por lo que he tenido que recurrir a un sistema de calculo en cluster basado en JavaSpace/Jini  y ComputeFarm. Al principio el sistema funcionaba correctamente, pero a medida que he ido añadiendo cpus (1 mac, 1 portátil Linux, 1 portátil Windows Vista, 2 pcs con XP, 4 pcs antiguos con Linux y una PlayStation3) ha empezado a bloquearse y a dejar el cluster inutilizado.  El problema surge al ser un cluster muy heterogéneo,  lo que causa que mientras en algunas cpus el tiempo de calculo requerido por tarea sea solo de algunos segundos, en otras máquinas el tiempo de calculo requerido es muy elevado. En estas condiciones surge de forma “aleatoria” la siguiente excepción:

net.jini.core.transaction.UnknownTransactionException: unknown transaction at com.sun.jini.mahalo.TxnManagerImpl.join(TxnManagerImpl.java:759)... at com.sun.jini.mahalo.TxnManagerImpl_Stub.join(Unknown Source)... at com.sun.jini.mahalo.TxnMgrProxy.join(TxnMgrProxy.java:131)... at com.sun.jini.outrigger.SpaceProxy.write(SpaceProxy.java:298)

¿Y por que no reconoce la transacción Jini?

Cuando se produce una situación en la que le “toca” realizar una tarea muy costosa a una cpu lenta, se activa el timeout de la transacción y por lo tanto ya no hay una transacción a la que commitear el resultado del cálculo, y esto hace que las tareas no puedan ser liberadas, causando la caída del cluster. Una vez entendido el problema, la solución es muy sencilla:

  • Si la implementación del worker es  ComputeFarm 0.8, es suficiente con modificar la variable de sistema mediante: -Dorg.tiling.computefarm.impl.javaspaces.MaxTaskExecutionTime=1500000    ( para por ejemplo permitir tiempos de espera de 25 minutos)
  • Si la implementación del worker es ComputeFarm 0.7, como es mi caso debido a dependencias con otras librerías, hay que recompilar el proyecto para configurar manualmente este parámetro, modificando el código fuente de org.tiling.computefarm.WorkerThread.

Una vez solucionado este punto, y aunque mi experiencia en este tipo de soluciones es muy reducida, tengo que admitir que el pack “JavaSpace/Jini/ComputeFarm” es una maravilla para la creación sencilla de sistemas de cálculo distribuidos.



Escriba un comentario

Tomate un momento para comentar y contar lo que piensas sobre el post. Puedes usar un HTML básico para formatear

Comentarios leidos

Firgen santa, es el comienzo de post más friki que he visto en mi vida, y tenía el listón muy alto :-O

Si vas a la documentación de Spring 1.x verás que esto está desde hace mucho tiempo, hago esto en Spring desde hace mas de 1 año, por ejemplo, aquí para versión 1.2 ves lo de transactional: http://static.springframework.org/spring/docs/1.2.x/reference/transaction.html#d0e5917

Saludos,

Guido.