Algumas perguntas interessantes. Eu acho que você pode estar entendendo um pouco como os "supercomputadores" criados com o Raspberry Pis funcionam. Eles não funcionam como um sistema automático de compartilhamento de carga. Eles são projetados para algo chamado programação paralela , onde uma tarefa complexa é dividida em partes que podem ser executadas simultaneamente. O Pi principal no cluster (nó principal) é responsável pela organização da tarefa geral, e cada Pi no cluster (nós clientes) executa seu trabalho alocado e relata os resultados de volta ao nó principal. Bibliotecas como o OpenMPI são fundamentais para isso.
Além disso, os clusters Raspberry Pi que foram criados não foram criados como dispositivos de computação eficientes. Eles foram construídos como plataformas de desenvolvimento . É significativamente mais barato comprar 32 Raspberry Pis do que 32 PCs. Você pode desenvolver e testar seu software de programação paralela muito mais barato dessa maneira. A única alternativa se você não possui Pis ou PCs é solicitar o tempo de CPU em um supercomputador real. Dependendo do tamanho do computador em questão, isso pode custar dinheiro ou ter longos tempos de espera antes que os recursos estejam disponíveis. Por isso, as pessoas criaram seus próprios grupos pessoais. Só faz sentido executar seu aplicativo no computador real quando você sabe que ele funciona!
Portanto, lembre-se disso e passe para suas perguntas específicas.
Em um cluster adequado, os Pis não atuam como um único computador virtual. Você tem um controle frouxo sobre cada Pi na forma de um sistema de alocação de tarefas ou recursos como o Sun Grid Engine . As tarefas são alocadas aos nós, conforme necessário, e quando as tarefas são concluídas, os recursos desse nó são liberados para novas tarefas.
Em um cluster, como cada Pi está executando sua própria cópia do Linux, cada Pi retém o controle local de suas portas GPIO. Não tenho certeza de como o software realmente o utilizaria em um ambiente de computação paralelo, mas aí está.
Um cluster realmente não torna um Pi mais rápido, porque não é um único computador. O que você ganha é simplesmente a capacidade de fazer mais de uma vez. Você não está limitado a múltiplos de dois. No entanto, existe um limite superior realmente prático para computadores em cluster, dependendo das tarefas que você executa. Imagine se você estiver executando um cálculo paralelo em muitos Pis que exijam 200 etapas. No entanto, cada etapa seguinte requer as informações que cada Pi calculou na etapa anterior. Portanto, cada Pi precisa receber dados de todos os outros Pi a cada iteração. Dependendo da quantidade de tempo que cada iteração leva para calcular, você pode gastar mais tempo enviando dados do que calculando. É por isso que a maioria dos supercomputadores usa o InfiniBandrede. É muito rápido, para que você possa fazer mais cálculos. A solução para isso é usar menos Pis, mas fazer com que eles trabalhem mais a cada iteração, mas isso pode não ser possível, dependendo do seu algoritmo. Daí o limite superior prático. (No Pis, isso seria particularmente ruim porque a Ethernet USB é bastante lenta.)
Então, para uma aplicação prática, hospedagem distribuída na web! Você pode tirar proveito de vários Pis aqui, não é apenas um cluster regular. Digamos que você tenha 5 Pis. Nós os chamaremos GatewayPi, WebPi1, WebPi2, WebPi3 e DataPi. O GatewayPi enfrenta a Internet, executando o Nginix para lidar com solicitações da Web, mas não realiza nenhum processamento. Em vez disso, o que ele faz é o balanceamento de carga. Ele usa proxy e encaminha aleatoriamente a solicitação de entrada para WebPi1, WebPi2 ou WebPi3. Acabamos de triplicar o poder da nossa infraestrutura da Web, porque agora podemos lidar com mais solicitações simultaneamente. E o DataPi? O DataPi conectou um disco rígido que armazena todos os dados da web e está executando um servidor NFS. O WebPiX monta esse compartilhamento do NFS para ter acesso aos dados para processamento. Dessa forma, só precisamos executar backups em um local e economizar espaço em disco.
O que acabei de descrever é essencialmente o modelo que grandes empresas como Google e Facebook usam, mas reduzidas para o tamanho do Raspberry Pi. O único problema é que, devido aos custos do Pis, isso é essencialmente criar a mesma plataforma de desenvolvimento (mas para servidor da Web) que um cluster de Pis é para programação paralela. O uso de vários Pis, devido à sua capacidade computacional relativamente baixa, logo perde o desempenho para o consumo de energia à medida que você avança no gerenciamento de grandes quantidades de dados. Mas apenas para aprender? Eles são perfeitos.