Distribuição e Paralelismo
Com a expansão das redes de computadores e com a grande acessibilidade que existe atualmente os sistemas distribuídos ganharam muito espaço mesmo fora do meio acadêmico. Este tipo de sistema é baseado no uso de mais de uma máquina física trabalhando de forma coerente para prover ao usuário a percepção de estar usando um único sistema.
Com o contínuo avanço das pesquisas em processadores cada vez mais rápidos a indústria acabou esbarrando em um limite físico do silício, não é possível criar processadores mais rápidos dos que os atuais, então a solução foi incluir em uma mesma pastilha mais de um núcleo de processamento. Basicamente os computadores que temos acesso atualmente são máquinas paralelas multi-núcleo (ou multicore em inglês,) porém o simples fato de usar uma máquina com vários núcleos de processamento não faz com que sua aplicação execute mais rápido. Isto porque cada um dos núcleos tem uma velocidade máxima que pode atingir, para atingir resultados mais rapidamente torna-se necessário dividir o problema em partes que possam ser processadas e resolvidas (mesmo que parcialmente) de forma independente (ou o mais próximo disso) para que os vários núcleos trabalhem ao mesmo tempo, dessa forma teremos uma aplicação paralela, executando em uma máquina paralela e por isso atingindo o resultado mais rápido.
Acontece que existem vários tipos de arquiteturas de máquinas paralelas, entre elas temos máquinas interconectadas via rede para trabalhar na resolução de um problema muito grande. E nesse ponto que começa a confusão com os sistemas distribuídos.
Um sistema distribuído é composto por partes que executam (possivelmente) em máquinas diferentes e portanto utiliza a infraestrutura de rede para executar seus processamentos (exceto em situações de sala de aula onde usamos duas aplicações se comunicando na mesma máquina.) Embora exista mais de um processador envolvido em um sistema distribuído isso não quer dizer que as atividades estão acontecendo ao mesmo tempo, quando fazemos uma consulta a um banco de dados remoto e ficamos parados esperando o resultado dessa consulta para poder continuar o processamento certamente temos um sistema distribuído, mas ele não é paralelo.
Mas podem haver sistemas distribuídos e paralelos? Certamente que sim, um sistema paralelo que usa máquinas interligadas via rede para fazer um processamento vai enviar para cada uma das máquinas uma parte menor do problema para ser resolvido, eventualmente as máquinas até vão se comunicar para trocar resultados parciais, mas o ponto chave é que elas estarão trabalhando de forma individual, resolvendo partes do problema para que ao final o resultado maior possa ser atingido
Não é muito difícil perceber que escrever programas que saibam tirar proveito de paralelismo não é uma atividade simples (ainda…) e se considerarmos que as máquinas atuais são paralelas por construção a nova geração de sistemas deveria saber usar uma arquitetura híbrida e muito poderosa, mas é necessário entender que em algumas situações o processamento será paralelo internamente a uma máquina e em outras situações será paralelo em relação à rede.
Por fim, deve-se considerar que um sistema distribuído pode usar uma série de mecanismos para fornecer o acesso a rede de tal forma que isso se transforme em um mecanismo transparente para o programador, é claro que alguém precisará configurar essas interconexões, mas do ponto de vista de programação já é possível desenvolver um sistema desses sem que seja necessário distinguir se uma chamada é local ou remota. Por outro lado, em sistemas paralelos é muito mais complicado de implementar essa transparência, isso porque só vale a pena paralelizar um sistema se o problema a ser resolvido for realmente grande já que serão necessárias comunicações entre os processadores (mesmo que dentro de uma mesma máquina) e isso pode afetar o desempenho.
Como geralmente os problemas para sistemas paralelos são muito grandes, os desenvolvedores buscam o máximo de desempenho possível, é claro que o limite entre desempenho e outras questões do desenvolvimento de sistemas ainda não é claro e já existem estudos nesse sentido. No entanto a maior parte das aplicações paralelas busca o desempenho máximo possível e isso afeta diretamente as ferramentas e abstrações que podem ser usadas. Quanto maior o desempenho necessário mais difícil é de escrever o sistema.


Leave a Reply