Sistemas distribudos Um sistema distribudo aquele no qual
Sistemas distribuídos � Um sistema distribuído é aquele no qual os componentes localizados em computadores interligados em rede se comunicam e coordenam sua ações apenas passando mensagens. Com base nessa afirmação podemos considerar que um sistema distribuído é uma colação de computadores e softwares interconectados por uma rede, projetados para resultar em uma aplicação integrada. � Os computadores conectados por meio de uma rede podem estar separados por qualquer distância. Eles podem estar em continentes separados, no mesmo prédio ou na mesma sala.
A motivação para construir e usar sistemas distribuídos É proveniente do desejo de compartilhar recursos. O termo "recurso" é bastante, abstrato, mas caracteriza bem o conjunto de coisas que podem ser compartilhadas de maneira útil em um sistema de computadores interligados em rede. Ele abrange desde componentes de hardware, como discos e impressoras, até entidades definidas pelo software, como arquivos, bancos de dados e objetos de dados de todos os tipos.
Compartilhamento de Recursos: “Recurso” caracteriza o conjunto de elementos que podem ser compartilhados de forma útil em um SD: Hardware: impressoras, discos. Software: arquivos, bancos de dados, compiladores. O compartilhamento reduz custos. Recursos fisicamente encapsulados em um dos computadores de um SD só podem ser acessados por outros computadores através de comunicação. Cada conjunto de recursos de um tipo particular deve ser gerenciado por um programa (Gerenciador de Recursos) que oferece uma interface de comunicação.
Tipos de Sistemas Distribuídos: 1. Sistemas de Computação Distribuídos computação de auto desempenho � 2. Sistemas de Computação de Cluster � 3. Sistemas de Computação em Grade (Grid) � 4. Sistemas de Informação Distribuídos � 5. Sistemas de Processamento de Transações Integração de Aplicações Comerciais (Troca de informações via RPC ou RMI) � 6. Sistemas Embutidos Distribuídos Pervasivos (normalmente � 7. pequenos sistemas movidos a baterias, móveis & wireless) � 8. Sistemas Domésticos (ex. Smart phones, PDAs) � 9. Sistemas Eletrônicos para tratamento de saúde (Monitores de coração, Redes de Sensores (Base de Dados distribuídas com conexão wireless �
Aplicações � Temos como exemplo de aplicações para sistemas distribuídos algumas aplicações comerciais, aplicação de internet, aplicações de informações multimídias e áreas de trabalho compartilhadas. A transparência do sistema para o usuário final é realizado através do Middleware, esse software é o responsável por fazer cada máquina com suas características, seus sistemas operacionais e características de software, fazendo com que o sistema tenha como resultado final acesso aos recursos, transparência, abertura e escalabilidade, essas características são os objetivos finais para um sistema distribuído.
Características Os computadores conectados por meio de uma rede podem estar separados por qualquer distância. Eles podem estar em continentes separados, no mesmo prédio ou na mesma sala. Nossa definição de sistemas distribuídos tem as seguintes características importantes: � Concorrência: em uma rede de computadores, a execução concorrente de programas é a norma. Posso fazer meu trabalho em meu computador, enquanto você faz o seu em sua máquina, compartilhado recursos como páginas web ou arquivos, quando necessário. A capacidade do sistema de manipular recursos compartilhados pode ser ampliada pela adição de mais recursos (por exemplo, computadores) na rede. � Concorrência e execução paralela existem em um SD por causa de: � - As atividades separadas de usuários; � - A independência de recursos; � - A localização de processos em computadores separados. �
Transparência: Esconde do usuário e do programador de aplicação a separação de componentes em um SD. O sistema é percebido como um todo, em vez de uma coleção de componentes independentes. Tipos mais comuns de transparência: Acesso: Oculta diferenças na ocultação de dados e no modo de acesso a um recurso; Localização: Oculta o lugar onde o recurso está localizado; Migração: Oculta que um recurso pode ser movido para outra localização; Relocação: Oculta que um recurso pode ser movido para outra localização enquanto em uso; Replicação: Oculta que um recurso é replicado; Concorrência: Oculta que um recurso pode ser compartilhado por diversos usuários concorrentes; Falha: Oculta a falha e a recuperação de um recurso
Ciladas Quando Desenvolvemos Sistemas Distribuídos � Premissas falsas que todos adotam ao desenvolver uma aplicação � distribuída pela primeira vez: � A rede é confiável. � A rede é segura. � A rede é homogênea. � A topologia não muda. � A latência é zero. � A largura de banda é infinita. � O custo de transporte é zero. � Há só um administrador
Falhas independentes Todos os sistemas de computador podem falhar e é responsabilidade dos projetistas de sistema pensar nas consequências das possíveis falhas. Nos sistemas distribuídos, as falhas são diferentes. Falhas na rede resultam no isolamento dos computadores que estão conectados a ela, mas isso não significa que eles param de funcionar. Na verdade, os programas neles existentes talvez não consigam detectar se a rede falhou ou se tornou demasiadamente lenta. Analogamente, a falha de um computador ou o término inesperado de um programa em algum lugar no sistema (um colapso no sistema) não é imediatamente percebida pelos outros componentes com os quais eles se comunica. Cada componente do sistema pode falhar independentemente, deixando os outros ainda em funcionamento.
Exemplos de Sistemas distribuídos � Computação Móvel e Ubíqua: � Exemplos: notebooks, PDA, telefones móveis, dispositivos incorporado em aparelhos como máquinas de lavar, carros, geladeiras, etc. � Computação móvel é a capacidade de um dispositivo computacional e os serviços associados ao mesmo serem móveis, permitindo este ser carregado ou transportado mantendo-se conectado a rede ou a Internet. � Computação Ubíqua é a capacidade de estar conectado à rede e fazer uso da conexão a todo o momento.
Os protocolos permitem que um programa em execução em qualquer lugar envie mensagens para programas em qualquer outro lugar; � Conjunto de serviço aberto, ou seja, pode ser ampliado com a adição de novos computadores e servidores e novos tipos de serviço
É uma parte de Internet administrada separadamente, cujo limite pode ser configurado para impor planos de segurança locais. � Ela é composta de várias redes locais (Local Area Networks - LANs) interligadas por conexões de backbone. � A configuração de rede de uma intranet em particular é de responsabilidade da organização que a administra e pode variar muito - desde uma LAN em um único site até um conjunto de LANs interconectadas pertencentes às filiais de uma empresa ou outra organização, em diferente países.
Uma intranet È conectada à Internet por intermédio de um roteador, o qual permite aos usuários de dentro dessa intranet utilizarem serviços que são providos em outro lugar, como acesso a servidores web ou de correio eletrônico. Ela também permite que os usuários de outras intranets acessem os serviços que fornece. Muitas organizações precisam proteger seus próprios serviços contra uso não autorizado, possivelmente por usuários externos mal-intencionados. Por exemplo, uma empresa não deseja que informações sigilosas estejam acessíveis para usuários de organizações concorrentes, e um hospital não deseja que dados sigilosos dos pacientes sejam revelados. As empresas também querem se proteger de programas prejudicial, como os vírus que entram e atacam os computadores que estão na intranet, possivelmente, destruindo dados valiosos.
Heterogeneidade � "A internet permite aos usuários acessarem serviços e executarem aplicativos por meio de um conjunto heterogêneo de computadores e redes. A heterogeneidade (isto é, variedade e diferença) se aplica aos seguintes aspectos: Redes, hardware de computador, sistemas operacionais, linguagens de programação, implementações de diferentes desenvolvedores. "
Visão Geral � Linguagens de Programação Heterogêneas � Plataformas de Middleware Heterogêneas ◦ Modelo de objetos comum ◦ Linguagem de definição de interfaces comum ◦ Mapeamentos para linguagens de programação ◦ Interoperabilidade ◦ Inter-funcionamento � Representações de Dados Heterogêneas ◦ Representação de dados padrão ◦ Protocolo de transporte em nível de aplicação ◦ Máquinas virtuais Prof. Fábio M. Costa - Instituto de Informática / UFG Original: Wolfgang Emmerich, 2000 15
Heterogeneidade de linguagens � Motivos para o uso de diferentes linguagens: � aplicações legadas; � adequação da linguagem ao fim; � existência na linguagem de API desejada; � Resolução da heterogeneidade de linguagens: � utilização de IDL neutra; � especificação de mapeamentos para cada linguagem; � geração de stubs e skeletons via compilador de IDL para cada � linguagem (ou geração dinâmica).
Motivação � Representações de dados precisam ser convertidas entre objetos clientes e servidores heterogêneos � Esta conversão deve ser transparente para o desenvolvedor de aplicações � A conversão pode ser feita: ◦ na implementação da camada de apresentação ◦ na implementação da camada de aplicação ◦ na implementação da plataforma Prof. Fábio M. Costa - Instituto de Informática / UFG Original: Wolfgang Emmerich, 2000 17
Tipos de heterogeneidade �A heterogeneidade pode existir a diferentes níveis: � Linguagens de programação; � Hardware; � Middleware.
Heterogeneidade. Pontos-Chave � Heterogeneidade pode ocorrer em vários níveis: ◦ Linguagem de Programação ◦ Middleware ◦ Representação de Dados � CORBA e COM resolvem a heterogeneidade de linguagem de programação através de uma IDL com mapeamentos para várias linguagens � Heterogeneidade de middleware é resolvida através de especificações de interoperabilidade e inter-funcionamento
Pontos-Chave � Heterogeneidade de dados pode ser resolvida através de: ◦ Representações de dados padronizadas �CDR, NDR, XDR ◦ Estruturação dos dados no nível das aplicações �XML, SGML, ASN. 1 ◦ Máquinas Virtuais �JVM, Python VM, etc. Prof. Fábio M. Costa - Instituto de Informática / UFG Original: Wolfgang Emmerich, 2000 20
� Middleware é uma camada adicional de software situada entre o nível de aplicação e o nível que consiste no sistema operacional. O Middleware tem o papel de interligar diferentes aplicações em diferentes sistemas operacionais em diferentes computadores. Ou seja, ele oculta da melhor maneira possível a heterogeneidade das plataformas das aplicações. Por ser um software de conectividade, consiste de um conjunto de serviços disponíveis que permite que múltiplos processos, executando em uma ou mais máquinas, interajam através de uma rede.
Hererogeneidade de Middleware � Caso extremo envolvendo interoperabilidade entre soluções que � utilizam diferente middleware: e. g COM e CORBA. � Motivado por aplicações legadas ou pela inadequação de um � único middleware ao problema. � Pode ser resolvido definindo standards e protocolos de � interoperabilidade suportados por bridges de middleware. � As bridges podem ser: � inline: embebidas no middleware – o ideal, � ou request-level: construıdas sobre middleware que não suporta � interoperabilidade, vulgarmente como pares de half-bridges.
Resolvendo a Heterogeneidade no Nível da Plataforma � Máquina Virtual ◦ Uma plataforma acima do sistema operacional ◦ Por definição, impõe uma representação de dados comum
Exemplo: Máquina Virtual Java � Define os seguintes tipos atômicos: boolean: representado como um int byte: inteiro de 8 bits sinalizado, em complemento de dois short: inteiro de 16 bits sinalizado, em compl. de dois int: inteiro de 32 bits sinalizado, em compl. de dois long: inteiro de 64 bits sinalizado, compl. de dois char: caracter UCS de 16 bits float: número de ponto flutuante de 32 bits, segundo o padrão IEEE 754 ◦ double: número de ponto flutuante de 64 bits, segundo o padrão IEEE 754 ◦ ◦ ◦ ◦ Prof. Fábio M. Costa - Instituto de Informática / UFG Original: Wolfgang Emmerich, 2000 24
Pequeno resumo. Os sistemas de computadores podem ser construídos para serem mais rápidos e confiáveis Por meio do uso de múltiplas CPUs. Quatro organizações para sistemas multi-CPUs são multiprocessadores, multicomputadores, máquinas virtuais e sistemas distribuído. Cada uma delas apresenta suas próprias propriedades e questões.
- Slides: 25