lunes, 19 de noviembre de 2012

Cluster de alto desempeño

Bueno y que pasa con el alto desempeño, investigando un poco y entrando en el mundo de los clusters, me fascino el tema de cluster Beowulf, tanto que me hacia la idea de tener un super computador, sin embargo la idea inicial que tenía es muy distinta a la idea que tuve al terminar de leer sobre el tema y sucede que para crear un cluster de alto desempeño generalmente es para fines determinados y aplicaciones únicas compiladas para trabajar especialmente en ese cluster.

Mi idea es crear un cluster donde los procesos sean distribuidos en todo el nodo, no para dar mayor velocidad si no capacidad al servicio para realizar cantidades de tareas teniendo hardware que no sería capaz de cumplir dicha tarea por si solo pero unido tenga la capacidad de un supercomputador.

Por lo tanto mi idea y mi objetivo es la creación de un cluster donde un proceso P ejecutandose en el nodo pueda ser ejecutado en uno u otro servidor, es decir que pueda ser migrado y ejecutado en otro servidor si el servidor que ejecuto el proceso esta ocupado.

Durante la investigación descubrí dos paqueterias que realizan la magia para hacer un cluster de alto desempeño estos paquetes son PVM y MPI, al leer sobre ambos, me despeje muchas de las dudas e inquietudes que tenia y a la vez se me cayo la idea del proyecto que pretendía montar, descubrí que ambas herramientas son poderosas sin embargo funcionan con programas que deben de incluir dichas librerias, por lo tanto son para fines específicos y no generales.

Mi idea es usar un cluster de alto desempeño para fines generales y no específicos  orientado al desempeño y capacidad para procesar trabajos en el nodo y no necesariamente orientado a su velocidad de respuesta.

Descubrí trucos y métodos para crear clusters de aplicaciones colocando un proxy en medio o maquina maestra encargada de dar acceso por turnos a cada una de las maquinas internas del nodo así cliente1 solicita un proceso P1 al servicio S el cual seria servido por maquina1, luego cliente2 solicita un proceso P2 al servicio S el cual seria servido por maquina2 si el cluster o nodo de clusters solo cuenta de dos maquinas entonces el cliente3 solcita un proceso P3 y seria servido por maquina1 y asi sucesivamente, mas sin embargo esta solución plantea que cada cluster es una maquina independiente con un nfs para sincronizar y tener la misma información sin embargo cada una usaría recursos independiente llevaría un problema adicional que es el acceso de los datos desde dos lugares distintos, esto podría conllevar a datos corruptos en paginas dinámicas en caso que el cluster sea un servicio web, claro esta que soluciona el load balancing de una forma rústica sin embargo de forma muy interesante.

Sin embargo este no era mi objetivo así que procedí a seguir investigando y abandone la idea de usar la filosofía de un cluster Beowulf para propósitos generales, generalmente descubrí que muchos de los servicios  en la internet hablan mas de balanceo que potencia para solventar el problema. Es decir que no es necesario que un servicio de base de datos tanga mayor potencia si el problema se soluciona mediante balanceo y el alto desempeño para procesamiento de cálculos. Por lo tanto he decidido crear otro post a futuro tratando sobre como crear balanceadores de carga y hablar sobre el tema.

Es así entonces que descubrí los paquetes PVM y MPI, generalmente ambos me parecen genial, sin embargo tienen sus pros y sus contras, el PVM es mas abstracto y el MPI mas detallado, por lo tanto el PVM no se necesita conocer como realiza el traslado de los procesos en cambio en el MPI si se requiere conocer como se realiza, esto conlleva que el MPI es más flexible y mas transparente que el PVM y por otro lado el PVM ofrece mayores herramientas para monitoreo y control que MPI, MPI por su lado no posee herramientas de control ni monitoreo pero ofrece a bajo nivel control total de como realizará y cuando realizar el traslado de los procesos a los demás nodos y como hacerlo.

Estuve pensando y esto es muy útil cuando se desea crear un supercomputador que realice cálculos estadísticos enormes. Y tocando este tema de supercomputadores, entre al tema del grid computing, otro tema del cual pienso hablar más tarde.

En mi caso por motivos de desarrollo y aprendizaje me fue muy útil crear clusters mediante PVM y MPI sin embargo por ahora desarrollar en c++ usando estas librerías no me es de utilidad sin embargo es un tema muy interesante ver como un proceso que requiere mucho tiempo procesarse en un solo ordenador en un cluster con varias virtuales toma quizás un cuarto de tiempo algo muy interesante. De ahí vino la idea de procesar servicios con estas dos librerías sin embargo es muy razonable el por que no es necesario procesos ni servicios más rápidos si no mas bien de como pueden ser servidos en un nodo de ordenadores sin provocar sobrecarga alguna.

No hay comentarios: