Computação Distribuída: Introdução e exemplos de uso

Sistema distribuído é uma porção de computadores, todos conectados em rede, coordenados por uma, ou mais, máquina(s) administradora(s) e que utilizam softwares que permitam o compartilhamento de seus recursos, como memória, processamento, hardware (como impressora etc) para um único fim, como quebrar um código, criptografar ou descobrir a melhor solução de um problema em matemática.

Ou seja, são vários computadores, que se comportam como um só, para fazer uma coisa de uma maneira rápida e eficiente, ou ter muito espaço de armazenamento.

São sistemas muito usados em supercomputadores, que fazem pesquisas científicas, predições climáticas, descobrir novas partículas, controlar epidemias e outras doenças, fazer simulações e tudo...foi-se o tempo que ciência era feita no papel, lápis e laboratório.

Saiba por que o mundo depende da computação distribuída, e por que sistemas distribuídos são a evolução da Internet.

- Antes de entender o que é, saiba para que serve

Com a definição formal de Sistemas Distribuídos (que é o mesmo de Computação Distribuída), vamos deixar os detalhes técnicos um poucos de lado. Vamos criar um contexto para explicar para que serve.
Vou falar de um problema que vi quando estudei a linguagem C, que é o problema do caixeiro viajante.

Vou explicar em outros termos: imagine que você se formou em computação e vai dar palestras em 'n' cidades. Você recebeu uma grana fixa pra viajar.

Como é um cara esperto, resolveu criar um algoritmo para otimizar isso, traçar um plano para economizar o máximo possível nas viagens.
Como? Em vez de sair viajando 'na louca', bolou um esquema (em C), pra calcular a rota mínima.

Por exemplo, se você for em 4 cidades, A, B, C e D, sabendo que pode ir de uma pra qualquer outra, que você mora na cidade A e tem que voltar pra ela, e o preço da passagem aérea depende somente da distância (quanto mais longe, mais caro), óbvio que existe um percurso melhor, dentre todos: ABCDA, ABDCA, ACBDA, ACDBA, ADBCA, ADCBA.

Pra resolver isso em C é só saber um pouco de Análise Combinatória.
Como você começa e termina em A, e não repete as outras cidades, é tudo uma combinação, sem repetição, das outras 'n-1' cidades.
Na linguagem matemática, isso quer dizer: (n-1)!

Para 5 cidades, em C, o resultado é imediato.
Até 9, no meu dual core, foi quase imediato.
Até 12 cidades, levou alguns segundinhos.
Depois começou a ficar legal.

O tempo vai crescendo assustadoramente, levando minutos, horas e acima de 20 cidades, levaria ANOS pra você obter o melhor caminho (ninguém esperou pra saber, há cálculos pra prever).
Isso mesmo, uma simples questão, você levaria ANOS pra obter a melhor solução!
E só tem algumas dezenas de opções, cidades.

Agora imagine pra estudar o genoma humano, que tem bilhões de partes (não vou entrar em detalhes, não é minha área)...quanto tempo levaria até estudarmos e catalogarmos isso tudo, para descobrirmos curas de doenças e nos prevenirmos?

No meu computador, mais que a idade do universo.

Porém, aqui que vem a beleza da Computação Distribuída: se unirmos a capacidade de processamento dos computadores dos planetas, isso não é nada demais.

Isso, se usarmos só 10% da capacidade dos computadores (a maioria só usa ele, pra MSN + Facebook), já teríamos descoberto uma porção de tratamentos, conheceriamos mais nosso coro, planeta, teríamos previsto catástrofes etc.

Então, se quiser 'doar' parte de seu processamento enquanto faz downloads ou navega na Internet, sem deixar seu computador lento, pras pesquisas científicas que quiser e escolher, conheça o BOINC.

- Exemplo de Sistema distribuído: Clientes e Servidores

Lembre-se da definição: dividir as tarefas.

Em um jogo online, Worms Armageddon, por exemplo (aos gammers atuais, perdão, não sou muito chegado em jogos, só lembrei esse de minha época).

