Haizea

Hoy he llegado a un punto relativamente importante en mi investigación, ya que el trabajo que he estado haciendo recientemente ha alcanzado por fin suficiente masa crítica como para publicarlo no sólo en forma de artículo sino también en forma de proyecto de software. Hoy he lanzado públicamente el proyecto Haizea:

¿Qué es Haizea? Bueno, la respuesta a esa pregunta se encuentra en la web, pero intentaré resumir y dar poco el tostón (aunque voy a tener que asumir un mínimo de conocimiento informático). Suponed que tenéis un cluster de ordenadores, y que queréis compartir ese cluster entre varios usuarios. Evidentemente, cada usuario tendrá necesidades distintas: algunos querrán ejecutar programas en modo batch y otros querrán control exclusivo de parte o la totalidad del cluster durante un tiempo (p.ej., imaginad un profesor que quiere impartir un laboratorio de programación paralela de 14:00 a 16:00 todos los miércoles). Y cada usuario, claro, quiere un entorno software distinto. Hay soluciones que abordan partes de este problema y suelen estar muy especializados para un caso de uso concreto. Por ejemplo, los gestores de jobs son muy buenos para ejecución batch desatendida, pero suelen ser nefastamente malos para reservas en tiempos concretos (y de darte exactamente el entorno software que quieres, ni hablar). Por contra, sistemas como Amazon EC2 son excelentes para conseguir exactamente el entorno software que quieres, pero hay que pedirlo en el instante en el que se quiere. Similarmente, VMWare y compañía ofrecen gestores de infraestructura virtual pero principalmente orientados a servidores con alta disponibilidad.

Pues bien, Haizea (y buena parte de la investigación que realizo) tiene como objetivo proporcionar una solución general al problema del aprovisionamiento de recursos. El software que he desarrollado, utilizado en combinación con OpenNebula (un gestor open source de infraestructura virtual desarrollado por el grupo de Arquitectura de Sistemas Distribuidos de la Universidad Complutense de Madrid), permite gestionar un cluster Xen o KVM (y pronto también clusters VMWare) y desplegar máquinas virtuales dinámicamente en el cluster satisfaciendo varios casos de uso simultáneamente y eficientemente. Lo mismo puedes pedir “quiero una máquina con 2 CPUs y la quiero ahora“, o “dame 10 máquinas, cuando puedas, pero que se ejecuten durante 2 horas”, o “dame 20 máquinas mañana de 14:00 a 16:00”. Por cierto, “eficientemente” es la palabra clave aquí. Una de las razones por las que las soluciones existentes se centran en un caso de uso concreto es porque no suele ser posible combinar varios eficientemente. Ojo que la versión actual es todavía un “technology preview”, así que todavía le falta bastante funcionalidad, pero el proyecto irá creciendo bastante en los próximos meses.

Por supuesto, detrás de todo esto hay unos rollos macabeos tremendos de investigación. Al que se sienta aventurero, le animo a que se lea el artículo donde presenté las ideas principales de Haizea: Combining Batch Execution and Leasing Using Virtual Machines. Aunque no lo parezca, el contexto de esta investigación sigue siendo la computación grid, donde el aprovisionamiento eficiente de recursos es un problema. Más recientemente, Haizea también podría enmarcarse como una contribución dentro de la “computación cloud“, donde los recursos tipicamente se gestionan con tecnologías de virtualización (a los que estamos en el mundo de la grid, el término “cloud” nos resulta un poco marketing-iano porque toma muchas ideas de la grid, únicamente añadiendo el uso de máquinas virtuales). En fin, si alguien no ve claro algo de lo que digo aquí o en la web de Haizea, o qué utilidad tiene esto, o cuanto son 400 dracmas, que lo diga en los comentarios y yo respondo ipso facto.

Por cierto, no lo he dicho explícitamente, pero Haizea es, evidentemente, open source. Ya iba siendo hora de que, después de tanto predicar a favor del software libre y el código abierto, hiciese mi propia contribución. Y, sinceramente, lo que más me anima de este proyecto es saber que estoy devolviendo algo a la comunidad a través de un proceso abierto y colaborativo.

P.D.- Como ya saben los lectores euskaldunes, “Haizea” significa “viento” (vale, vale, más correctamente “el viento”). Inicialmente escogí ese nombre (hace ya casi un año) simplemente porque quería que mi sistema tuviese un nombre en euskera que sonase bien tanto en inglés como en castellano y me dio por “haizea”. Eso si, durante el último año han estado saliendo todo tipo de juegos de palabras en relación a la “computación cloud”. No se paran de ver artículos tipo “Are clouds a nebulous concept?”, “Will clouds go up in smoke?”, “Cloud Computing: Eyes on the skies”, etc, etc. Así que “haizea” resultó ser, sin querer, otro juego de palabras más… porque las nubes no se mueven sin un poco de viento… (eeeeeeh, eeeeeeh, ¿lo pillas? ¡viento! ¡nubes! si es que soy un caso perdido… xD )

P.P.D.- En la web doy los agradecimientos de rigor, pero la verdad es que tengo agradecer especialmente el apoyo del Grupo de Arquitectura de Sistemas Distribuidos de la Universidad Complutense de Madrid, con el que estoy trabajando este verano. Si no llega a ser por ellos, que me ofrecieron la oportunidad de desarrollar una versión más estable de Haizea para utilizar en combinación con OpenNebula, no creo que Haizea hubiese llegado a ver la luz del día (o, al menos, habría tardado bastante más). Y tampoco hay que olvidad, claro, que me han traido a España durante todo el verano 😉

