Un grupo de computadoras es un conjunto de computadoras que trabajan juntas para que puedan verse como un solo sistema. A diferencia de las computadoras grid , 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 rápidas redes de área local , con cada nodo (computadora utilizada como servidor) ejecutando su propia instancia de un sistema operativo . En la mayoría de las circunstancias, todos los nodos usan el mismo hardware [1] [ se necesita una mejor fuente ] y el mismo sistema operativo, aunque en algunas configuraciones (por ejemplo, usando Open Source Cluster Application Resources (OSCAR)), se pueden usar diferentes sistemas operativos en cada computadora, o hardware diferente. [2]
Los clústeres generalmente se implementan para mejorar el rendimiento y la disponibilidad con respecto a los de una sola computadora, aunque generalmente son mucho más rentables que las computadoras individuales de velocidad o disponibilidad comparables. [3]
Los clusters 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 necesaria ] Tienen una amplia gama de aplicabilidad e implementación, que van desde grupos de pequeñas empresas con un puñado de nodos hasta algunas de las supercomputadoras más rápidas del mundo, como la Sequoia de IBM . [4] Antes de la llegada de los clusters, se empleaban mainframes de una sola unidad tolerantes a fallas con redundancia modular ; pero el menor costo inicial de los clusters y la mayor velocidad de la estructura de la red han favorecido la adopción de clusters. 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 más potencia informática y mayor confiabilidad mediante la orquestación de una serie de computadoras comerciales de bajo costo ha dado lugar a una variedad de arquitecturas y configuraciones.
El enfoque de agrupación de computadoras generalmente (pero no siempre) conecta una cantidad de nodos informáticos fácilmente 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 informáticos están orquestadas por un "middleware de agrupación", una capa de software que se sitúa encima de los nodos y permite a los usuarios tratar el clúster como una unidad informática cohesiva, 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 administración centralizada que hace que los nodos estén disponibles como servidores compartidos orquestados. Se diferencia de otros enfoques, como la computación peer-to-peer o grid , que también utilizan muchos nodos, pero con una naturaleza mucho más distribuida . [6]
Un grupo 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 unas pocas computadoras personales para producir una alternativa rentable a la informática tradicional de alto rendimiento . Uno de los primeros proyectos que demostró la viabilidad del concepto fue el 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 constar de sólo unas pocas computadoras personales conectadas por una red simple, la arquitectura del clúster también puede usarse para lograr niveles muy altos de rendimiento. La lista semestral de la organización TOP500 de las 500 supercomputadoras más rápidas 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 de memoria distribuida . [9]
Greg Pfister ha declarado que los clústeres no fueron inventados por ningún proveedor específico sino por clientes que no podían colocar 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 medio para realizar cualquier tipo de trabajo paralelo fue posiblemente inventada por Gene Amdahl de IBM , quien en 1967 publicó lo que se ha llegado a considerar como el artículo fundamental sobre el procesamiento paralelo: la Ley de Amdahl .
La historia de los primeros grupos de computadoras está más o menos directamente ligada a 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 un grupo de computadoras de facto.
El primer sistema de producción diseñado como cluster fue el Burroughs B5700 a mediados de los años 1960. Esto permitió que hasta cuatro computadoras, cada una con uno o dos procesadores, estuvieran estrechamente acopladas 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 se podía reiniciar sin interrumpir el funcionamiento general.
El primer producto comercial de agrupación en clústeres débilmente acoplado fue el sistema "Attached Resource Computer" (ARC) de Datapoint Corporation , desarrollado en 1977 y que utilizaba ARCnet como interfaz del clúster. La agrupación en clústeres 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 solo admitían computación paralela , sino también sistemas de archivos compartidos y dispositivos periféricos . La idea era proporcionar las ventajas del procesamiento paralelo, manteniendo al mismo tiempo la confiabilidad y singularidad de los datos. Otros dos primeros grupos comerciales notables fueron el Tandem NonStop (un producto comercial de alta disponibilidad de 1976) [11] [12] y el IBM S/390 Parallel Sysplex (alrededor de 1994, principalmente para uso comercial).
En el mismo período de tiempo, mientras los grupos de computadoras usaban el paralelismo fuera de la computadora en una red comercial, las supercomputadoras comenzaron a usarlos 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 mediante procesamiento vectorial . [13] Si bien las primeras supercomputadoras excluían los clústeres y dependían de la memoria compartida , con el tiempo algunas de las supercomputadoras más rápidas (por ejemplo, la computadora K ) dependían de arquitecturas de clúster.
Los grupos de computadoras se pueden configurar para diferentes propósitos, que van desde necesidades comerciales de propósito general, como soporte de servicios web, hasta cálculos científicos con uso intensivo de computación. 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 "grupo 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 el equilibrio de 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 utilizar simplemente un método de operación por turnos simple 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 grupo de computadoras podría soportar simulaciones computacionales de accidentes de vehículos o del clima. Los grupos de computadoras muy estrechamente acoplados están diseñados para trabajos que pueden aproximarse 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. Operan al tener nodos redundantes , que luego se utilizan para brindar 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 puntos únicos de falla . Existen implementaciones comerciales de clústeres de alta disponibilidad para muchos sistemas operativos. El proyecto Linux-HA es un paquete HA de software gratuito 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 con un nodo que funciona mal ) permite la escalabilidad y, en situaciones de alto rendimiento, una baja frecuencia de rutinas de mantenimiento, consolidación de recursos (por ejemplo, RAID ) y gestión centralizada. Las ventajas incluyen permitir la recuperación de datos en caso de un desastre y proporcionar procesamiento de datos paralelo y una alta capacidad de procesamiento. [16] [17]
En términos de escalabilidad, los clústeres la proporcionan gracias a su capacidad de agregar nodos horizontalmente. 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 en el clúster. Esta propiedad de los clústeres de computadoras puede permitir que una mayor cantidad de computadoras de menor rendimiento ejecuten cargas computacionales mayores.
Al agregar un nuevo nodo a un clúster, la confiabilidad aumenta porque no es necesario desactivar todo el clúster. Un solo nodo se puede desactivar para 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 para el uso de sistemas de archivos distribuidos y RAID , los cuales pueden aumentar la confiabilidad y velocidad de un clúster.
Uno de los problemas al diseñar un clúster es qué tan estrechamente acoplados pueden estar los nodos individuales. Por ejemplo, un solo trabajo de computadora puede requerir comunicación frecuente entre nodos: esto implica que el clúster comparte una red dedicada, está densamente ubicado y probablemente tenga 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, acercándose a la computación en red .
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 se encarga de la programación y gestión de los esclavos. [15] En una implementación típica, el Maestro tiene dos interfaces de red, una que se comunica con la red privada de Beowulf para los esclavos y la otra para la red de propósito general de la organización. [15] Las computadoras esclavas generalmente 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 los esclavos acceden según sea necesario. [15]
Un grupo DEGIMA de 144 nodos de propósito especial está configurado 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 informática de cada generación de consolas de juegos , ha surgido un uso novedoso en el que se reutilizan en clústeres de informática 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 juego de consumo es la estación de trabajo Nvidia Tesla Personal Supercomputer , que utiliza múltiples chips de procesador de acelerador 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 de sus GPU) para realizar cálculos para computación grid es muchísimo más económico que utilizar CPU, a pesar de ser menos precisos. Sin embargo, cuando se utilizan valores de doble precisión, se vuelven tan precisos como para trabajar con las CPU y siguen siendo mucho menos costosos (coste 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 están pintados arriba con una capa virtual para que se vean similares. [19] [ cita necesaria ] [ aclaración necesaria ] El clúster también se puede virtualizar 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 aparecieron los grupos de computadoras durante la década de 1980, también aparecieron las supercomputadoras . Uno de los elementos que distinguió a las tres clases en ese momento fue que las primeras supercomputadoras dependían de la memoria compartida . Los clústeres no suelen utilizar memoria físicamente compartida, 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 ordenadores modernos. [ cita requerida ] Los ejemplos incluyen el sistema de archivos paralelo general de IBM , los volúmenes compartidos en clúster de Microsoft o el sistema de archivos en clúster de Oracle .
Dos enfoques ampliamente utilizados para la comunicación entre nodos del clúster son MPI ( Message Passing Interface ) y PVM ( Parallel Virtual Machine ). [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 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 la década de 1990 a partir de discusiones entre 40 organizaciones. El esfuerzo inicial fue apoyado por ARPA y la Fundación Nacional de Ciencias . 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 de MPI suelen utilizar TCP/IP y conexiones de 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 ha sido 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 en ocasiones 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 su facilidad de administración. [23]
Cuando un gran clúster multiusuario necesita acceder a grandes cantidades de datos, la programación de tareas se convierte en un desafío. En un clúster 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, asignar tareas a núcleos de CPU y dispositivos GPU presenta desafíos importantes. [24] Esta es un área de investigación en curso; Se han propuesto y estudiado algoritmos que combinan y amplían MapReduce y Hadoop . [24]
Cuando falla un nodo en un clúster, se pueden emplear estrategias como " cercados " para mantener operativo el resto del sistema. [25] [26] El cercado es el proceso de aislar un nodo o proteger recursos compartidos cuando un nodo parece estar funcionando mal. Hay dos clases de métodos de cercado; uno desactiva un nodo en sí y el otro no permite el acceso a recursos como discos compartidos. [25]
El método STONITH significa "Disparar al otro nodo en la cabeza", lo que significa que el nodo sospechoso está desactivado o apagado. Por ejemplo, las cercas eléctricas utilizan un controlador de energía para apagar un nodo inoperable. [25]
El enfoque de protección de recursos no permite el acceso a los recursos sin apagar el nodo. Esto puede incluir barreras de reserva persistentes a través de SCSI3 , barreras de canal de fibra para deshabilitar el puerto de canal de fibra o barreras de dispositivo de bloqueo 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 admitir una gran cantidad de usuarios y, por lo general, cada solicitud de usuario se enruta a un nodo específico, logrando el paralelismo de tareas sin la cooperación de múltiples nodos, dado que el objetivo principal del sistema es proporcionar rapidez al usuario. acceso a datos compartidos. Sin embargo, los "clústeres de computadoras" que realizan cálculos complejos para un pequeño número de usuarios deben 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 requiere primitivos de lenguaje paralelo y herramientas adecuadas, como las analizadas en el Foro de depuración de alto rendimiento (HPDF), que dio lugar a las especificaciones HPD. [21] [29] Luego se desarrollaron herramientas como TotalView para depurar implementaciones paralelas en grupos 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 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 India, permite observar y gestionar visualmente grandes clústeres. [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 clusters grandes, dado que a medida que aumenta el número de nodos, también aumenta la probabilidad de falla del 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 . Servidor virtual Linux , Linux-HA : clústeres basados en directores que permiten que las solicitudes entrantes de servicios se distribuyan entre múltiples nodos del clúster. MOSIX , LinuxPMI , Kerrighed y OpenSSI son clústeres completos integrados en el kernel que permiten la migración automática de procesos entre nodos homogéneos. OpenSSI , openMosix y Kerrighed son implementaciones de imágenes de un solo sistema .
El clúster de computadoras Microsoft Windows Server 2003 basado en la plataforma Windows Server proporciona piezas para computación de alto rendimiento como el programador de trabajos, la biblioteca MSMPI y herramientas de administración.
gLite es un conjunto de tecnologías middleware creadas por el proyecto Enabling Grids for E-sciencE (EGEE).
slurm también se utiliza para programar y administrar algunos de los grupos de supercomputadoras más grandes (consulte la lista top500).
Aunque la mayoría de los grupos de computadoras son elementos permanentes, se han realizado intentos de computación flash mob para construir grupos de corta duración para cálculos específicos. Sin embargo, los sistemas informáticos voluntarios de mayor escala, como los sistemas basados en BOINC, han tenido más seguidores.