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:

  1. 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.
  2. 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.
  3. 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:
    1. Autenticação – garantir que as partes realmente são quem dizem ser
    2. 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.
  4. 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