7 comentarios sobre “Haizea

  1. Buenas Borja!

    Estoy muy contento de que te vaya bien el tema, mañana intentaré pegarle un vistazo al paper a ver si me entero de algo. ¿Que tal el curso en la complutense?

    Saludos!

    Me gusta

  2. El proyecto tiene muy buena pinta. Pero hay dudas que, por desconocimiento sobre el tema, no sé si ya existen o es útil que se tomen en cuenta en este tipo de software.

    La primera preguntilla, hay opciones de prioridad? Siguiendo tu ejemplo, un profe necesita todos los miercoles de 14:00 a 16:00 “x” recursos. Pero viene el director un miercoles a las 15:10 y necesita “y” recursos (donde x+y>total_de_recursos, por lo que necesita parte de los “x” recursos del profe), y claro, como es el dire, tiene prioridad y lo necesita para ya.

    Otra cosa que se me ha ocurrido es si hay posibilidad de poder pedir recursos pero con opciones. Es decir, el profe sabe que necesita “x” recursos para hacer lo que necesita pero pide la opción “x+3” porque sabe que así la clase irá más fluída (se le asignará “x+3” si hay posibilidad, o si no solo “x”). O al revés, pide “x”, pero no le importa que le quiten 3 recursos de esos x si lo necesita otra gente. Sería asignación de recursos on fly dependiendo de prioridades y opciones que necesita la gente.

    Quizá lo que estoy diciendo ya esté en marcha, o simplemente no tenga sentido, pero de este tema no tengo ni idea :p

    Una crítica constructiva sobre la web (que está muy bien, por cierto). Se te ha olvidado poner el doctype (por lo que no valida :p), y aparte, las páginas “Support”, “Roadmap” y “Publications” no les quitas el enlace (ni se ponen en negrita) cuando estás en ella, por lo que no se vé en cual de ellas estás. Sé que es la última chorrada que esperabas oir, pero bueno 😛

    Me gusta

  3. Yuki: Pues esas son muy buenas preguntas. Ahora mismo existe una opción un poco rudimentaria de prioridad basada en la “preemptability” de los recursos (desafortunadamente, este termino no tiene una traducción directa al castellano… ¿”capturabilidad”?). Es decir, una serie de recursos o son “preemptable” o no lo son (si no soy “preemptable”, nadie puede “robarme” o “capturar” mis recursos). Una de las razones por las que resultan atractivas las máquinas virtuales para nuestro sistema es porque la “captura” de recursos es mucho más sencilla y poco dañina, ya que podemos suspender una máquina virtual en lugar de quitarle los recursos al usuario y decirle que tiene que empezar su trabajo desde cero en otros recursos. En el caso que comentas, a falta de una prioridad más general, pues el director se quedaría sin recursos porque (suponiendo que los recursos del profesor no son “preemptable”) no tiene más prioridad que el profesor.

    Sin embargo, este es un caso de uso que sí queremos soportar (principalmente teniendo un concepto más general de prioridad). Lo que describes es básicamente un uso “urgente” de recursos en el que te llega alguien con prioridad máxima, en el que el sistema debería determinar (automáticamente, sin intervención de un administrador humano) si efectivamente el director podría dejar sin recursos al profesor. En la practica, yo te diría que el director (por muy director que sea) no tendría suficiente prioridad para quitarle los recursos al profesor, porque una petición urgente tiene que ser muy urgente para dejar sin recursos a alguien que se tomó la molestia de reservarlos con días o semanas de antelación. Eso sí, el sistema debería ser capaz de decirle al director que, si espera hasta las 16:00, le puede dar recursos sin necesidad de robarle recursos a otros usuarios.

    Lo de “pedir recursos con opciones” también es algo que queremos soportar. Eso entra dentro de la negociación y renegociación de “leases”. Es decir, tu puedes especificar que, como mínimo, necesitas X recursos para realizar tu trabajo, pero que si hay ciclos libres y el gestor te puede dar Y recursos adicionales, que podrías utilizarlos (pero bajo ninguna condición debería darte menos de X). Otra opción más común es solicitar una duración T, y darte cuenta al final que necesitas una extensión E porque tu trabajo no ha terminado, con lo cual deberías poder especificar “Quiero estos recursos durante T horas, con opción a extenderlo hasta E horas más” (al ser parte de la negociación inicial, el gestor tiene que garantizarte que, si al final de la T horas te pide la extensión, se la podrás dar; todo esto es completamente no trivial desde el punto de vista de planificación).

    Tomo nota de los comentarios sobre la web 😉 Es que inicialmente ibamos a lanzar la web en formato wiki, pero al final se ha retrasado el lanzamiento de buena parte de la infraestructura (servidor SVN, Trac, etc.) así que tuve que hacer una web a la antigua usanza 🙂

    Me gusta

  4. Suponía que todo eso debía estar (si se me ha ocurrido a mi, se os habría ocurrido ya).

    Como bien dices, suponía que el ponerte a pensar todo eso para desarrollarlo no iba a ser tarea fácil, y que habrá más casos de uso aparte de estos. De todas maneras, parece interesante.

    Un saludo!

    Me gusta

  5. Pingback: meneame.net

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s