Algunas preguntas interesantes Creo que puede estar malentendiendo un poco cómo funcionan las "supercomputadoras" creadas con Raspberry Pis. No funcionan como un sistema de reparto de carga automático. Están diseñados para algo llamado programación paralela , donde una tarea compleja se divide en partes que se pueden realizar simultáneamente. El Pi principal en el clúster (nodo principal) se encarga de organizar la tarea general, y cada Pi en el clúster (nodos de cliente) realiza su trabajo asignado e informa los resultados al nodo principal. Las bibliotecas como OpenMPI son clave para esto.
Además, los clústeres de Raspberry Pi que se han creado no se han creado como dispositivos informáticos eficientes. Se han construido como plataformas de desarrollo . Es significativamente más barato comprar 32 Raspberry Pis que 32 PC de escritorio. Puede desarrollar y probar su software de programación paralela mucho más barato de esa manera. La única alternativa si no tiene Pis o PC es solicitar tiempo de CPU en una supercomputadora real. Dependiendo del tamaño de la computadora en cuestión, hacerlo puede costar dinero o tener largos tiempos de espera antes de que los recursos estén disponibles. Por eso la gente ha construido sus propios grupos personales. ¡Solo tiene sentido ejecutar su aplicación en la computadora real cuando sepa que funciona!
Por lo tanto, tenga esto en cuenta y continúe con sus preguntas específicas.
En un grupo apropiado, Pis no actúa como una sola computadora virtual. Tiene un control suelto sobre cada Pi en forma de una tarea o sistema de asignación de recursos como Sun Grid Engine . Las tareas se asignan a los nodos según sea necesario, y cuando finalizan las tareas, los recursos de ese nodo se liberan para nuevas tareas.
En un clúster, dado que cada Pi ejecuta su propia copia de Linux, cada Pi conservaría el control local de sus puertos GPIO. No estoy seguro de cómo el software realmente usaría eso en un entorno informático paralelo, pero ahí está.
Un clúster realmente no hace que un Pi sea más rápido, porque no son una sola computadora. Lo que ganas es simplemente la capacidad de hacer más a la vez. No estás limitado a múltiplos de dos. Sin embargo, existe un límite superior realmente práctico para las computadoras en clúster, dependiendo de las tareas que ejecute. Imagínese si está ejecutando un cálculo paralelo en muchos Pis que requiere 200 pasos. Sin embargo, cada paso siguiente requiere la información que cada Pi calculó en su paso anterior. Por lo tanto, cada Pi necesita recibir datos de cada otro Pi en cada iteración. Dependiendo de la cantidad de tiempo que toma cada iteración para calcular, puede terminar pasando más tiempo enviando datos que calculando. Es por eso que la mayoría de las supercomputadoras usan InfiniBandred. Es muy rápido, por lo que puedes hacer más cálculos. La solución a esto es usar menos Pis pero hacer que trabajen más en cada iteración, pero eso puede no ser posible dependiendo de su algoritmo. De ahí el límite superior práctico. (En Pis esto sería particularmente malo porque el USB Ethernet es bastante lento).
Entonces, en una aplicación práctica, ¡alojamiento web distribuido! Puede aprovechar múltiples Pis aquí, simplemente no es un clúster regular. Digamos que tienes 5 Pis. Los llamaremos GatewayPi, WebPi1, WebPi2, WebPi3 y DataPi. GatewayPi se enfrenta a Internet, ejecuta Nginix para manejar solicitudes web, pero no realiza ningún procesamiento. En cambio, lo que hace es equilibrar la carga. Utiliza proxy y reenvía aleatoriamente la solicitud entrante a WebPi1, WebPi2 o WebPi3. Acabamos de triplicar el poder de nuestra infraestructura web, porque ahora podemos manejar más solicitudes simultáneamente. ¿Qué pasa con DataPi? DataPi ha conectado un disco duro que almacena todos nuestros datos web y está ejecutando un servidor NFS. WebPiX monta que NFS comparte para que tenga acceso a los datos para su procesamiento. De esta manera solo tenemos que ejecutar copias de seguridad en una ubicación y podemos ahorrar espacio en el disco.
Lo que acabo de describir es esencialmente el modelo que usan las grandes empresas como Google y Facebook, pero reducido al tamaño de Raspberry Pi. El único inconveniente es, debido a los costos de Pis, que hacer esto es esencialmente crear la misma plataforma de desarrollo (pero para el servicio web) que un grupo de Pis es para programación paralela. El uso de múltiples Pis, debido a su capacidad computacional relativamente baja, pronto pierde rendimiento al consumo de energía a medida que avanza hacia el manejo de grandes cantidades de datos. ¿Pero solo por aprender? Ellos son perfectos.