Transparência, Flexibilidade, Confiabilidade e Desempenho em Sistemas Distribuídos
Antes de falar de seus requisitos, precisamos definir o que é um sistema distribuÃdo, mesmo que de forma simplificada. Esse tipo de sistema tem como principal caracterÃstica ser composto por mais de um processador, onde consideramos como processador um conjunto CPU-Memória capaz de executar de forma independente. É importante deixar isso claro porque quando falamos das máquinas atuais, multicore (vários núcleos) estamos falando de uma máquina paralela o que não quer dizer que existe distribuição. Existem na verdade vários pontos de interseção entre sistemas distribuÃdos e paralelos, mas por enquanto vamos falar dos distribuÃdos.
A forma mais simples de distribuição é ligar um conjunto de máquinas independentes em uma rede e colocar uma parte da aplicação em máquinas separadas. Dessa forma, quando uma parte da aplicação necessita de algum módulo ou serviço que não tem localmente, realiza uma chamada a outra máquina para obter o resultado que precisa. É fácil perceber que várias coisas podem sair errado:
- A rede está indisponÃvel – é comum acontecer de um cabo partir, um ponto de acesso sem fio ficar inacessÃvel, falha no provedor de acesso internet e assim por diante;
- A máquina que buscamos está indisponÃvel – embora a rede esteja funcionando, a máquina que poderia prestar o serviço não está e consequentemente não conseguimos realizar o trabalho;
- A aplicação que buscamos está indisponÃvel – embora a máquina esteja acessÃvel, por algum motivo a aplicação que poderia realizar o processamento não está em execução, e não pode assim receber requisições;
- A aplicação falha durante o processamento – essa questão é mais difÃcil de tratar, em um sistema centralizado, se um módulo da aplicação falha, toda a aplicação sofre o efeito da falha, mas quando um módulo distribuÃdo falha no meio de uma execução não temos como diferenciar isso dos outros tipos de falha. Simplesmente ficaremos esperando indefinidamente.
Outros tipos de situações podem ocorrer, mas esse conjunto base funciona bem para ilustrar que os problemas são diferentes, mas se existem tantas situações de problemas, porque alguém iria querer fazer um sistema distribuÃdo? A resposta na verdade é simples, melhor aproveitamento de recursos e reuso. Em um sistema distribuÃdo um módulo da aplicação pode atender a diversas solicitações, por exemplo de uma maneira centralizada, com isso evitamos cópias de um mesmo módulo para diversas máquinas que estão executando o mesmo tipo de tarefa. Isso tem um impacto imediato na gerência fÃsica das máquinas, torna-se mais fácil de atualizar as aplicações já que não precisamos instalar em cada máquina aquele módulo da aplicação. Um exemplo claro disso são os sistemas baseados em tecnologia web, no modelo de aplicação web o processamento acontece no servidor e os usuários acessam o sistema através de um browser, ou seja, o sistema não está instalado na máquina de cada usuário.
Então, considerando que existe a motivação para fazer sistemas distribuÃdos, surge a questão de como contornar ou conviver com os problemas que podem acontecer. Podemos falar então de quatro requisitos importantes de sistemas distribuÃdos:
- Transparência – já que o sistema distribuÃdo é composto de vários processadores precisa existir um mecanismo de comunicação entre eles, o ideal é que esse mecanismo seja o mais transparente possÃvel. Atualmente é comum usarmos alguma camada intermediária para cuidar dos detalhes de conexão, geralmente criando uma rede overlay, ou seja, uma rede lógica sobre a rede fÃsica. Quanto mais transparente a forma de desenvolvimento maior a chance de um número maior de programadores adotarem a ferramenta ou biblioteca, por outro lado, devem existir mecanismos para permitir que o programador lide com os detalhes de implementação manualmente se assim quiser.
- Flexibilidade – com vários processadores trabalhando em conjunto devem existir mecanismos para permitir adaptações dinâmicas durante a execução do sistema. Podem acontecer situações não previstas e deve ser possÃvel contornar isso de forma simples, além disso deve ser fácil incluir ou excluir processadores do sistema sem que para isso seja necessário modificar todos os componentes.
- Confiabilidade – esse requisito trata de respostas certas. É possÃvel confiar nas respostas recebidas? Quando estamos trabalhando com um sistema distribuÃdo no qual construÃmos todas as parte fica fácil de garantir isso, porém muitas vezes os sistemas distribuÃdos são compostos de diversas partes de fornecedores diferentes. Entra outro item em evidência que tem a ver com a parte de segurança:
- Autenticação – garantir que as partes realmente são quem dizem ser
- Autorização – garantir que a requisição pode ser executada para o requisitante, nem sempre todas as funções estão disponÃveis para todos os módulos solicitantes.
- Desempenho – um dos motivos para termos sistemas distribuÃdos é melhorar o desempenho geral dos sistemas, isto porque podemos concentrar a atenção no conjunto de máquinas que efetivamente executa certos processamentos de forma isolada do processamento dos usuários. Por outro lado, os usuários esperam ter suas respostas o mais rápido possÃvel como se o sistema estivesse executando localmente, em suas próprias máquinas. É necessário então monitorar os recursos fÃsicos e de software que compõe o sistema distribuÃdo a fim de garantir nÃveis de serviço ao usuário.
Esses quatro requisitos são linhas guia para o desenvolvimento de sistemas distribuÃdos de sucesso que vão atender as necessidades de seus usuários e ao mesmo tempo facilitar sua administração por permitir concentrar os processamentos.


Leave a Reply