# Cluster Beowulf

Beowulf es un sistema de cómputo paralelo basado en clusters de ordenadores personales conectados a través de redes informáticas estándar, sin el uso de equipos desarrollados específicamente para la computación paralela.
Fue desarrollado por primera vez en 1994 por Donald Becker y Thomas Sterling en la NASA, agruparon 16 procesadores Intel DX4 de 100 MHz, los interconectaron con tecnología Ethernet a 10 Mbps, en equipo viejos con Linux instalado como sistema operativo, pero más tarde se continuó el desarrollo una comunidad internacional interesados en la computación científica.
Un cluster Beowulf es por lo general un grupo de computadoras compatibles con IBM, que utiliza software de código abierto. Para que un grupo de computadoras pueda ser considerado un "Beowulf" deben cumplir ciertos requisitos como, contar con un monitor y un teclado.

## Breve Historia del origen de los Clusters- Beowulf

En 1994 bajo el patrocinio del proyecto ESS del Centro de la Excelencia en Ciencias de los Datos y de la Información del Espacio (CESDIS), Thomas Sterling y Don Becker crearon el primer cluster Beowulf con fines de investigación, bajo el patrocinio del Proyecto Earth and Space Sciences construyeron un cluster de 16 procesadores DX4, conectados por un canal Ethernet a 10 Mbps, al que llamaron Beowulf. En ese tiempo, los procesadores eran demasiado rápidos para las tarjetas de red y los equipos de comunicación. En busca de una solución a este problema, Becker modificó los controladores de las tarjetas Ethernet para el sistema operativo Linux, con el fin de crear uno que permitiera distribuir el tráfico de la red en dos o más tarjetas, con la finalidad de balancear el sistema. Migrar a otros protocolos de red más eficientes, implicaba costos muy elevados. Proporcionar a los usuarios sistemas consistentes, básicamente, en componentes que se tienen a disposición o que pueden conseguirse fácilmente en el mercado cibernético abriendo la posibilidad de satisfacer las necesidades de cómputo paralelo, tuvo un gran éxito, que la idea se propagó rápidamente a través de la NASA y los grupos académico y científico. La aceptación inmediata dio origen al proyecto Beowulf.
En aquella época fue necesario realizar este proceso porque se contaba con una red de 10 Mbps y un protocolo de comunicación Ethernet. Migrar a otros protocolos de red más eficientes, implicaba costos muy elevados. Afortunadamente contamos en la actualidad con equipos de comunicación rápidos y económicos, con una aceptación de protocolos más eficaces, tales como el Fast Ethernet.
Gracias a estas configuraciones, las universidades con recursos limitados y sin acceso a una supercomputadora, encontraron una excelente opción de acceso al cómputo de alto rendimiento, para trabajar problemas científicos complejos que utilizan programas o códigos paralelos. Esto se debe a que hoy en día se puede contar con diferentes componentes computacionales a precios accesibles, que pueden ser ensamblados perfectamente para dar origen a un cluster. Además, el desarrollo del software libre nos permite contar con sistemas operativos, tales como LINUX, compiladores GNU, herramientas de programación y bibliotecas tipo MPI y PVM, capaces de funcionar en diversas plataformas de computadoras, eliminando así la dependencia con el hardware, en caso de existir.

## Arquitectura

El Cluster Beowulf posee una arquitectura basada en multicomputadoras o memoria distribuida, lo cual puede ser utilizado para la computación paralela. Normalmente se tiene un nodo maestro y uno o más nodos esclavos, pero también existe la posibilidad de que se tenga más de un nodo maestro, y otros nodos dedicados a diversas tareas específicas. Los nodos son configurados y controlados por el nodo maestro, por lo que hacen solamente lo que éste le indique. Se comunican por medio de una red Ethernet, Fast-Ethernet, Giga-Ethernet u otra. Y la topología de red que se recomienda es un bus o estrella.
Al tener memoria distribuida, se tienen espacios físicos y virtuales para cada procesador, cada uno puede acceder a su memoria local, pero no a las memorias de otros procesadores, de esta forma los cambios que cada uno realice en su memoria local no tienen efecto sobre la memoria de otro procesador. Si un procesador debe acceder a un dato localizado en la memoria de otro procesador, estos se tendrían que comunicar vía mensaje a través de la red de interconexión.
Las direcciones de memoria de un procesador no se mapean al resto de procesadores, de modo que no existe el direccionamiento global. Cuando un proceso necesita acceder a los datos de otro, suele ser tarea del programador definir explícitamente cómo y cuándo se comunicaran. Otra tarea importante del programador es lograr la sincronización.
Esto dificulta la programación de estos sistemas. Sin embargo, se tiene la ventaja de que son más económicos a la hora de montar que los multiprocesadores, porque las multicomputadoras se pueden construir conectando procesadores a través de una red de interconexión estándar, sin necesidad de ser a la medida.
Está construido con componentes de hardware comunes en el mercado, similar a cualquier PC capaz de ejecutar Linux, adaptadores de Ethernet y switches estándares. Como no contiene elementos especiales, es totalmente reproducible. Una de las diferencias principales entre Beowulf y un cluster de estaciones de trabajo (COW, cluster of workstation) es el hecho de que Beowulf se comporta más como una sola máquina que como muchas ocasiones de trabajo conectadas.
Las máquinas grandes de Beowulf pueden tener más de un nodo maestro, y otros nodos dedicados a diversas tareas específicas, como, por ejemplo, consolas o estaciones de supervisión. En la mayoría de los casos los nodos esclavos de un sistema Beowulf son estaciones simples. Los nodos son configurados y controlados por el nodo maestro, y hace solamente lo que éste les indique.
1. Hardware:
Escalabilidad del hardware (también denominada “escalamiento vertical”). Se basa en la utilización de un gran equipo cuya capacidad se aumenta a medida que lo exige la carga de trabajo existente.
2. Software:
Escalabilidad del software (también denominada “escalamiento horizontal”). Se basa, en la utilización de un cluster compuesto de varios equipos de mediana potencia que funcionan en conjunto de forma muy parecida a como lo hacen las unidades de disco que se implementa en arreglo por medio de un RAID (arreglo redundante de discos de bajo costo). Del mismo modo que se añaden discos RAID para aumentar su rendimiento, se pueden añadir nodos a un cluster para aumentar también su rendimiento.

