Prós e contras de um cluster Pi?

33

Eu já vi várias postagens perguntando como criar um "supercomputador" ou cluster com Raspberry Pis, mas encontrei muito pouco com os prós e contras de criar uma rede de Pis. Estou interessado em criar meu próprio pequeno cluster, mas tenho algumas perguntas.

Uma vez agrupados, os RPIs agem como um único computador virtual ou você tem controle individual sobre todos os RPIs? Um nó tem controle dos outros?

Existe algo que um RPI possa fazer que seja limitado em um cluster? Por exemplo, ainda terei controle sobre todas as portas GPIO individuais?

Quanto mais rápido ele faz o pi? Digamos que eu crie um cluster de 2 nós, com clock de 1 GHz cada um, terei essencialmente um processador "dual core 1GHz"? O cluster precisa estar em múltiplos binários? (ex. 1,2,4,8,16,32,64)

Isso complicará minha hospedagem na Web executada via NGINX for pi? O poder de processamento de certos nós pode receber tarefas específicas com as quais eles lidam? Como o nó 1 manipulará solicitações de serviço da Web, o nó 2 manipulará o armazenamento em nuvem, etc.

SuperAdmin
fonte

Respostas:

49

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.

Fred
fonte
Então, se estou trabalhando em um projeto doméstico, para hospedagem barata de 2 sites, controlando ventiladores por GPIO, SSH, FTP, armazenamento em nuvem, automação residencial, valeria a pena criar um pequeno cluster para distribuir as tarefas corretamente?
SuperAdmin
4
+1 Cheguei a esta pergunta curiosa e saí com um pouquinho de educação. Ótima resposta.
Jrhorn424
@iOSNoob, se você é a única pessoa a usá-lo e só está fazendo alguma dessas coisas ao mesmo tempo, pode não valer um cluster, mesmo assim, porque os recursos são alocados conforme necessário. Se simplesmente não há RAM suficiente ou você tem mais carga do que uma única pessoa, então provavelmente vale a pena. Eu colocaria coisas como ventiladores e automação residencial em Pis separados simplesmente por segurança. Você realmente quer 0 chances de alguém estar brincando com coisas em sua casa ... Se você precisar percorrer um Pi extra para acessar esses sistemas, melhor. Essa é uma camada extra de segurança.
Fred
@ jrhorn424 Fico feliz que você tenha gostado! Recentemente, participei de um evento de (super) computação de alto desempenho, para que essas coisas estivessem frescas em minha mente. Momento perfeito para escrevê-lo.
Fred
1
Para um exemplo concreto da arquitetura exata de hospedagem na Web, Fred descreveu: pidramble.com (links para código / instruções no GitHub, onde você pode criar o seu próprio com qualquer sabor de Pi).
geerlingguy