Un clúster de computadoras es un conjunto de computadoras que trabajan juntas de modo que pueden considerarse como un solo sistema. A diferencia de las computadoras en red , los clústeres de computadoras tienen cada nodo configurado para realizar la misma tarea, controlada y programada por software. La manifestación más reciente de la computación en clúster es la computación en la nube .
Los componentes de un clúster suelen estar conectados entre sí a través de redes de área local rápidas , y cada nodo (computadora utilizada como servidor) ejecuta su propia instancia de un sistema operativo . En la mayoría de los casos, todos los nodos utilizan el mismo hardware [1] [ se necesita una mejor fuente ] y el mismo sistema operativo, aunque en algunas configuraciones (por ejemplo, utilizando recursos de aplicación de clúster de código abierto (OSCAR)), se pueden utilizar diferentes sistemas operativos en cada computadora o hardware diferente. [2]
Los clústeres se suelen implementar para mejorar el rendimiento y la disponibilidad con respecto a una sola computadora, aunque suelen ser mucho más rentables que computadoras individuales de velocidad o disponibilidad comparables. [3]
Los clústeres de computadoras surgieron como resultado de la convergencia de una serie de tendencias informáticas, incluida la disponibilidad de microprocesadores de bajo costo, redes de alta velocidad y software para computación distribuida de alto rendimiento . [ cita requerida ] Tienen una amplia gama de aplicabilidad e implementación, que van desde pequeños clústeres de negocios con un puñado de nodos hasta algunas de las supercomputadoras más rápidas del mundo, como Sequoia de IBM . [4] Antes de la llegada de los clústeres, se empleaban mainframes tolerantes a fallas de una sola unidad con redundancia modular ; pero el menor costo inicial de los clústeres y la mayor velocidad de la estructura de red han favorecido la adopción de clústeres. A diferencia de los mainframes de alta confiabilidad, los clústeres son más baratos de escalar, pero también tienen una mayor complejidad en el manejo de errores, ya que en los clústeres los modos de error no son opacos para los programas en ejecución. [5]
El deseo de obtener mayor poder de procesamiento y mejor confiabilidad mediante la orquestación de una serie de computadoras comerciales de bajo costo listas para usar ha dado lugar a una variedad de arquitecturas y configuraciones.
El enfoque de agrupamiento de computadoras generalmente (pero no siempre) conecta una cantidad de nodos de computación disponibles (por ejemplo, computadoras personales utilizadas como servidores) a través de una red de área local rápida . [6] Las actividades de los nodos de computación están orquestadas por un "middleware de agrupamiento", una capa de software que se ubica sobre los nodos y permite a los usuarios tratar el clúster como una unidad de computación cohesiva en general, por ejemplo, a través de un concepto de imagen de sistema único . [6]
La agrupación de computadoras se basa en un enfoque de gestión centralizada que hace que los nodos estén disponibles como servidores compartidos orquestados. Se diferencia de otros enfoques, como la computación entre pares o la computación en cuadrícula , que también utilizan muchos nodos, pero con una naturaleza mucho más distribuida . [6]
Un clúster de computadoras puede ser un sistema simple de dos nodos que simplemente conecta dos computadoras personales, o puede ser una supercomputadora muy rápida . Un enfoque básico para construir un clúster es el de un clúster Beowulf que puede construirse con algunas computadoras personales para producir una alternativa rentable a la computación tradicional de alto rendimiento . Un proyecto temprano que mostró la viabilidad del concepto fue la Stone Soupercomputer de 133 nodos . [7] Los desarrolladores utilizaron Linux , el kit de herramientas Parallel Virtual Machine y la biblioteca Message Passing Interface para lograr un alto rendimiento a un costo relativamente bajo. [8]
Aunque un clúster puede estar formado por unas pocas computadoras personales conectadas por una red sencilla, la arquitectura de clúster también puede utilizarse para alcanzar niveles muy altos de rendimiento. La lista semestral de las 500 supercomputadoras más rápidas de la organización TOP500 a menudo incluye muchos clústeres; por ejemplo, la máquina más rápida del mundo en 2011 fue la computadora K , que tiene una arquitectura de clúster con memoria distribuida . [9]
Greg Pfister ha afirmado que los clústeres no fueron inventados por ningún proveedor específico, sino por clientes que no podían hacer caber todo su trabajo en una computadora o necesitaban una copia de seguridad. [10] Pfister estima la fecha en algún momento de la década de 1960. La base de ingeniería formal de la computación en clúster como un medio para hacer trabajo paralelo de cualquier tipo fue inventada posiblemente por Gene Amdahl de IBM , quien en 1967 publicó lo que ha llegado a considerarse como el artículo seminal sobre el procesamiento paralelo: la Ley de Amdahl .
La historia de los primeros clústeres de computadoras está más o menos directamente relacionada con la historia de las primeras redes, ya que una de las principales motivaciones para el desarrollo de una red era vincular recursos informáticos, creando de facto un clúster de computadoras.
El primer sistema de producción diseñado como clúster fue el Burroughs B5700 a mediados de los años 60. Este sistema permitía que hasta cuatro computadoras, cada una con uno o dos procesadores, se acoplaran estrechamente a un subsistema de almacenamiento en disco común para distribuir la carga de trabajo. A diferencia de los sistemas multiprocesador estándar, cada computadora podía reiniciarse sin interrumpir el funcionamiento general.
El primer producto comercial de clusterización acoplada de forma flexible fue el sistema "Attached Resource Computer" (ARC) de Datapoint Corporation , desarrollado en 1977 y que utilizaba ARCnet como interfaz de clusterización. La clusterización en sí no despegó realmente hasta que Digital Equipment Corporation lanzó su producto VAXcluster en 1984 para el sistema operativo VMS . Los productos ARC y VAXcluster no sólo admitían computación paralela , sino que también compartían sistemas de archivos y dispositivos periféricos . La idea era proporcionar las ventajas del procesamiento paralelo, manteniendo al mismo tiempo la fiabilidad y la singularidad de los datos. Otros dos clusters comerciales tempranos dignos de mención fueron Tandem NonStop (un producto comercial de alta disponibilidad de 1976) [11] [12] y IBM S/390 Parallel Sysplex (circa 1994, principalmente para uso empresarial).
En el mismo período de tiempo, mientras que los clústeres de computadoras utilizaban paralelismo fuera de la computadora en una red de productos básicos, las supercomputadoras comenzaron a utilizarlos dentro de la misma computadora. Tras el éxito del CDC 6600 en 1964, el Cray 1 se entregó en 1976 e introdujo el paralelismo interno a través del procesamiento vectorial . [13] Si bien las primeras supercomputadoras excluyeron los clústeres y dependieron de la memoria compartida , con el tiempo algunas de las supercomputadoras más rápidas (por ejemplo, la computadora K ) se basaron en arquitecturas de clúster.
Los clústeres de computadoras pueden configurarse para distintos propósitos, desde necesidades empresariales de propósito general, como soporte de servicios web, hasta cálculos científicos con uso intensivo de recursos computacionales. En cualquier caso, el clúster puede utilizar un enfoque de alta disponibilidad . Tenga en cuenta que los atributos que se describen a continuación no son exclusivos y que un "clúster de computadoras" también puede utilizar un enfoque de alta disponibilidad, etc.
Los clústeres de " equilibrio de carga " son configuraciones en las que los nodos del clúster comparten la carga de trabajo computacional para proporcionar un mejor rendimiento general. Por ejemplo, un clúster de servidores web puede asignar diferentes consultas a diferentes nodos, por lo que se optimizará el tiempo de respuesta general. [14] Sin embargo, los enfoques para equilibrar la carga pueden diferir significativamente entre aplicaciones, por ejemplo, un clúster de alto rendimiento utilizado para cálculos científicos equilibraría la carga con diferentes algoritmos de un clúster de servidores web que puede simplemente usar un método simple de rotación por turnos asignando cada nueva solicitud a un nodo diferente. [14]
Los clústeres de computadoras se utilizan para fines de computación intensiva, en lugar de manejar operaciones orientadas a IO como servicios web o bases de datos. [15] Por ejemplo, un clúster de computadoras podría soportar simulaciones computacionales de accidentes de vehículos o del clima. Los clústeres de computadoras muy estrechamente acoplados están diseñados para trabajos que pueden acercarse a la " supercomputación ".
Los " clústeres de alta disponibilidad " (también conocidos como clústeres de conmutación por error o clústeres HA) mejoran la disponibilidad del enfoque de clúster. Funcionan con nodos redundantes , que luego se utilizan para proporcionar servicio cuando fallan los componentes del sistema. Las implementaciones de clústeres HA intentan utilizar la redundancia de los componentes del clúster para eliminar los puntos únicos de falla . Existen implementaciones comerciales de clústeres de alta disponibilidad para muchos sistemas operativos. El proyecto Linux-HA es un paquete de HA de software libre de uso común para el sistema operativo Linux .
Los clústeres se diseñan principalmente teniendo en cuenta el rendimiento, pero las instalaciones se basan en muchos otros factores. La tolerancia a fallos ( la capacidad de un sistema de seguir funcionando a pesar de un nodo que funciona mal ) permite la escalabilidad y, en situaciones de alto rendimiento, permite una baja frecuencia de rutinas de mantenimiento, la consolidación de recursos (por ejemplo, RAID ) y la gestión centralizada. Las ventajas incluyen la habilitación de la recuperación de datos en caso de un desastre y el suministro de procesamiento de datos en paralelo y una alta capacidad de procesamiento. [16] [17]
En términos de escalabilidad, los clústeres ofrecen esta capacidad en su capacidad de agregar nodos de manera horizontal. Esto significa que se pueden agregar más computadoras al clúster para mejorar su rendimiento, redundancia y tolerancia a fallas. Esta puede ser una solución económica para un clúster de mayor rendimiento en comparación con la ampliación de un solo nodo del clúster. Esta propiedad de los clústeres de computadoras puede permitir que se ejecuten cargas computacionales más grandes por parte de una mayor cantidad de computadoras de menor rendimiento.
Al agregar un nuevo nodo a un clúster, la confiabilidad aumenta porque no es necesario desconectar todo el clúster. Se puede desconectar un solo nodo para realizar tareas de mantenimiento, mientras que el resto del clúster asume la carga de ese nodo individual.
Si tiene una gran cantidad de computadoras agrupadas, esto se presta al uso de sistemas de archivos distribuidos y RAID , los cuales pueden aumentar la confiabilidad y la velocidad de un clúster.
Uno de los problemas a la hora de diseñar un clúster es el grado de acoplamiento entre los nodos individuales. Por ejemplo, un único trabajo informático puede requerir una comunicación frecuente entre nodos: esto implica que el clúster comparte una red dedicada, está densamente ubicado y probablemente tiene nodos homogéneos. El otro extremo es cuando un trabajo informático utiliza uno o pocos nodos y necesita poca o ninguna comunicación entre nodos, lo que se acerca a la computación en cuadrícula .
En un clúster Beowulf , los programas de aplicación nunca ven los nodos computacionales (también llamados computadoras esclavas) sino que solo interactúan con el "Maestro", que es una computadora específica que maneja la programación y administración de las esclavas. [15] En una implementación típica, el Maestro tiene dos interfaces de red, una que se comunica con la red Beowulf privada para las esclavas, la otra para la red de propósito general de la organización. [15] Las computadoras esclavas normalmente tienen su propia versión del mismo sistema operativo, y memoria local y espacio en disco. Sin embargo, la red esclava privada también puede tener un servidor de archivos grande y compartido que almacena datos persistentes globales, a los que acceden las esclavas según sea necesario. [15]
Un clúster DEGIMA de 144 nodos de propósito especial está ajustado para ejecutar simulaciones astrofísicas de N cuerpos utilizando el código de árbol paralelo Multiple-Walk, en lugar de cálculos científicos de propósito general. [18]
Debido a la creciente potencia de cálculo de cada generación de consolas de juegos , ha surgido un uso novedoso en el que se las reutiliza en clústeres de computación de alto rendimiento (HPC). Algunos ejemplos de clústeres de consolas de juegos son los clústeres de Sony PlayStation y los clústeres de Microsoft Xbox . Otro ejemplo de producto de juegos de consumo es la estación de trabajo de supercomputadora personal Nvidia Tesla , que utiliza múltiples chips de procesador aceleradores de gráficos. Además de las consolas de juegos, también se pueden utilizar tarjetas gráficas de alta gama. El uso de tarjetas gráficas (o más bien sus GPU) para realizar cálculos para la computación en cuadrícula es mucho más económico que el uso de CPU, a pesar de ser menos precisos. Sin embargo, cuando se utilizan valores de doble precisión, se vuelven tan precisos para trabajar como las CPU y siguen siendo mucho menos costosos (costo de compra). [2]
Históricamente, los clústeres de computadoras se han ejecutado en computadoras físicas separadas con el mismo sistema operativo . Con la llegada de la virtualización , los nodos del clúster pueden ejecutarse en computadoras físicas separadas con diferentes sistemas operativos que se pintan arriba con una capa virtual para que parezcan similares. [19] [ cita requerida ] [ aclaración necesaria ] El clúster también puede virtualizarse en varias configuraciones a medida que se realiza el mantenimiento; un ejemplo de implementación es Xen como administrador de virtualización con Linux-HA . [19]
A medida que los clústeres de computadoras fueron apareciendo durante la década de 1980, también lo hicieron las supercomputadoras . Uno de los elementos que distinguía a las tres clases en ese momento era que las primeras supercomputadoras dependían de la memoria compartida . Los clústeres no suelen utilizar memoria compartida físicamente, mientras que muchas arquitecturas de supercomputadoras también la han abandonado.
Sin embargo, el uso de un sistema de archivos en clúster es esencial en los clústeres de computadoras modernas. [ cita requerida ] Algunos ejemplos incluyen el Sistema de archivos paralelos generales de IBM , los Volúmenes compartidos de clúster de Microsoft o el Sistema de archivos de clúster de Oracle .
Dos enfoques ampliamente utilizados para la comunicación entre nodos del clúster son MPI ( Interfaz de paso de mensajes ) y PVM ( Máquina virtual paralela ). [20]
PVM se desarrolló en el Laboratorio Nacional de Oak Ridge alrededor de 1989, antes de que MPI estuviera disponible. PVM debe instalarse directamente en cada nodo del clúster y proporciona un conjunto de bibliotecas de software que pintan el nodo como una "máquina virtual paralela". PVM proporciona un entorno de tiempo de ejecución para el paso de mensajes, la gestión de tareas y recursos y la notificación de fallos. PVM puede ser utilizado por programas de usuario escritos en C, C++ o Fortran, etc. [20] [21]
MPI surgió a principios de los años 90 a partir de discusiones entre 40 organizaciones. El esfuerzo inicial fue apoyado por ARPA y National Science Foundation . En lugar de empezar de nuevo, el diseño de MPI se basó en varias características disponibles en los sistemas comerciales de la época. Las especificaciones MPI dieron lugar a implementaciones específicas. Las implementaciones MPI suelen utilizar conexiones TCP/IP y socket. [20] MPI es ahora un modelo de comunicaciones ampliamente disponible que permite escribir programas paralelos en lenguajes como C , Fortran , Python , etc. [21] Por lo tanto, a diferencia de PVM que proporciona una implementación concreta, MPI es una especificación que se ha implementado en sistemas como MPICH y Open MPI . [21] [22]
Uno de los desafíos en el uso de un clúster de computadoras es el costo de administrarlo, que a veces puede ser tan alto como el costo de administrar N máquinas independientes, si el clúster tiene N nodos. [23] En algunos casos, esto proporciona una ventaja a las arquitecturas de memoria compartida con menores costos de administración. [23] Esto también ha hecho que las máquinas virtuales sean populares, debido a la facilidad de administración. [23]
Cuando un clúster multiusuario de gran tamaño necesita acceder a grandes cantidades de datos, la programación de tareas se convierte en un desafío. En un clúster de CPU-GPU heterogéneo con un entorno de aplicaciones complejo, el rendimiento de cada trabajo depende de las características del clúster subyacente. Por lo tanto, la asignación de tareas a núcleos de CPU y dispositivos GPU plantea desafíos importantes. [24] Esta es un área de investigación en curso; se han propuesto y estudiado algoritmos que combinan y extienden MapReduce y Hadoop . [24]
Cuando falla un nodo de un clúster, se pueden emplear estrategias como el " cercado " para mantener el resto del sistema operativo. [25] [26] El cercado es el proceso de aislar un nodo o proteger recursos compartidos cuando un nodo parece funcionar mal. Hay dos clases de métodos de cercado: uno deshabilita un nodo en sí mismo y el otro impide el acceso a recursos como discos compartidos. [25]
El método STONITH significa "Shoot The Other Node In The Head" (Disparar al otro nodo en la cabeza), lo que significa que el nodo sospechoso se desactiva o se apaga. Por ejemplo, la cerca eléctrica utiliza un controlador de energía para apagar un nodo inoperante. [25]
El enfoque de cercado de recursos impide el acceso a los recursos sin apagar el nodo. Esto puede incluir cercado de reserva persistente a través de SCSI3 , cercado de canal de fibra para deshabilitar el puerto de canal de fibra o cercado de dispositivo de bloque de red global (GNBD) para deshabilitar el acceso al servidor GNBD.
Los clústeres de equilibrio de carga, como los servidores web, utilizan arquitecturas de clúster para dar soporte a una gran cantidad de usuarios y, por lo general, cada solicitud de usuario se enruta a un nodo específico, lo que permite lograr paralelismo de tareas sin la cooperación de varios nodos, dado que el objetivo principal del sistema es proporcionar un acceso rápido de los usuarios a los datos compartidos. Sin embargo, los "clústeres de computadoras" que realizan cálculos complejos para una pequeña cantidad de usuarios necesitan aprovechar las capacidades de procesamiento paralelo del clúster y dividir "el mismo cálculo" entre varios nodos. [27]
La paralelización automática de programas sigue siendo un desafío técnico, pero se pueden utilizar modelos de programación paralela para lograr un mayor grado de paralelismo mediante la ejecución simultánea de partes separadas de un programa en diferentes procesadores. [27] [28]
El desarrollo y la depuración de programas paralelos en un clúster requieren primitivos de lenguaje paralelo y herramientas adecuadas como las analizadas en el Foro de depuración de alto rendimiento (HPDF) que dieron como resultado las especificaciones HPD. [21] [29] Luego se desarrollaron herramientas como TotalView para depurar implementaciones paralelas en clústeres de computadoras que utilizan la Interfaz de paso de mensajes (MPI) o la Máquina virtual paralela (PVM) para el paso de mensajes.
El sistema de la Red de Estaciones de Trabajo (NOW) de la Universidad de California en Berkeley recopila datos de clústeres y los almacena en una base de datos, mientras que un sistema como PARMON, desarrollado en la India, permite observar y gestionar visualmente clústeres de gran tamaño. [21]
Los puntos de control de aplicaciones se pueden utilizar para restaurar un estado determinado del sistema cuando un nodo falla durante un cálculo prolongado de varios nodos. [30] Esto es esencial en clústeres grandes, dado que a medida que aumenta el número de nodos, también lo hace la probabilidad de que falle un nodo bajo cargas computacionales pesadas. Los puntos de control pueden restaurar el sistema a un estado estable para que el procesamiento pueda reanudarse sin necesidad de volver a calcular los resultados. [30]
El mundo Linux admite varios software de clúster; para la agrupación de aplicaciones, existen distcc y MPICH . Linux Virtual Server , Linux-HA : clústeres basados en directores que permiten que las solicitudes entrantes de servicios se distribuyan entre varios nodos del clúster. MOSIX , LinuxPMI , Kerrighed y OpenSSI son clústeres completos integrados en el núcleo que permiten la migración automática de procesos entre nodos homogéneos. OpenSSI , openMosix y Kerrighed son implementaciones de imagen de un solo sistema .
El clúster de computadoras Microsoft Windows Server 2003 basado en la plataforma Windows Server proporciona elementos para computación de alto rendimiento como el programador de tareas, la biblioteca MSMPI y herramientas de administración.
gLite es un conjunto de tecnologías de middleware creadas por el proyecto Enabling Grids for E-sciencE (EGEE).
slurm también se utiliza para programar y administrar algunos de los clústeres de supercomputadoras más grandes (ver la lista top500).
Aunque la mayoría de los clústeres de computadoras son instalaciones permanentes, se han hecho intentos de computación flash mob para construir clústeres de corta duración para cálculos específicos. Sin embargo, los sistemas de computación voluntaria a mayor escala , como los sistemas basados en BOINC, han tenido más seguidores.