## Implementación

Actualmente el Clúster Beowulf se construye típicamente con varias computadoras estándar, conocidas como nodos, las cuales están conectadas a través de una red de alta velocidad como lo es Ethernet o InfiniBand y están regidas por un nodo maestro. Los nodos del clúster trabajan juntos para llevar a cabo tareas de computación intensiva utilizando técnicas de procesamiento paralelo y distribuido, mientras que el software de código abierto utilizado en el Clúster Beowulf, como lo es sistema operativo Linux y la biblioteca de MPI (Interfaz de paso de mensajes), permiten una mayor flexibilidad y capacidad de personalización.
La implementación de un Clúster Beowulf implica la construcción física del clúster y la configuración de su software y redes. A continuación, se presentan los pasos típicos para la implementación de un Clúster Beowulf:
* Seleccionar el hardware: El Cluster Beowulf se construye típicamente con varias computadoras estándar de bajo costo. Los nodos esclavos y el nodo maestro del clúster deben ser idénticos en términos de hardware y software para garantizar la compatibilidad y la coherencia.
* Configurar la red: La red de alta velocidad utilizada en el Cluster Beowulf, como Ethernet, debe configurarse para permitir la comunicación entre los nodos del cluster. La red debe ser de alta velocidad y baja latencia para garantizar un rendimiento óptimo.
* Instalar el sistema operativo: El sistema operativo Linux es una opción común para el Cluster Beowulf debido a su capacidad de personalización y flexibilidad. Cada nodo del cluster debe tener el mismo sistema operativo y las mismas bibliotecas para garantizar la compatibilidad.
* Configurar el software de clúster: Se deben instalar y configurar las bibliotecas de MPI y otros programas de software de clúster para permitir la comunicación y la coordinación entre los nodos del clúster.
* Configurar la gestión de recursos: El software de gestión de recursos, como OpenPBS o LSF, se utiliza para asignar tareas y recursos de manera eficiente en el clúster.
* Pruebas y ajustes: Una vez que se ha implementado el Clúster Beowulf, se deben realizar pruebas para asegurarse de que funcione correctamente y se debe ajustar la configuración según sea necesario para optimizar el rendimiento.

## Aplicaciones de los Clusters-Beowulf

Actualmente están presentes en varias áreas de la ciencia y en la iniciativa privada. Su demanda está asociada básicamente a programas o aplicaciones que requieren enormes recursos computacionales. Debido a su gran popularidad en los últimos años, son excelentes herramientas de apoyo para grupos de investigación que requieren cómputo paralelo de alto rendimiento Dentro de las aplicaciones más comunes se encuentran: las simulaciones numéricas, el cómputo y la visualización científica, la animación por computadora y como herramienta para optimizar el tiempo de render en el desarrollo de películas, los servidores Web, las bases de datos, el análisis numérico y la enseñanza.
Los clusters-Beowulf juegan un papel importante en la disminución del tiempo de búsqueda en bases de datos de servidores tipo Yahoo o en compañías bancarias, donde se manejan grandes volúmenes de datos.
* Simulaciones y análisis numérico.
* Servidores Web.
* Animación por computadora.
* Optimizar tiempo.
* Desarrollo de películas.
* Visualización científica.
* Bases de datos.

## Beneficios del Cluster Beowulf

* Rentable: Se construyen a partir de hardware barato y común en el mercado, por lo que son reproducibles y se facilita el mantenimiento.
* Tecnología: Al utilizar componentes del mercado común, es fácil emplear las nuevas tecnologías de software y de hardware.
* Escalabilidad: Se refiere a cuando aumenta el procesamiento, porque el rendimiento y el tamaño puede ser fácilmente ampliado añadiendo más nodos.
* Disponibilidad: Cada nodo es una máquina individual, por lo que al fallar un nodo no afecta a otros.

## Sistema Operativo

En la actualidad hay una serie de distribuciones de Linux, y al menos una BSD, que están diseñados para la construcción de clusters Beowulf. Estos incluyen:
* MOSIX
* ClusterKnoppix, basado en Knoppix
* Kerrighed
* Rocks Cluster Distribution
* Scyld
* DragonFly BSD
* Quantian, un live DVD con aplicaciones científicas, basada en Knoppix y ClusterKnoppix