Baixe o app para aproveitar ainda mais
Prévia do material em texto
Sistemas Distribuídos Prof. Carlos Viana Introdução • A palavra "distribuídos" em termos tais como "sistema distribuído", "programação distribuída", e "algoritmo distribuído" originalmente se referia a redes de computadores onde os computadores individuais foram distribuídos fisicamente dentro de uma certa área geográfica. Introdução • Os termos são hoje utilizados em um sentido muito mais amplo, mesmo referindo-se a processos autônomos que são executados no mesmo computador físico e interagem uns com os outros por passagem de mensagens. “Os serviços disponibilizados por um ambiente distribuído se caracterizam por serem provedores de serviços, disponibilizando os mesmos para que os usuários possam utilizá-los. Mas para que isto ocorra, um formato padrão deve ser compreensível para qualquer um que precise utilizá-los em um registro central que esteja disponível”. (COULOURIS, 1998) Definição • “ Um sistema distribuído é um conjunto de computadores independentes entre si que se apresenta a seus usuários como um sistema único e coerente” – Tanenbaum/Van Steen Definição • “Um sistema no qual componentes de hardware ou software estão localizados em computadores em rede que comunicam e coordenam as suas ações através da troca de mensagens” (Coulouris) Definição • “Um sistema no qual a falha de um computador que nem sequer sabíamos existir, pode tornar o nosso computador não usável” (Lamport) Definição • Aspectos relevantes na definição de Tanenbaum & van Steen: – Computadores (processos) independentes; – Sistema único: middleware; Definição • Podemos então caracterizar um Sistema Distribuído pelas seguintes propriedades: – Constituído por múltiplos computadores (processos); – Ligados por uma rede: • Portanto, não partilham memória; • Comunicam-se apenas por mensagens; – coordenam ações e cooperam entre si; Sistemas Distribuídos x Redes de Computador • A computação distribuída não é o mesmo que redes de comunicação: – As redes preocupam-se com: • O envio de mensagens de um ponto A para outro B; • E não com o que se faz com a mensagem; – A computação distribuída: • Assume que existe alguma forma de enviar a mensagem, (o transporte da mensagem é assegurado pela rede de comunicação); • Preocupa-se com as propriedades dessas mensagens; • E como construir um sistema com o uso de mensagens; Dificuldades • Compartilhar: –Dados; –Processamento; –Consistência; • Descoberta: –Como localizar os recursos; –Uma vez encontrados, como usá-los? • Modelos de programação: –Complexidade e dimensão dos sistemas; –Não-determinismo no seu funcionamento; – Torna os modelos de programação necessariamente complexos; Falhas nos Sistemas • Sistema não distribuído: – Quando falha, esta é total; – Quando ocorre uma falha, sabemos que ocorreu; – Uma estratégia de recuperação: re-iniciar; • Sistema distribuído: – A falha pode ser parcial (apenas em alguns elementos); – A falha pode não ser conhecida; – Uma estratégia para lidar com falhas; Características dos Sistemas Distribuídos Compartilhamento de Recursos • “Recurso” caracteriza o conjunto de elementos que podem ser compartilhados de forma útil: – Hardware: impressoras, discos; – Software: arquivos, bancos de dados, compiladores; • O compartilhamento reduz custos; • Recursos fisicamente encapsulados em um dos computadores de um Sistemas Distribuídos 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; Concorrência • Concorrência e execução paralela existem em um Sistema Distribuído 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 Sistema Distribuído; • 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; • “Em alguns anos, os homens estarão aptos a efetuar uma maior quantidade de comunicação utilizando uma máquina do que pessoalmente” J.C.R Licklider (1968) Exemplos Sistemas Distribuídos Internet • Através de um protocolo de comunicação relativamente simples, é possível realizar trocas de arquivos com música, vídeo e demais tipos de dados com computadores localizados em várias partes do planeta. Processadores Multinúcleo • Basicamente os processadores multinúcleos distribuem as tarefas entre os vários núcleos, o que dinamiza o processamento, esse conceito passou a ser utilizado após as empresas fabricantes de chips atingirem o clock máximo dos processadores, o que não possibilitava um aumento de produtividade do chips. Cluster • Talvez o exemplo que mais facilite o entendimento do conceito de sistemas distribuídos, por definição um sistema onde dois ou mais computadores trabalham de maneira conjunta para realizar processamento pesado. Cluster Beowulf • Cluster Beowulf são clusters de desempenho escaláveis, baseados numa infraestrutura de hardware comum, rede privada e software 'open source' (Linux). O 'hardware comum' pode ser qualquer tipo de computador, significando que não é necessário usar equipamentos próprios para cluster, bastando utilizar equipamentos comuns a redes tradicionais e PCs. Corba • Tecnologia padrão de objetos e sistemas distribuídos, definido pelo OMG ( The object management group ). Mais de 700 empresas participantes como: HP, IBM, etc... CORBA oferece grande portabilidade integrando, por exemplo, linguagem COBOL com outras com suporte a CORBA. Computação Voluntária • Esse tipo de sistema de computação distribuída, geralmente associado a grandes projetos científicos, utiliza a capacidade de máquinas ociosas espalhadas pelo mundo para processar grandes quantidades de informação. Ponto a Ponto • É uma arquitetura de sistemas distribuídos caracterizada pela descentralização das funções na rede, onde cada nó realiza tanto funções de servidor quanto de cliente. Cliente/Servidor • Implica um processamento cooperativo de requisições submetidas por um cliente para o servidor que as processa e retorna os resultados para o cliente. Neste modelo o processamento da aplicação é dividido entre o cliente e o servidor. Grid • A ideia deste modelo reside em coordenar os recursos computacionais do maior número possível de computadores de maneira descentralizada usando padrões, interfaces e protocolos abertos para oferecer alto desempenho com qualidade de serviços sob demanda ao usuário do grid e de maneira transparente. Razões a favor de sistemas distribuídos • Funcionalidades e capacidades distribuídas: – clientes / servidores; – Recebimento de informação / processamento; • Domínio da aplicação intrinsecamente distribuído: – Caixa de registo e sistema de inventário numa cadeia de supermercados;– Sistema de gestão de dados administrativos numa rede hospitalar; • Desempenho: – Distribuição de carga, dados e processamento; – Permite distribuir tarefas de modo a optimizar o desempenho geral; – Mais CPU´s, maior capacidade de processamento; • Vantagem econômica: custo/performance; • Expansibilidade (scalability): – Utilizadores (e processos), dispersão física e administração; • Disponibilidade e tolerância a falha; Objetivos na concepção de um sistema distribuído • Acessibilidade e partilha de recursos dispersos fisicamente. • Transparência (da distribuição): – Capacidade de esconder dos utilizadores a distribuição física dos recursos: – A visão deverá ser de um sistema único e consistente • Aberto: – Capacidade de o sistema ser implementado de diferentes formas; • Expansível (scalability); Abertura de um sistema distribuído • Deve ser capaz de interagir com outros sistemas abertos, independentemente do ambiente. • Para isso precisam de: – Ter interfaces bem definidas e públicas; – Suportar portabilidade das aplicações; – Ser facilmente inter-operáveis; • Deve ser independente da heterogeneidade do seu ambiente de execução: – Plataformas (hardware + software); – Linguagens de programação; Middleware • 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. Middleware • Ele oculta da melhor maneira possível a heterogeneidade das plataformas nas 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. Middleware e abertura • Um Sistema Distribuído baseado num middleware aberto, os protocolos em cada camada do middleware têm de ser os mesmos, assim como as interfaces disponibilizadas às aplicações; Escala em sistemas distribuídos • A expansibilidade de um sistema distribuído, envolve pelo menos 3 componentes: – Dimensão: número de utilizadores e/ou processos; – Dispersão geográfica: distância máxima entre nós; – Administração: número de domínios administrativos; • A grande maioria dos sistemas apenas olha à expansibilidade relacionada com a dimensão. Hoje, os desafios são nas outras duas dimensões, e.g.: – Realização de plataformas para computação Grid e computação na Cloud; Técnicas para assegurar scalability • Minorar latência de comunicação: enquanto espera por uma resposta, faz outra coisa. – Usar o mais possível comunicação assíncrona; – Ter um handler separado para a resposta em espera; – Dificuldade: Nem todas as aplicações encaixam neste modelo; • Distribuição: dividir dados e computação por múltiplas máquinas. – Deslocar computações para os clientes (Java applets); – Descentralizar o serviço de nomes (DNS); – Descentralizar os sistemas de informação (WWW); • Replicação/Caching: tornar disponível em diferentes máquinas cópias dos dados. – Replicação em servidores de ficheiros e bases de dados; – Cópias de Web sites (mirrors); – Web caches (em browsers e proxies); – Caching de ficheiros (no servidor e no cliente); Scalability: dificuldades • A replicação e caching: – Reduz latência da comunicação. – Distribui processamento mas pode originar problemas de consistência. • Modificar uma cópia torna-a diferente das demais: – Manter a informação consistente, requer sincronização global em cada modificação; – Assegurar sincronização global impede soluções de grande escala; • Observações: – Se pudermos tolerar alguma inconsistência, reduzimos a necessidade de sincronização global ; –A tolerância de cópias não consistentes depende do tipo de aplicação; Dúvidas
Compartilhar