Se meu jogador, 'Jar Lyoto' atira com uma bazuca em uma direção e com uma determinada força, sabendo a força do vento.
Essa informação é enviada ao servidor, que checa e calcula onde esse tiro vai, constatando que vai na cabeça do jogador 'Rosy Rousey'. O servidor envia essa informação para Rosy, que agora tem um jogador a menos, assim como pontos a menos, e informações novas sobre o cenário e vento.

Agora ela, com o jogador 'Florisbull Shogun' atira uma granada contra o jogador 'Branco Machida'. O servidor checa as informações de vendo, de posição, de força...e vê que errou.

Notou o 'jogador A', 'servidor', 'jogador B'...em outras palavras: cliente, servidor, cliente, servidor...isso é um sistema distribuído.
Não está acontecendo no seu computador, isolado.

Veja o nome 'sistema', que no caso é o computador da Rosy e o meu, e o servidor que administra o jogo Worms Armageddon. Esse é o sistema, que distribui as tarefas, com um fim único, o jogo.


Servidor intermediando as tarefas entre os clientes

http://pt.wikipedia.org/wiki/Cliente-servidor

- Outro exemplo: P2P

Mas um exemplo prático vale mais que mil artigos.
P2P, ou peer-to-peer, é um ótimo exemplo de sistema distribuído.
São os famosos programas de torrent. Neles, não há uma central de rede, ninguém é de ninguém e é dando que se recebe.
Ou seja, quanto mais você compartilha, mais compartilham você, e mais rápido você recebe dados.
E recebe de todos os lugares e pessoas do mundo.
Se está baixando um filme, por exemplo, pode está recebendo o começo dele de um cara da Argentina, 3 minutos do meio de um Canadense e os 5 minutos finais de um Chinês. O importante é receber.
E recebe, e geralmente rápido.
Nas redes do tipo P2P, todos fazem papel de Servidor e Cliente


Diferente de sua faculdade ou empresa, não há uma administração ou sala-chefe. Todos são clientes e todos são servidores.

Em um servidor normal, você recebe seu arquivo, com banda limitada, do início ao fim.
Em P2P, recebe aos poucos, com banda ilimitada (o máximo que você aguentar), aos pedaços...quem já usou torrent sabe o quanto é rápido e prático.

Claro, se houverem muitos usuários. Pois se não houverem, fica horrível...aí seria melhor ter a rede normal, pelo menos teria sua banda garantida.

Será não pensaram nisso? Ter um sistema que, em crise, garanta a banda garantida de um servidor normal, que é a parte boa dos servidores convencionais, com a velocidade e praticidade dos sistemas distribuídos?
Óbvio que já, leitor perspicaz. Falarei mais sobre isso nos detalhes técnicos.

Mais detalhes sobre sistemas peer-to-peer:
http://pt.wikipedia.org/wiki/Peer-to-peer


Isso tudo, de jogo, P2P, descobrir doenças, epidemias, predições climáticas etc, é feito de forma extremamente rápida e eficiente.
Fiz uma simplificação, mas isso envolve complexos algoritmos, que administram, muitas vezes, milhões de máquinas, com processadores diferentes, seres diferentes controlando a máquina, conexão diferente, em lugares obscuros do planeta.

De um certo modo, a computação distribuída, é uma Internet (Rede, na verdade) melhorada, em suas entranhas há diversas definições, propósitos e aspectos diferentes, diferenças na arquitetura, no funcionamento, na programação, nas 'camadas', além de, por exemplo, utilizar alguns aspectos positivos da rede convencional e da P2P.
Esses detalhes serão tratados, tecnicamente, nos próximos artigos.

Computação distribuída, devido sua otimização, também está relacionada com Supercomputadores.


IBM Sequoia, atualmente, o computador mais rápido do mundo. Usado para pesquisas na área de energia nuclear, astronomia, predições climáticas, genética e oceanografia.

Nenhum comentário: