Arquitetura dos Sistemas de Informação Distribuídos Quando se projeta um sistema cuja utilização é destinada a ser feita em ambientes do mundo real, projeções devem ser feitas para que o sistema possa funcionar corretamente em diferentes tipos de circunstâncias e diante de diversas dificuldades e ameaças. Dificuldades e ameaças para um sistema de informação distribuído: Modo variável de utilização: Variações nas cargas de trabalho que são aplicadas ao sistema (página web acessada por milhares de usuários), componentes mal conectados ou desconectados (computadores móveis), requisitos especiais como grande largura de banda e baixa latência (aplicativos multimídia). Variáveis do ambiente do sistema: Os sistemas distribuídos devem acomodar sistemas operacionais, redes e hardwares homogêneos. o Redes sem fio operam em taxas inferiores as redes cabeadas. o Sistemas operacionais apresentam ordens de grandeza diferentes. Problemas internos: Relógios não sincronizados, danos nos componentes, falhas de hardware e software. Ameaças externas: Ataque a integridade e ao sigilo dos dados. A arquitetura de um sistema é sua estrutura em termos de componentes, tendo como objetivo global garantir que a estrutura do sistema possa atender a demanda atual e futura. A maior preocupação é tornar o sistema: Confiável; Adaptável; Gerenciável; Rentável. Descreveremos a seguir, os principais modelos arquitetônicos que são empregados nos sistemas de informação distribuídos. Os modelos de arquitetura de um sistema distribuídos simplificam e abstraem funções dos componentes individuais, considerando o posicionamento dos componentes em uma rede de computadores, em busca de definir a distribuição de dados e cargas de trabalho, e o inter-relacionamento dos componentes visando a seus papéis funcionais e a comunicação entre eles. Os processos são classificados em: Processos servidores; Processos clientes; Processos peer-to-peer (processos que colaboram e se comunicam de maneira simétrica). Essa classificação identifica a funcionalidade de cada processo, permitindo que seja avaliada a carga de trabalho e os impactos causados por falhas em cada um deles. Com o resultado da análise feita sobre os processos, é possível especificar o posicionamento de cada processo, permitindo atender a objetivos de desempenho e confiabilidade do sistema distribuído. Existem vários padrões que são amplamente utilizados para dividir tarefas em um sistema distribuído, tendo um impacto importante no desempenho e na eficiência do sistema. Processos servidores Um processo servidor aceita solicitações de outros processos, podendo ser fornecido por um ou mais servidores, que interagem uns com os outros, e com processos clientes. Plataforma: Denominação para as camadas de baixo nível de um sistema de informação distribuído, composta pelos sistemas operacionais, hardware e rede, que fornece serviços para as camadas acima, facilitando a comunicação entre os processos. ] Middleware: Camada de software que tem o objetivo de mascarar a heterogeneidade do sistema, fornecendo um modelo de programação que seja conveniente para os programadores de aplicativos. Um middleware é composto por um conjunto de objetos e processos que interagem entre si, para a implementação da comunicação e oferecer suporte para o compartilhamento de recursos e aplicativos distribuídos. Arquitetura A divisão de responsabilidades entre aplicativos, servidores e outros processos, que são componentes de um sistema, é a distribuição destes nos diversos computadores que forma uma rede. Talvez seja o aspecto mais evidente no projeto de um sistema de informação distribuído, implicando no desempenho, confiabilidade e segurança do sistema resultante. Os processos possuem responsabilidades bem definidas e interagem para a realizações de atividades úteis. Cliente-servidor É a arquitetura mais falada quando os sistemas de informação distribuídos estão em discussão, sendo a mais importante e a mais empregada. A imagem acima apresenta uma estrutura simples em que os processos clientes interagem com os processos servidores. Observe que os servidores podem ser clientes de outros servidores. Ex: Servidor Web é cliente local do servidor de banco de dados. Peer-to-peer Todos os processos que estão envolvidos em uma determinada atividade, realizam funções semelhantes interagindo corporativamente. Não existe distinção entre processos clientes e processos servidores, nem entre os computadores em que são executados. O modelo cliente-servidor não é flexível em termos de escalabilidade, oferecendo uma estratégia simples e direta para o compartilhamento de dados e recursos. O peer-to-peer tem como objetivo principal, explorar recursos de um grande número de computadores para o cumprimento de uma dada atividade. Alguns aplicativos que utilizam o peer-to-peer tem surgido, permitindo que milhares de computadores forneçam acesso a dados e outros recursos armazenados e gerenciados coletivamente. Ex: Napster Os aplicativos em formato peer-to-peer são compostos por um grande número de processos (peers), sendo executados em comutadores diferentes, sendo que o padrão de comunicação entre eles depende inteiramente do que o aplicativo faz. Observe na imagem que um grande número de objetos está compartilhado, um computador individual contém uma parte desses objetos, permitindo que as cargas de processamento, armazenamento e comunicação para acessar os objetos, sejam distribuídos por diversos computadores e conexões de rede. Cada objeto pode ser replicado em vários computadores, distribuindo melhor a carga e solucionando problemas com desconexões individuais. Todas essas características tornam a arquitetura peer-to-peer bem mais complexa que a arquitetura cliente-servidor, principalmente pela necessidade de colocar objetos individuais, recuperá-los e manter réplicas entre vários computadores. Os modelos de arquitetura de sistemas distribuídos são compostos por processos que se comunicam através da troca de mensagens que trafegam em uma rede de computadores. É interessante que esses modelos se preocupem com o desempenho e a confiabilidade dos processos, das redes de comunicação e com a segurança dos recursos que estão presentes no sistema. Requisitos para o projeto da arquitetura de um sistema de informação distribuído Os fatores que motivam a distribuição de processos de um sistema de informação distribuído são numerosos, sendo sua importância relevante. Citaremos abaixo alguns requisitos importantes para projetar a arquitetura de um sistema distribuído: 1. Desempenho A distribuição dos recursos vai muito além das necessidades de gerenciamento de atualizações concorrentes, os principais problemas de desempenho causados pela limitação de recursos de processamento e comunicação, como: Reatividade: os usuários exigem respostas rápidas e consistentes, só que em alguns dos programas clientes acessam recursos compartilhados que produzem atrasos no processamento da solicitação. Ex: a velocidade de resposta de servidores remotos é determinada pelo desempenho da rede, do servidor, e dos componentes de software envolvidos. Para obter um bom tempo de resposta é necessário que o sistema de informação distribuído seja formado por poucas camadas de software, e transfira pequenos volumes de dados entre clientes e servidores. 2. Throughtput Velocidade com que um trabalho computacional é feito, medido através de taxas de rendimento do sistema. A capacidade de um sistema de informação distribuído realizar trabalhos para seus usuários é afetada pela velocidade de processamento tanto nos clientes, como nos servidores e pela taxa de transferência dos dados. A taxa de rendimento das camadas de software e de rede são importantes para medir a taxa de rendimento do sistema. 3. Balancamento de carga Tem o objetivo de permitir que os aplicativos de um sistema de informação distribuído trabalhem paralelamente, sem disputar os mesmos recursos, mas explorem recursos computacionais disponíveis como processador, memória e recursos de rede. Ex: Quando algum cliente executa um aplicativo localmente, ele remove as cargas de processamento do servidor. 4. Qualidade de serviço A qualidade de serviço é utilizada para medir a capacidade do sistema de atender a prazos. Para que ela seja realizada é necessário que exista uma dependência dos recursos disponibilizados em momentos apropriados, implicando no fornecimento de recursos de comunicação e computação, que sejam garantidos, suficientes para permitir que os aplicativos concluam suas tarefas a tempo.