Na rede, compartilhamos arquivos (driver de disco) ou bancos de dados. Mas como podemos compartilhar CPU ou RAM pela rede.
Na rede, compartilhamos arquivos (driver de disco) ou bancos de dados. Mas como podemos compartilhar CPU ou RAM pela rede.
Respostas:
Para fazer isso, os programas que acessam os recursos da CPU / RAM devem ser projetados especificamente para acessar esses recursos. Um sistema configurado dessa maneira é chamado de cluster, e a maneira comum de compartilhar recursos é com um protocolo chamado MPI (Message Pass Interface). É um download gratuito e usá-lo com Linux pode gerar um cluster poderoso (possivelmente até um super computador) por um custo mínimo, mas novamente é inútil, a menos que você tenha programas que foram projetados especificamente para tirar proveito do MPI. Existem alguns bons tutoriais de cluster por aí, se você ainda estiver interessado, verifique um.
Editar:
Eu recomendaria o tutorial aqui se você deseja configurar um cluster. Criei um cluster seguindo este tutorial há cerca de um ano e funcionou muito bem. O tutorial é um pouco antigo, portanto, alguns arquivos podem não estar exatamente onde o tutorial diz que estão (às vezes os arquivos são movidos em diferentes / mais recentes distribuições Linux), mas se você está um pouco familiarizado com o Linux, isso não deve ser um problema. O tutorial usa uma versão mais antiga do MPI, mas usei a versão mais recente e não tive problemas que não foram resolvidos com facilidade. Dependendo do que você está fazendo, pode haver um programa que pode tirar proveito do MPI. Eu sei que existem alguns programas de codificação de vídeo e processamento de números que aproveitam o MPI que pode ser baixado de fontes universais.
Você pode compartilhar RAM usando discos de RAM, mas isso se parece com o compartilhamento de discos normais, exceto que eles estão na RAM de outro computador. Não existe uma maneira direta de um computador usar a RAM de outro computador como se fosse sua própria RAM, mas existem algumas maneiras de usar a RAM de outro computador. Mais sobre isso no próximo parágrafo.
Quanto ao compartilhamento de CPU, é possível, mas não existe um padrão único para isso. Você não pode simplesmente compartilhá-lo e deixar outro computador pegar os recursos necessários. Em vez disso, você precisa ter aplicativos projetados especificamente que possam funcionar em vários computadores ao mesmo tempo. Isso geralmente é chamado de computação distribuída e é usado por alguns projetos de pesquisa como SETI @ Home, Einstein @ Home, Climateprediction.net e muitos outros.
Basicamente, os programas funcionam de tal maneira que existe um servidor central que distribui o trabalho que precisa ser realizado. Os computadores na rede baixam unidades de trabalho do computador central e as processam. Depois que o computador central recebe resultados dos clientes e os mescla em um resultado coeso. Dessa forma, os computadores "compartilham" recursos de CPU e RAM pela rede. A desvantagem disso é que os programas precisam ser criados de maneira a funcionar em rede e, no momento, a computação distribuída não é popular o suficiente entre os usos comuns de um computador; portanto, apenas um pequeno número de programas especializados o suporta. Por outro lado, é comumente usado para fins científicos, pois é mais barato obter um grande número de computadores pessoais ou estações de reprodução 3 do que obter acesso a um computador de mainframe.
Você se deparou com um problema XY , não deveria perguntar "como posso compartilhar computadores com CPU e RAM", mas "como posso usar vários computadores para tornar minhas renderizações mais rápidas no ZZZZZ?"
É altamente dependente do software que você está usando e do que está renderizando (você está transcodificando vídeo ou está processando um modelo / vídeo 3D?).
Para escolher alguns exemplos, o software 3D gratuito Blender suporta renderização distribuída, onde você pode ter muitos computadores trabalhando juntos para gerar uma saída. Se você está fazendo renderização de vídeo, pesquisou rapidamente no Google o projeto de código aberto MediaEncodingCluster, que permite renderizar arquivos de vídeo e áudio usando vários computadores.
O único sistema operacional que conheço que permite compartilhar CPU / RAM é o plan9. Lá você pode exportar / montar quase tudo. Isso não significa que as performances são boas, é claro.
Seria um bom recurso compartilhar cpu / ram para tarefas na rede. Atualmente, ainda temos algumas noções antigas para manter os programas na caixa onde as coisas acontecem, mas podemos permitir que vários cpus na mesma máquina acessem o mesmo fragmento de código. Nós temos um método (pelo menos) que faz algo assim. o java nas páginas da web funciona usando o servidor e o cliente, mas ainda está bloqueado de uma maneira servidor-cliente para fazer as coisas (onde o servidor contém a maioria dos dados). O que precisamos ser capazes de atribuir tarefas às máquinas da mesma maneira que fazemos quando temos vários cpus (exceto a máquina que faz o trabalho precisa ter o snip do programa e o snip de dados atribuídos. Isso sobrecarrega a rede. se as tarefas em si não são de natureza simples e podem resultar em novos gargalos. Gosto da ideia de onde