Pros y contras de un grupo de Pi?

33

He visto muchas publicaciones que preguntan cómo construir una "supercomputadora" o clúster con Raspberry Pis, pero he encontrado muy poco con los pros y los contras de hacer una red de Pis. Estoy interesado en construir mi propio grupo pequeño, pero tengo algunas preguntas.

Una vez agrupados, ¿los RPI actúan como una sola computadora virtual o tienen control individual sobre todos los RPI? ¿Un nodo tiene control de los otros?

¿Hay algo que un RPI pueda hacer que esté limitado en un clúster? Por ejemplo, ¿tendré control sobre todos los puertos GPIO individuales?

¿Cuánto más rápido hace el pi? Digamos que hago un clúster de 2 nodos, con una frecuencia de 1 GHz cada uno, ¿tendré esencialmente un procesador de "doble núcleo de 1 GHz"? ¿El clúster necesita estar en múltiplos binarios? (ej. 1,2,4,8,16,32,64)

¿Esto complicará mi alojamiento web que se ejecuta a través de NGINX para pi? ¿Se puede asignar al poder de procesamiento de ciertos nodos las tareas específicas que manejan? Tal como el nodo 1 manejará las solicitudes de servicio web, el nodo 2 maneja el almacenamiento en la nube, etc.

Superadmin
fuente

Respuestas:

49

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.

Fred
fuente
Entonces, si estoy trabajando en un proyecto hogareño, para un alojamiento web barato de 2 sitios web, controlando ventiladores de refrigeración a través de GPIO, SSH, FTP, almacenamiento en la nube, una automatización del hogar, ¿Valdría la pena hacer un pequeño clúster para distribuir las tareas correctamente?
SuperAdmin
44
Llegué a esta pregunta con curiosidad, y me fui con un poco de educación. Gran respuesta.
jrhorn424
@iOSNoob, si eres la única persona que lo usa y solo haces alguna de esas cosas a la vez, puede que no valga la pena un clúster, incluso porque los recursos se asignan según sea necesario. Si simplemente no hay suficiente RAM o tienes más carga que una sola persona, entonces probablemente valga la pena. Puse cosas como ventiladores y domótica en Pis separados simplemente por seguridad. Realmente quieres 0 posibilidades de que alguien esté jugando con cosas en tu casa ... Si tienes que saltar a través de un Pi extra para llegar a esos sistemas aún mejor. Esa es una capa adicional de seguridad.
Fred
@ jrhorn424 ¡Me alegra que te haya gustado! Hace poco asistí a un evento de computación (súper) de alto rendimiento, así que todo esto estaba fresco en mi mente. Momento perfecto para escribirlo.
Fred
1
Para un ejemplo concreto de la arquitectura de alojamiento web casi exacta que Fred describió: pidramble.com (enlaces a código / instrucciones en GitHub donde puedes construir tu propio con cualquier sabor de Pi).
geerlingguy