Baixe o app para aproveitar ainda mais
Prévia do material em texto
- -1 ARQUITETURA DE SISTEMAS DISTRIBUÍDOS EVOLUÇÃO DA COMPUTAÇÃO E INTRODUÇÃO AOS SISTEMAS DISTRIBUÍDOS - -2 Olá! Objetivo desta aula Ao final desta aula, o aluno será capaz de: 1- Entender as características da computação centralizada e da computação distribuida; 2- Conhecer as vantagens e desvantagens de cada arquitetura e a motivação para esta evolução 3- Identificar o conceito de sistemas distribuídos. Introdução O profissional da área de tecnologia da informação atua diretamente no planejamento, na implementação e na implantação de soluções de TI nas organizações. Dessa forma, é importante que compreenda os conceitos, os benefícios, as características e as restrições de cada arquitetura. Nesta aula abordaremos esses tópicos, com alguns exemplos. 1 Histórico Primeiros computadores: grandes e caros. Anos 50-60: spooling, multiprogramação. Início dos anos 60: sistemas time sharing. Final dos anos 60 e início dos anos 70: surgimento de redes de computadores. A partir dos anos 70: inicia-se a pesquisa em sistemas distribuídos. Desde seu início, a indústria de computadores tem se voltado para uma pesquisa interminável, em busca de ampliar, cada vez mais, seu poder no âmbito computacional. O Eniac podia executar 300 operações por segundo, sendo, tranquilamente, mil vezes mais rápido do que qualquer calculadora anterior a ele, e, mesmo assim, as pessoas ainda não estavam satisfeitas. Hoje temos máquinas um milhão de vezes mais rápidas do que o Eniac e, contudo, existe demanda para um poder computacional maior. Não importa quanto poder computacional exista: ele nunca será suficiente. No passado, a solução era fazer com que o relógio do processador fosse executado mais rápido (overclocking). Infelizmente, estamos começando a atingir alguns limites fundamentais na frequência do clock. De acordo com a teoria da relatividade de Einstein, nenhum sinal elétrico pode propagar mais rápido do que a velocidade da luz. Construir computadores com tamanho reduzido pode ser possível, mas, logo surge outro problema fundamental: a dissipação de calor. Quanto maior a frequência do relógio do processador, maior será a produção de calor - -3 produzida por ele; e quanto menor o computador, maiores serão os problemas associados à dissipação desse calor. Uma maneira de aumentar a velocidade é fazer uso de computadores altamente paralelos. Essas máquinas são construídas com muitas CPUs (unidade central de processamento), objetivando processar, coletivamente, com muito mais poder computacional do que com apenas uma única CPU. Por outro lado, com a evolução da internet, podemos analisar que um sistema com centenas de computadores espalhados pelo mundo não difere de um sistema de centenas de computadores em uma única sala, embora a latência e outras características técnicas sejam diferentes. Neste contexto, colocar uma quantidade representativa de computadores em uma sala é até fácil, desde que se tenham recursos financeiros, espaço físico e uma infraestrutura mínima. O espaço deixará de ser um problema, se esses computadores estiverem espalhados ao redor do mundo. A preocupação surge quando queremos que eles se comuniquem uns com os outros para trabalhar em conjunto na solução de um único problema. Os sistemas com múltiplos processadores caracterizam-se por possuir mais de uma CPU, interligadas, trabalhando em conjunto. Múltiplos processadores podem ser utilizados, simultaneamente, por diversos processos diferentes, e, com eles, novos problemas de concorrência são introduzidos, porque vários processos podem querer acessar um dispositivo ao mesmo tempo. Esses sistemas podem ser divididos em: Fortemente acoplados - quando os processadores compartilham uma mesma memória principal. Fracamente acoplados – os diversos processadores/estações presentes no sistema utilizam sua memória local individualmente. Sistemas centralizados - Multiprocessador de memória compartilhada é um sistema de computador no qual duas ou mais CPUs compartilham acesso total a uma memória principal comum. Multiprocessadores são populares e atrativos, porque oferecem um modelo de comunicação simples, e a sincronização é possível mediante o emprego de diversas técnicas bem definidas. Uma desvantagem é que os multiprocessadores de grande porte são difíceis de construir e, por isso, são caros. Sistemas distribuídos - Uma solução alternativa que tem sido empregada com sucesso para solucionar esse problema é a utilização de multicomputadores, que são CPUs que não compartilham memória principal. Cada CPU tem sua própria memória e é gerenciada por um sistema operacional individualmente. Esses sistemas também são conhecidos como cluster – COWS (cluster of workstations - aglomerados de estações de trabalho). - -4 2 POR QUE COMPUTAÇÃO DISTRIBUÍDA? Com a melhoria das tecnologias, o que se conseguia executar, algumas décadas atrás, somente com computadores que custavam milhões de dólares, hoje se consegue executar com computadores de baixo custo. O segundo fator é o surgimento de redes de computadores de alta velocidade, em que informações podem ser transferidas entre computadores na faixa de microssegundos. Como resultado, é possível conectar diversos computadores por meio de uma rede de alta velocidade para executar um sistema de computação colaborativo. Estes sistemas são geralmente chamados de sistemas distribuídos (SD). •Sistema distribuído permite uma nova forma de fazer ciência –Teoria -> experimentos –Teoria -> simulações •Computação usada para modelar sistemas físicos •Vantagens –Possibilidade de repetição de eventos –Manipulação de parâmetros –Estudo de sistemas onde não há teorias exatas •Problemas – modelagem da terra/clima, simulações de reservatórios de petróleo, problemas com grandesMuito grandes: escalas (cosmologia). – : projeto de remédios, projetos de chips, biologia estrutural, física de partículas.Muito pequenos – física de partículas, dinâmica de fluidos, modelagem de comportamento de pessoas.Muito complexos: – produção e exploração de petróleo, simulação de acidentes.Muito caros: – tolerância a falhas em aviões, teste de dispositivos nucleares, simulação de estratégias deMuito perigosos: defesa. •Problemas que requerem alto desempenho computacional Modelagem climática Mapeamento do genoma Modelagem de semicondutores Dispersão de poluição Projetos farmacêuticos - -5 Modelagem de reatores nucleares Renderização de imagem Aumento de desempenho • Limites físicos –Velocidade da luz. –Miniaturização dos componentes. –Isolamento e dissipação de calor. Até meados de 1965 não havia nenhuma previsão real sobre o futuro do hardware, quando o então presidente da Intel, Gordon E. Moore, fez sua profecia, na qual o número de transistores dos chips teria um aumento de 100%, pelo mesmo custo, a cada período de 18 meses. Essa profecia tornou-se realidade e acabou ganhando o nome de Lei de Moore. • Solução: Paralelismo – Execução simultânea de operações. – Solução com melhor custo/benefício. 3 EVOLUÇÃO DO PROCESSAMENTO Anos 70 Primeiras máquinas paralelas - Illiac IV (64 processadores) foi um supercomputador construído pela Universidade de Hlinois e financiado pelo governo dos EUA, Sua construção custou US$ 31 milhões. - -6 Fonte: Illiac IV Fonte: htttp://pt.wikipedia.org/wiki/Ficheiro:ILLIAC_4_ parallel_computer.Jpg Anos 80 -computadores vetoriais (Cray); - máquinas paralelas comerciais para aplicações científicas (meteorologia, petróleo...); -Alto custo de desenvolvimento; - pequena escala, dificuldade de programação. Fonte: Cray 1 - A Cray Research, empresa de Seymour Cray, o primeiro supercomputador vetorial (Cray), com altíssima velocidade de processamento e grande capacidade de memória, empregado em pesquisas cientificas e militares. Fonte: http://museudoscomputadores.blogspot.com/ - -7 Anos 90 dias de hoje -multiprocessadores escaláveis; -redes de estações de trabalho; -computação distribuída; -aplicaçõescliente/servidor; -objetos distribuídos; -clusters; -grids. Com o surgimento de malhas computacionais (grids), em que as aplicações executam em ambientes distribuídos, compostos por um grande número de máquinas heterogêneas, administradas por diferentes instituições e conectadas à internet. Fonte: Computação em grade (grid computing) Fonte: http://www.adarshpatil.com/newsite/grid.htm 4 PARALELISMO X COMPUTAÇÃO PARALELA Paralelismo –Projeto de uma CPU –Projeto de uma arquitetura paralela –E/S sobreposta ao processamento Computação paralela - -8 –Coleção de elementos de processamento –Trabalhando em conjunto para a realização de uma tarefa Paralelismo Dentro de um processador Figura 1 - Arquiteturas sequenciais - -9 Figura 2 - Arquiteturas pipeline Figura 3 - Arquiteturas superescalares - -10 Figura 4 - Arquiteturas VLIW Arquiteturas SMT · SMT = Simultaneous Multithreading · Múltiplos threads despacham múltiplas instruções no mesmo ciclo · Aumenta a possibilidade de manter todas as unidades funcionais ocupadas Por que clusters? · Custo/benefício - redução de custo para se obter processamento de alto desempenho, utilizando máquinas de baixo custo. - -11 · Escalabilidade - possibilidade de inclusão de novos componentes, que sejam adicionados à medida que cresça a carga de trabalho. · Alto desempenho - possibilidade de resolver problemas complexos através de programação e processamento paralelo, reduzindo o tempo para a solução do problema. · Independência de fornecedores - utilização de hardware aberto, software de uso livre e independência de fabricantes e licenças de uso. · Tolerância a falhas - o aumento de confiabilidade do sistema como um todo, caso alguma parte falhe. Cluster Beowulf · Em 1994, o Projeto Earth and Space Sciences (ESS) da NASA construiu o primeiro cluster paraBeowulf fornecer computação paralela com o intuito de resolver problemas envolvidos em aplicações da ESS. · Uma característica desta arquitetura é que é constituída por diversos nós escravos e gerenciada por um só computador. O primeiro cluster de PC's (Beowulf) foi construído em 1994 por dois pesquisadores do Goddard Space Flight Center (NASA) Thomas Sterling e Don Becker. Naquele momento esses pesquisadores necessitavam de uma solução de baixo custo e que processasse na ordem de 1 Gflop, o que significa um bilhão de operações em ponto flutuante por segundo, já que preço de um supercomputador com este nível de desempenho era de aproximadamente um milhão de dólares. A idéia original era utilizar processadores mais baratos, para tanto, este cluster foi configurado inicialmente com 16 máquinas utilizando processadores 486DX4, placas de rede - -12 Ethernet e sistema operacional Linux. Este primeiro cluster atingiu a marca de 70 Mflops, com um custo estimado em 10% do valor de mercado para uma máquina de desempenho similar. Este projeto obteve tanto sucesso que o termo Beowulf é utilizado até hoje como uma classe de clusters. Estas máquinas foram montadas e programadas de forma que possibilitassem a paralelização/ divisão das tarefas, buscando atingir um poder de processamento equivalente a um supercomputador da época, por uma fração do preço. Este primeiro cluster chegou 70 Mflops, com um custo estimado em 1/10 do valor cobrado pelo mercado para um sistema de desempenho similar. Tal projeto fez tanto sucesso que o termo Beowulf foi estendido a uma classe de clusters que são utilizados ainda hoje. - -13 1.Computação centralizada – Mainframe: termo utilizado para se referenciar a um grande computador, normalmente produzido por uma grande empresa. O nome tem origem na forma com que estes computadores eram construídos. Todos os componentes (processador, memória...) do computador principal (main) são colocados em uma única estrutura (frame). – Características – Sistemas multiusuários – Sistemas proprietários -> hardware, software, rede – Instalação e manutenção feita pelo fabricante -> confiabilidade X custo 2.Microcomputadores e redes de computadores Ampliação do parque computacional, em função de: • Processadores mais rápidos e mais baratos. • Redes mais rápidas e acessíveis. • Liberdade de escolha. • Menor custo de manutenção. • Necessidade inerente de conectividade. • Aplicação básica: compartilhamento de recursos. Evolução: Os terminais foram sendo substituídos pelos primeiros microcomputadores que começavam a ficar obsoletos. Em geral, o uso de um programa emulador de terminais e de uma unidade de disquete era suficiente para que um simples PC-XT executasse essa tarefa, uma vez que só precisaria executar o emulador. A partir deste ponto, o micro passaria a se comportar como um terminal. Em alguns casos, era necessário o uso de uma placa que compatibilizasse a forma de comunicação serial entre os dois computadores. 3.Sistemas distribuídos Utilização das redes de computadores (locais e de longa distância) para execução colaborativa e cooperativa de aplicações e não somente para compartilhamento de recursos. Sistema distribuído = computadores + rede + aplicação Conceito: É um sistema em que os computadores estão conectados em rede e coordenam suas ações através de troca de mensagens. - Definições de sistemas distribuídos Colouris: “Um sistema no qual os componentes de hardware ou software, localizados em computadores interligados em rede, se comunicam e coordenam suas ações apenas enviando mensagens entre si,” - -14 Tanenbaum: “Um sistema distribuído é um conjunto de computadores independentes que se apresenta a seus usuários como um sistema único e coerente.” Silberschatz: “Coleção de processadores que não compartilham memória ou relógio.” 4.Comparação com sistemas centralizados Vantagens: • Melhor relação preço/desempenho • Capacidade de crescimento incremental (escalabilidade) • Tolerância a falhas Desvantagens: • Falta de padronização para desenvolvimento de software • Falta de uma divisão clara entre sistema/aplicação • Latência e possibilidade de congestionamento na rede • Redução da segurança 5.Desafios da computação distribuida · Ausência de fonte comum de tempo (relógio global) · Ausência de memória compartilhada · Compartilhamento de recursos O que vem na próxima aula Na próxima aula, você vai estudar: · Identificar o uso de aplicações distribuídas; · Conhecer as principais aplicações atuais; · Compreender como a computação distribuída pode contribuir para TI verde. CONCLUSÃO Nesta aula, você: • Entendeu a necessidade da utilização da computação de alto desempenho nos ambientes corporativos; • Conheceu as características da computação centralizada e da computação distribuída; • Identificou as vantagens e desvantagens de cada arquitetura e a motivação para esta evolução. • • • - -1 ARQUITETURA DE SISTEMAS DISTRIBUÍDOS APLICAÇÕES DISTRIBUÍDAS E TI VERDE - -2 Olá! Objetivo desta aula Ao final desta aula, o aluno será capaz de: 1- Identificar o uso de aplicações distribuídas; 2- Reconhecer as principais aplicações atuais; 3- Avaliar a contribuição da computação distribuída para a TI verde. Introdução Nesta aula, você estudará a importância das aplicações distribuídas e da TI verde. Para as empresas, o valor da informação é considerado, na atualidade, como algo imensurável, e a velocidade para adquiri-la têm fomentado investimentos no desenvolvimento da computação de alto desempenho. Para compreendermos melhor essa questão, vamos ampliar nosso estudo sobre a necessidade e as dificuldades de se implementar um sistema distribuído. 1 Surgimento dos sistemas distribuídos À medida que a velocidade e a confiabilidade das redes de computadores aumentam, computadores do mundo inteiro estão cada vez mais interconectados. A comunicação remota via rede, originalmente reservada para grandes instalações de computadores e ambientes acadêmicos, tem sido amplamente empregada. Em sistemas distribuídos, computadores remotos trabalham cooperativamente por meio da rede, de modoque seja visto como uma única máquina local. As aplicações de sistemas distribuídos podem ser executadas em máquinas locais e remotas, além de permitir o compartilhamento de dados, arquivos e outros recursos entre diversas máquinas. Os sistemas distribuídos quase sempre surgem da necessidade de melhorar a capacidade e a confiabilidade de uma única máquina (como, por exemplo, a capacidade de processamento e o tamanho de armazenamento dessa máquina). 2 Limitação das Máquinas Fatores econômicos podem limitar a capacidade de um sistema! - -3 Sendo assim, ao implementar um sistema com máquinas de baixo custo, é possível projetar um poderoso sistema sem a utilização de equipamentos dispendiosos. Embora ofereçam muitas vantagens em relação a sistemas centralizados, os sistemas distribuídos podem ser complexos e de difícil implementação e gerenciamento. Por exemplo, os sistemas distribuídos têm de manipular atrasos de comunicação e problemas de confiabilidade. É muito difícil gerenciar falhas de máquinas! Mais difícil ainda é gerenciar sistemas distribuídos compostos por diversas máquinas, já que estão mais propensos a sofrer queda de sistema do que os sistemas de apenas uma única máquina. Concorrência A execução concorrente é uma característica intrínseca de um sistema distribuído, na qual os processos disputam pelos recursos compartilhados. Inexistência de relógio global A coordenação dos processos depende de uma noção compartilhada do tempo em que as ações dos programas ocorrem. Falhas independentes Falhas na rede, nos sistemas ou nos processos demoram a ser percebidas nos sistemas distribuídos. (COULOURIS; DOLLIMORE; KINDBERG, 2007). Falácias da computação distribuída Os sistemas distribuídos são diferentes dos softwares tradicionais, porque seus componentes estão dispersos em uma rede. Não levar essa dispersão em conta durante o projeto torna muitos sistemas desnecessariamente complexos, o que resulta em erros que precisam ser corrigidos mais tarde (o que chamamos de retrabalho). Peter Deustch formulou esses erros como as seguintes 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 do transporte é zero · Há somente um administrador - -4 Atributos dos Sistemas Distribuídos Vamos conhecer alguns atributos dos sistemas distribuídos: Latência – Tempo decorrido entre o início de uma operação e seu término. O termo latência é usado, normalmente, para comunicações entre partes de um sistema. Taxa de transmissão – Taxa que mede a capacidade de transmissão/recepção de informações por unidade de tempo. Speedup – Termo que significa ganho relativo de velocidade ou desempenho. Como exemplo de, speedup podemos citar a razão dos tempos de execução sequencial e o paralelo. Bottleneck – Termo que significa (um elemento de um sistema é o gargalo quando limita seugargalo desempenho, embora o resto do sistema ainda tenha folga para trabalhar. É desejável que não haja gargalos no sistema e que todos os elementos alcancem seus limites juntos. Escalabilidade – Capacidade de melhoria do desempenho do sistema distribuído conforme cresce o número de elementos processadores (de acordo com Neuman (1994), a escalabilidade pode ser medida, a princípio, por três dimensões, quais sejam: – o que significa que é fácil adicionar mais usuários eEm relação a seu tamanho recursos ao sistema; – trata-se de um sistema nos quais usuários e recursos podemEm termos geográficos estar longe uns dos outros; – o que significa que o sistema ainda pode ser fácil deEm termos administrativos gerenciar, mesmo que seja abrangente). Balanceamento de Carga – Característica que permite ao sistema distribuído dividir, adequadamente, suas tarefas, de modoque um elemento processador não fique mais sobrecarregado que os outros. Throughput – Medida de produtividade de um sistema. Essa medida exprime, por unidade de tempo, a produção efetiva do sistema em termos de tarefas, transações, operações, etc. Confiabilidade – Característica do sistema que dá maior ou menor certeza de que vai funcionar a contento. Tolerância a falhas – Capacidade de o sistema sobreviver à falha de alguns de seus elementos. Disponibilidade – Característica que indica quanto tempo o sistema funcionará ininterruptamente sem ser afetado por falhas, manutenção preventiva ou corretiva, etc. Segurança – Garantia de o sistema fazer, de maneira correta e para os usuários corretos, aquilo para o qual foi projetado (em outras palavras, usuários ou programas não autorizados não devem ter acesso aos recursos do sistema. O sistema deve ser capaz de garantir que essa diretriz seja cumprida. Caso contrário, esse mesmo sistema deve detectar como, quando e por que não se cumpriu o estabelecido). Migração de tarefas – Transferência de responsabilidade de execução de uma tarefa de um elemento para outro. A migração de tarefas de ser de processos ou de computação. Migração de dados – Transferência de dados de um elemento processador para outro. - -5 Replicação- Duplicação de recursos de um elemento processador em outro. Transparência – Característica que esconde de usuários ou aplicativos detalhes de funcionamento do sistema distribuído, de tal forma que se tenha a impressão de que esse sistema é centralizado . Veja agora alguns aspectos de transparência (ISO, 1995): Acesso – oculta diferenças na representação de dados e no modo de acesso a um recurso; Localização – oculta o lugar em que um 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 durante o 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. Imagem Única do Sistema (SSI) Um Sistema de Imagem Única (SS!) é a propriedade de se ocultar a complexidade envolvida em uma natureza distribuida e heterogênea de recursos disponíveis para os usuários e aplicações, de tal forma que estes visualizem o sistema como um recurso único. (PITANGA, 2004) Veja, a seguir, alguns beneficios do SSI: Os serviços podem ser requisitados a partir de qualquer nó do sistema;· A localização de dispositivos fisicos pode ser totalmente transparente para o usuário;· O sistema apresenta disponibilidade em seus serviços;· O sistema permite ao usuário trabalhar com uma interface simplificada, com comandos que ajudem a· administrar o cluster por inteiro, como se fosse uma única máquina; O sistema reduz riscos em erros operacionais e apresenta maior disponibilidade;· O sistema permite a localização independente para a comunicação das mensagens, unificando o espaço de· comunicação entre processos; O sistema permite um modelo de processos com espaço globalizado para balanceamento de carga;· O sistema permite que diversos componentes de uma aplicação trabalhem, de forma cooperativa, para criar a· imagem de uma única aplicação no sistema; Quanto à concorrência, os usuários não devem notar que existem outras pessoas utilizando o sistema.· - -6 3 Máquinas mais velozes Desde 1993, o site publica, semestralmente, um ranking dos 500 computadores com maior TOP500 desempenho no mundo. Na lista do , são obtidos pelo benchmark os seguintes resultados: ranking* Rmax – performance para o maior problema executado em uma máquina (em Gflop/s); Nmax – tamanho do maior problema executado em uma máquina; N1/2 – tamanho quando metade de Rmax é executado; Rpeak – pico de performance teórico para a máquina (em Gflop/s). https://top500.org *Esse ranking é baseado nas informações do programa utilizado para a análise de performance: o LINPACK benchmark. Sua atualização ocorre no mês de junho, coincidindo com a InternationalSupercomputer Conference, e no mês de novembro, na IEEE Supercomputer Conferente. Um computador japonês conquistou o 1º lugar no ranking de junho de 2011, com desempenho medido em 8.16 petaflops. O K computer é mais poderoso que os próximos cinco sistemas da lista combinados. O desempenho foi medido com 68.554 processadores SPARC64VIIIfx, cada um com oito núcleos, em um total de 548.352 núcleos (quase o dobro de qualquer outro sistema dessa lista). Até sua conclusão, essa máquina terá mais de 80.000 processadores! 3.1 Brasil no ranking das máquinas mais velozes O Brasil tem dois supercomputadores na lista do ranking dos computadores mais velozes do mundo: Tupi - Operado pelo Instituto Nacional de Pesquisas Espaciais (INPE) – ocupa a 34ª posição, com 30.270 processadores AMD Opteron de 12 núcleos, cada um rodando a 2.1 GHz e com desempenho de 205.1 teraflops. Galileu - Operado pelo Núcleo de Atendimento em Computação de Alto Desempenho (NACAD/COPPE), da Universidade Federal do Rio de Janeiro (UFRJ) – ocupa a 167ª posição, com 6.464 processadores Intel Xeon Nehalem de 2.8 GHz cada, e desempenho de 64.6 teraflops. Gráfico do ranking TOP500 Veja, a seguir, gráficos fornecidos pelo ranking TOP500 que apresentam o desenvolvimento da performance dos supercomputadores, de 1993 a 2011, e sua projeção: https://top500.org/ https://top500.org - -7 4 Intranet De acordo com Marcelo (2002), a intranet consiste em: “[...] redes corporativas que se utilizam de tecnologia e de infraestrutura de comunicação de dados da internet. Essas redes são utilizadas na comunicação interna da própria empresa e também na comunicação com outras empresas. [...] Portanto, a intranet é o uso da tecnologia da internet na rede corporativa da empresa. Ela facilita a distribuição de documentos, a transferência de arquivos, a consulta à informação e muitas outras aplicações.” Diagrama da intranet Veja, a seguir, um diagrama esquemático de uma intranet. - -8 5 Computação em grade (grid computing) A tecnologia por trás da computação em grade é um conjunto de que gerenciamsoftwares middleware* recursos distribuidos e espalhados pela organização, disponibilizando os servidores e, eventualmente, os desktops da empresa. A ideia básica é combinar os recursos disponíveis com as demandas computacionais das empresas.(CHEDE, 2004, p. 16) Computação em grade é uma maneira bastante eficiente de maximizar recursos computacionais. Trata-se de uma consolidação virtual de servidores. (CHEDE, 2004). *Designação utilizada para se referir ao software executado entre as aplicações distribuídas e o sistema operacional. O middleware ajuda a fornecer portabilidade, transparência e interoperabilidade entre sistemas distribuídos. Exemplo de grid computing Veja, a seguir, o Worldwide LHC Computing Grid (CERN) – uma computação em grade: - -9 Fonte: Imagens disponíveis no link http://michaelgr.com/2008/10/03/cern-unveils-the-worldwide-lhc- computing-grid 6 Computação oportunista - projeto SETIG O conceito de computação oportunista consiste em usar redes de computadores para resolver problemas computacionais. Esse conceito se popularizou com o sucesso do projeto SETIe, baseado na ideia do voluntariado, em que um usuário toma a decisão de ceder ciclos ociosos de seu computador para contribuir com uma determinada organização para a execução de alguma tarefa. (CHEDE, 2004, p. 57) Veja, a seguir, figuras do projeto SETI@home: Fonte: Imagens disponíveis nos links #1 e #2 #1 https://pt.wikipedia.org/wiki/SETI#SETI.40HOME #2 https://boinc.berkeley.edu - -10 7 Computação oportunista - projeto BOINC Outro projeto que pode ser citado no campo da computação oportunista é o Berkeley Infraestructure for Network Computing (BOINC), que tem como proposta permitir que o usuário possa operar simultaneamente diversos projetos desse tipo de computação. Veja, a seguir, a realização de uma previsão de clima, utilizando o projeto BOINC: 8 Sistemas distribuídos e TI verde A virtualização é a camada de abstração entre sistemas de hardware de computador e do software que roda nesses sistemas, proporcionando uma visão lógica dos recursos de computação. Trata-se de uma das formas de economizar recursos e praticar TI verde! A virtualização trata de estender ou substituir uma interface existente, de modo a imitar o comportamento de outro sistema. Uma das razões mais importantes para introduzir a virtualização na década de 1970 foi permitir que softwares herdados (aplicações e sistemas operacionais) executassem em hardwares de mainframe. (TANENBAUM, 2007) Procure, por exemplo, comparar o que é real e o que é virtual! - -11 Algo real possui características físicas; já o virtual está vinculado à simulação. Sendo assim, a virtualização pode ser definida como uma simulação de um ambiente real. Virtualização e o sistema de conectividade Atualmente, grande parte dos computadores está conectada por redes de computadores! Essa conectividade exige dos administradores que um conjunto grande e heterogêneo de computadores servidores execute (cada um) diferentes aplicações utilizando diferentes recursos, que podem ser acessadas por diversos clientes. A virtualização pode contribuir muito nesse sentido! Em primeiro lugar, porque a diversidade de plataformas e máquinas pode ser reduzida. Em segundo lugar, porque cada aplicação pode executar em sua própria máquina virtual, incluindo, possivelmente, suas bibliotecas e o sistema operacional (ambos relacionados), que estariam executando em uma plataforma comum. Diagrama esquemático da máquina virtual Veja, a seguir, um diagrama esquemático de uma máquina virtual: Supercomputadores e TI verde - -12 Desde abril de 2005, o site Green500 fornece um ranking dos mais eficientes supercomputadores do mundo em termos energéticos. Por décadas, a noção de performance tem sido sinônimo de velocidade. Esse enfoque especial levou ao surgimento de supercomputadores que consomem grandes quantidades de energia elétrica e produzem tanto calor que exigem enormes instalações de refrigeração. Alguns supercomputadores têm liderado essas listas que são publicadas semestralmente, como as do ranking TOP500. Um deles aparece no ranking Green500 de junho de 2011: o Cluster DEGIMA, da Universidade de Nagasaki, no Japão. Outro máquina que obteve destaque no mesmo mês e ano é o IBM Blue Gene (protótipo/Q), que possui eficiência energética de 2097 MFLOPS/watt. Esse supercomputador aparece como o número 1 do ranking Green500. Veja: O que vem na próxima aula Na próxima aula, você estudará sobre os seguintes assuntos: •Tratamento de falhas; •Métodos de tratamento de falhas em sistemas distribuídos. CONCLUSÃO Nesta aula, você: • Conheceu as falácias da computação distribuída;• - -13 • Conheceu as falácias da computação distribuída; • Identificou os atributos dos sistemas distribuídos; • Identificou o uso de algumas aplicações distribuídas; • Identificou os maiores computadores com desempenho no mundo; • Compreendeu a necessidade de se tratar o uso consciente da eficiência energética em máquinas multiprocessadas. • • • • • - -1 ARQUITETURA DE SISTEMAS DISTRIBUÍDOS TRATAMENTO DE FALHAS - -2 Olá! Nesta aula, você irá: 1) Reconhecer alguns dos métodos de tratamento de falhas em sistemas distribuídos. Introdução O profissional da área de Tecnologia da Informação atua diretamente no planejamento, na implementação e na implantação de soluções de TI nas organizações. Dessa forma, é importante que sejam compreendidos os conceitos, os benefícios, as características e as restrições dos sistemas tolerantes a falhas e com alta disponibilidade. Tais sistemas devem ser confiáveis! 1 Falhas Parciais Uma característica dos sistemas distribuídos que os distingue de sistemas centralizados é a noção de falha parcial. A falha parcial pode acontecer quando um componente em um sistema distribuído não funciona. Essa falha pode afetar a operação adequada de outros componentese, ao mesmo tempo, deixar outros totalmente ilesos. A falha em sistemas não distribuídos quase sempre é total, no sentido de que afeta todos os componentes e pode, facilmente, fazer o sistema inteiro cair. Um objetivo importante do projeto de sistemas distribuídos é construir o sistema de tal modo que possa se recuperar automaticamente de falhas parciais, sem afetar, seriamente, seu desempenho global. Em particular, sempre que ocorrer uma falha, o sistema distribuído deve continuar a funcionar de maneira aceitável enquanto o sistema estiver em conserto. Em outras palavras, o sistema distribuído deve tolerar falhas e continuar a funcionar até certo ponto, mesmo na presença dessas falhas. 2 Tolerância a falhas Para entendermos o papel da tolerância a falhas em sistemas distribuídos, em primeiro lugar, precisamos entender o que significa tolerar falhas para esse sistema. Existe uma forte relação entre ser tolerante a falhas e sistemas confiáveis. De acordo com Kopetz e Verissimo Kopetz, H e Veríssimo, P. . Em Mullender (ed.), Distributed(1993)( Real Time and Dependability Concepts - -3 Systems, 2ª ed. Addison-Wesley. 1993), a confiabilidade abrange uma série de requisitos úteis para sistemas distribuídos, tais como: Disponibilidade A disponibilidade consiste na propriedade de um sistema estar pronto para ser usado imediatamente. Trata-se da probabilidade de o sistema funcionar corretamente em qualquer momento determinado e estar disponível para executar suas funções em nome de seus usuários. A alta disponibilidade, por sua vez, representa o que provavelmente funcionará em dado instante de tempo. Por exemplo, se um sistema nunca cai, mas é desligado por duas semanas em um determinado mês, todos os anos, tem alta confiabilidade, mas somente 96% de disponibilidade. Confiabilidade A confiabilidade consiste na propriedade de um sistema poder funcionar continuamente sem falhas. Essa confiabilidade é definida em termos de um intervalo de tempo, e não de um instante de tempo. A alta confiabilidade, por sua vez, representa o que provavelmente continuará a funcionar, sem interrupção, durante um período de tempo relativamente longo. Por exemplo, se um sistema ficar fora do ar por um milissegundo a cada hora, terá uma disponibilidade de mais de 99,99%, mas sua confiabilidade ainda será muito baixa. Segurança Se um sistema deixar de funcionar corretamente durante certo tempo, nada de catastrófico acontecerá. É o que acontece, por exemplo, com sistemas de controle de processos usados em usinas de energia nuclear ou sistemas para enviar pessoas ao espaço. Capacidade de manutenção À capacidade de manutenção consiste na facilidade com que um sistema que falhou pode ser consertado. Sistemas de alta capacidade de manutenção também podem mostrar alto grau de disponibilidade, em especial se as falhas puderem ser detectadas e reparadas automaticamente. 3 Falha, erro e defeito O defeito acontece quando o sistema não pode cumprir o que foi especificado ou prometido. Em particular, se um sistema distribuído é projetado para oferecer a seus usuários uma série de serviços, o sistema falha quando um ou mais desses serviços não podem ser fornecidos completamente. O erro, por sua vez, representa o estado de um sistema que pode levar a uma (a causa de um erro éfalha denominada falha). - -4 É o caso da transmissão de pacotes por uma rede. Espera-se que alguns pacotes estejam danificados quando chegam ao receptor. Meios de transmissão com problemas podem facilmente danificar pacotes. Os erros de transmissão também podem ser causados por más condições atmosféricas, como ocorre com redes sem fio. 4 Tipos de falhas As falhas são classificadas como: Transientes As falhas transientes ocorrem uma vez e, depois, desaparecem. Se a operação for repetida, a falha não acontecerá novamente. Por exemplo, um pássaro voando pelo feixe de um transmissor de microondas pode causar perda de bits em alguma rede. Intermitentes As falhas intermitentes ocorrem e desaparecem por sua própria vontade. Depois, essas falhas reaparecem e assim por diante. Por exemplo, um conector com um contato frouxo causará, muitas vezes, uma falha intermitente. Permanentes As falhas permanentes continuarão a existir até que o componente faltoso seja substituído. É o caso dos chips queimados e dos bugs de software. 5 Modelos de falha Um sistema falha quando não fornece, adequadamente, os serviços para os quais foi projetado. Se considerarmos um sistema distribuído como um conjunto de servidores que se comunicam entre si e com seus clientes, esse fornecimento inadequado de serviços significa que servidores, canais de comunicação ou, possivelmente, ambos não estão fazendo o que deveriam fazer. Contudo, nem sempre um servidor que funciona mal representa a falha que estamos procurando. Se tal servidor depender de outros servidores para prestar seus serviços adequadamente, é possivel que a causa de um erro tenha de ser procurada em algum outro lugar. Para que tivéssemos uma ideia melhor da real seriedade de uma falha, foram desenvolvidos diversos esquemas de classificação. - -5 Um desses esquemas é descrito em (Cristian, F.-Understanding Fault-Tolerant DistributedCristian (1991) Systems. Communnications of the ACM Vol 34, No 2, pp 56-78, 1991) e (Hadzilacos, Hadzilacos e Toueg (1993) V. and Toueg, S. A Modular Approach to Fault-tolerant Broadcasts and Related Problems, Technical report, Dept. of Computer Science, University of Toronto, 1994) da seguinte forma: Veja a seguir, um modelo de falhas em sistemas distribuídos: 6 Técnicas de tratamento Veja, a seguir, algumas técnicas de tratamento: - -6 1. Mascaramento de falha por redundância; 2. Mascaramento de falhas e replicação; 3. Acordo em sistemas com falha; 4. Detecção de falha; 5. Recuperação Mascaramento de falha por redundância Se um sistema deve ser tolerante a falhas, o melhor que ele pode fazer é tentar ocultar de outros processos a ocorrência de falhas. À técnica fundamental para mascarar falhas é usar redundância. Avance e conheça os três tipos possíveis de redundância. Redundância de Informação Na redundância de informação, os bits extras são adicionados para permitir recuperação de bits deteriorados. Por exemplo, um código de pode ser adicionado a dados transmitidos para recuperá-los de ruído naHampming linha de transmissão. Redundância de Tempo Na redundância de tempo, uma ação é realizada e, se for preciso, essa ação será executada novamente. Transações (banco de dados usam essa abordagem. Se uma transação for abortada, ela pode ser refeita sem causar nenhum dano. A redundância de tempo tem especial utilidade quando as talhas são transientes ou intermitentes. Redundância Física Na *, são adicionados equipamentos ou processos extras para possibilitar que q sistemaredundância física como um todo tolere a perda ou o mau funcionamento de alguns componentes. A redundância física pode ser feita em hardware ou em .software Por exemplo, processos extras podem ser adicionados ao sistema, de modo que, se uma pequena quantidade deles cair, o sistema ainda possa funcionar corretamente. Em outras palavras, replicando processos, podemos conseguir alto grau de tolerância à talha. *A redundância física é uma técnica bem conhecida para prover tolerância à falha. Essa técnica é usada em: Biologia – mamíferos têm dois olhos, dois ouvidos, dois pulmões e assim por diante; Aeronaves – aviões 747 têm quatro motores, mas podem voar com três; Esportes – com a utilização de vários juízes, caso algum deles não perceba um evento. A referida técnica também vem sendo usada, há anos, para tolerância à falha em circuitos eletrônicos. Mascaramento de falhas e replicação Grupos de processos fazem parte da solução para construir sistemas tolerantes à falha. - -7 Em particular, ter um grupo de processos idênticos permite-nos mascarar um ou mais processos faltosos àquele grupo. Podemos replicar processos e organizá-losem um grupo para substituir um único processo (vulnerável) por um grupo (tolerante à falha). De modo geral, em casos de tolerância à falha, a replicação é baseada na forma de um protocolo de primário e backup. Nesse caso, um grupo de processos é organizado de modo hierárquico, no qual um servidor primário coordena todas as operações de escrita. Na prática, o servidor primário é fixo, embora seu papel possa ser assumido por um dos backups (caso necessário). Na verdade, quando um servidor primário cai, os backups executam algum algoritmo de eleição para escolher um novo servidor primário. Acordo em Sistemas com Falha Organizar processos replicados em um grupo ajuda a aumentar a tolerância à falha. Em geral, as coisas tornam-se mais complicadas se exigirmos que um grupo de processos chegue a um acordo, o que é necessário em muitos casos, tais como: · Eleger um coordenador; · Decidir a validação ou não de uma transação; · Repartir tarefas entre operários; · Sincronização. Quando a comunicação e os processos são todos perfeitos, chegar a tal acordo costuma acontecer de forma direta, mas, quando não o são, surgem problemas. O objetivo geral de algoritmos de acordo distribuído é que todos os processos que não apresentam falha cheguem a um consenso sobre alguma questão e estabeleçam esse consenso dentro de um número finito de etapas. O problema é complicado pelo fato de que premissas diferentes sobre o sistema subjacente requerem soluções diferentes, considerando que existam soluções para as mesmas. Detecção de falha Para mascarar falhas adequadamente, em geral, também é necessário detectá-las! A detecção de falhas é uma das bases da tolerância à falha em sistemas distribuídos. No caso de um grupo de processos, os sistemas devem ser capazes de decidir quem ainda é um membro e quem não é, isto é, o sistema deve ser capaz de detectar quando um membro de um grupo falhou. Quando se trata de detectar falhas de processos, há, essencialmente, dois mecanismos: - -8 1. Os processos enviam as mensagens ativamente uns aos outros; 2. Os processos esperam passivamente pela entrada de mensagens de processos diferentes. Há várias questões que precisam ser levadas em conta no projeto de um subsistema de detecção de falha. A (Por exemplo, a detecção de falha pode ocorrer por gossiping, no qual cada nó anuncia,detecção de falha periodicamente, a seus vizinhos que ainda está vivo e funcionando) também pode ser realizada como resultado da troca regular de informações com vizinhos, como acontece na disseminação de informações baseada em gossiping. Em determinado momento, todo processo saberá da existência de cada um dos outros processos. Entretanto, o mais importante é que o referido processo terá informações disponíveis suficientes para decidir se outro processo falhou ou não. Um membro cuja informação de disponibilidade é antiga presumivelmente falhará! Detecção de falha – exemplo Podemos também nos deparar com a seguinte situação: um subsistema de detecção de falhas que não consegue distinguir falhas de rede de falhas de nós. Um modo de lidar com esse problema é não permitir que um único nó decida se um de seus vizinhos caiu. Em vez disso, ao perceber que a temporização de uma mensagem se esgotou, um nó requisita a outrosping vizinhos que verifiquem se podem alcançar o nó que, presumivelmente, falhou. Certamente, informações positivas também podem ser compartilhadas: se um nó ainda estiver vivo, essa informação poderá ser transmitida para outras partes interessadas (que podem detectar uma falha de enlace com o nó suspeito). Recuperação Uma vez ocorrida a falha, é essencial que o processo em que a mesma aconteceu se possa recuperar para um estado correto. A recuperação de um erro é fundamental para a tolerância à falha! Atenção! É bom lembrar que um erro é parte de um sistema que pode levar a uma falha. A ideia geral de recuperação de erro é substituir um estado errôneo por um estado livre de erro. 7 Formas de Recuperação de Erro Essencialmente, existem duas formas de recuperação de erro, quais sejam: Recuperação Retroativa - -9 A questão principal da é trazer o sistema de seu estado com o erro presente para umrecuperação retroativa* estado anterior, que estava correto. Para fazer isso, é necessário registrar o estado do sistema de tempos em tempos e restaurar tal estado registrado quando ocorrer o erro. Toda a vez que o estado presente de um sistema (ou parte dele) é registrado, dizemos que foi realizado um ponto de verificação (check-point). * De modo geral, técnicas retroativas de recuperação de erro são amplamente aplicadas como um mecanismo geral para recuperação de falhas em sistemas distribuídos. O principal benefício da recuperação retroativa de erro é que esse método pode ser aplicado de modo geral, independentemente de qualquer sistema ou processo especifico (TANENBAUM, 2007). Em outras palavras, a recuperação retroativa pode ser integrada a um sistema distribuído (camada de middleware) como um serviço de uso geral. Recuperação para a Frente Quando o sistema entra em um estado de erro, em vez de retroagir para um estado anterior correspondente a um ponto de verificação, realiza-se uma tentativa para levar o sistema a um novo estado correto, a partir do qual ele possa continuar a executar. O principal problema dos * é que precisamos saber, de antemão,mecanismos de recuperação para a frente quais erros podem ocorrer. Só assim, é possível corrigir esses erros e passar para um novo estado. * Para distinguirmos recuperação de erro retroativa e para a frente, basta considerarmos a imple-mentação da comunicação confiável. A abordagem comum para se recuperar um pacote perdido é permitir que o remetente retransmita esse pacote. Na verdade, a retransmissão de pacotes determina que tentamos voltar a um estado anterior correto, ou seja, ao estado no qual o pacote que foi perdido está sendo enviado. Portanto, a comunicação confiável por meio de retransmissão de pacote é um exemplo de aplicação de técnicas retroativas de recuperação de erro. O que vem na próxima aula Na próxima aula, você vai estudar: •Classificação de Flynn; •Modelos de Programação; •Implementações da arquitetura MIMD; - -10 •Características de desenvolvimento de aplicações para as arquiteturas MIMD. CONCLUSÃO Nesta aula, você: • Conheceu os conceitos sobre falhas, defeitos e erros em sistemas distribuídos; • Conheceu os conceitos sobre falhas parciais; • Conheceu os métodos de tratamento de falhas em sistemas distribuídos. • • • - -1 ARQUITETURA DE SISTEMAS DISTRIBUÍDOS CLASSIFICAÇÃO DE FLYNN E MODELOS DE PROGRAMAÇÃO - -2 Olá! Objetivo desta aula Nesta aula, você irá: 1-Definir a classificação de Flynn; 2-Reconhecer as implementações da arquitetura MIMD e as características de desenvolvimento de aplicações para essa arquitetura; 3-Descrever a motivação a partir de alguns modelos de programação paralela. Introdução Nesta aula, estudaremos a classificação de multiprocessadores em relação à quantidade de fluxo de dados e instruções, e em relação ao acesso à memória. Conheceremos, também, algumas características de desenvolvimento de aplicações para as arquiteturas MIMD. 1 Taxonomia de Flynn Em 1966, Michael J. Flynn propôs uma taxonomia: o primeiro esquema para classificar computadores em configurações de paralelismo crescente. O esquema consistia de quatro categorias baseadas em tipos diferentes de fluxos usados por processadores. Um processador aceita dois fluxos: um fluxo de instruções e um fluxo de dados. Veja, a seguir, uma tabela que apresenta a classificação de Flynn para os computadores: - -3 Trata-se da classificação do tipo mais simples: são os monoprocessadores tradicionais, nos quais um único processador busca uma instrução por vez e a executa sobre um único item de dado. Como exemplos dessa classificação, podemos citar a arquitetura sequencial e a máquina de Von-Neumann. Técnicas como a de , a da -pipelinepalavra de instrução muito longa - Very Long Instruction Word (VLIW) e a do projeto superescalar podem introduzir paralelismo em computadores SISD. Além disso, a tecnologia Hyper-Threading da Intel introduz paralelismo, criando dois processadores virtuais por meio de um único processador físico, o que dá a um sistema operacional habilitado a multiprocessador a impressão de que esteja executando em dois processadores (um a um) com pouco menos da metade da velocidade do processador físico. Pipeline - Na técnica de pipeline, o caminho de execução de uma instrução é dividido em estágios discretos, o que permite que o processador processe várias instruções simultaneamente, contanto que, no máximo, uma instrução ocupe cada estágio durante um ciclo de relógio. palavra de instrução muito longa - Very Long Instruction Word (VLIW) - As técnicas VLIW e superescalar emitem, simultaneamente, várias instruções independentes (de um fluxo de instruções), que executam em diferentes unidades de execução. A VLIW depende de um compilador para determinar quais instruções emitir a qualquer ciclo de relógio, enquanto um projeto superescalar requer que um processador tome essa decisão. Computadores de fluxo múltiplo de instruções e fluxo único de dados - Multiple-Instruction-Stream, Single-Data-Stream (MISD) Esses tipos de computadores não são usados. Uma arquitetura MISD teria várias unidades de processamento que agiriam sobre um fluxo único de dados. Cada unidade executaria uma instrução diferente nos dados e passaria o resultado para a próxima unidade. Computadores de fluxo único de instruções e fluxo múltiplo de dados - Single-instruction-Stream, Multiple-Data-Stream (SIMD) Esses computadores emitem instruções que agem sobre vários itens de dados. Um computador SIMD consiste em uma ou mais unidades de processamento. Um processador executa uma instrução SIMD processando-a em um bloco de dados (por exemplo, adicionando esse bloco a todos os elementos de um arranjo). Se houver mais elementos de dados do que unidades de processamento, essas unidades buscarão elementos de dados adicionais para o ciclo seguinte. - -4 Isso pode melhorar o desempenho da arquitetura SIMD em relação às arquiteturas SISD, que exigiriam um laço para realizar a mesma operação em um elemento de dados por vez. Um laço contém muitos testes condicionais e requer que o processador SISD decodifique a mesma instrução várias vezes, além de exigir que o processador SISD leia os dados uma palavra por vez. Ao contrário, arquiteturas SIMD leem um bloco de dados por vez, reduzindo dispendiosas transferências da memória para o registrador. Por isso, arquiteturas SIMD são mais efetivas em ambientes em que um sistema aplica a mesma instrução a grandes conjuntos de dados. Como exemplos de computadores que usam uma arquitetura SIMD, podemos citar os processadores vetoriais e os processadores matriciais. Processadores vetoriais – Processadores vetoriais contêm uma unidade de processamento que executa cada instrução vetorial em um conjunto de dados, processando a mesma operação em cada elemento de dado. Esses processadores dependem de pipelines profundose de altas velocidades de clock. Pipelines profundos permitem que o processador realize trabalho em diversas instruções por vez, de modo que muitos elementos de dados possam ser manipulados de uma só vez. Processadores matriciais – Processadores matriciais (também denominados processadores maciçamente paralelos) contêm diversas unidades de processamento que executam a mesma instrução em paralelo sobre muitos elementos de dados. Os processadores matriciais podem contem dezenas de milhares de elementos de processamento. Portanto, esses processadores são mais eficientes quando manipulam grandes conjuntos de dados. Computadores de fluxo múltiplo de instruções e fluxo múltiplo de dados - Multiple-instruction-Stream, Multiple-Data-Stream (MIMD) Trata-se de multiprocessadores, nos quais as unidades processadoras são completamente independentes e operam sobre fluxos de instruções separados. Entretanto, esses sistemas normalmente contêm hardware que permite que os processadores se sincronizem uns com os outros quando necessário, como no caso de acessarem um dispositivo periférico compartilhado. Essa classe foi subdividida em sistemas fortemente acoplados e fracamente acoplados. 2 Esquemas de interconexão de processadores O esquema de interconexão de um sistema multiprocessador descreve de que modo os componentes do sistema (como, por exemplo, um processador e módulos de memória) são conectados fisicamente. - -5 O esquema de interconexão é uma questão fundamental para projetistas de multiprocessadores, porque afeta o desempenho, a confiabilidade e o custo do sistema. Um sistema de interconexão consiste de e .nós enlaces Em muitos sistemas, um único nó pode conter um ou mais processadores, seus caches associados, um módulo de memória e uma chave. Em multiprocessadores de grande escala, às vezes, abstraímos o conceito de nó e indicamos um grupo de nós como um único supernó. Nós – os nós são compostos de componentes do sistema ou de chaves que fazem o roteamento das mensagens entre componentes. Enlaces – o enlace é uma conexão entre dois nós. Uma técnica para medir a tolerância à falha de um esquema de interconexão é contar o número de enlaces de comunicação que devem falhar antes que a rede não possa mais funcionar adequadamente. Isso pode ser quantificado por meio da largura de (número mínimo de enlaces que precisam ser cortados parabisseção dividir a rede em duas metades não conectadas). Sistemas que têm larguras de bisseção maiores são mais tolerantes à falha do que aqueles que têm larguras de bisseção menores, pois mais componentes têm de falhar antes que o sistema inteiro tenha problemas. O desempenho de um esquema de interconexão depende, em grande parte, da latência de comunicação entre nós, que pode ser medida de várias maneiras, como, por exemplo, por meio da latência média. Outra medição de desempenho é o (distância mais curta entre os dois nós mais remotos dodiâmetro da rede esquema de interconexão). Para determiná-lo, você deve considerar todos os pares de nós da rede e identificar o caminho de comprimento mais curto para cada par - calculado pela soma do número de enlaces percorridos. Só então, você identificará o maior desses caminhos. Um diâmetro de rede pequeno indica baixa latência de comunicação e desempenho mais alto. Por fim, arquitetos de sistemas tentam minimizar o custo de um esquema de interconexão, semelhante ao número total de enlaces de uma rede. 3 Arquiteturas de acesso à memória Veja, a seguir, uma figura que representa a classificação das arquiteturas segundo o acesso à memória: - -6 Acesso uniforme à memória - UMA Arquiteturas de multiprocessadores com acesso uniforme à memória - Uniform Memory Access multiprocessor (UMA) - requerem que todos os processadores compartilhem a memória principal do sistema. Essa é uma extensão direta da arquitetura de memória de um monoprocessador, mas com vários processadores e módulos de memória. O tempo de acesso à memória é uniforme para qualquer processador que acessar qualquer item de dado, exceto quando esse estiver armazenado no cache de um processador ou quando houver contenção no barramento. Acesso não uniforme à memória - NUMA Arquiteturas de multiprocessador de acesso não uniforme à memória - NonUniform Memory Áccess (NUMA) - mantêm uma memória global compartilhada, que pode ser acessada por todos os processadores. A memória global é fracionada em módulos, e cada nó usa um desses módulos de memória como a memória local do processador. Cada nó contém um processador, mas isso não é uma exigência. Embora a implementação do esquema de interconexão possa variar, os processadores são conectados diretamente a seus módulos de memória local e conectados indiretamente ao restante da memória global. Esse arranjo proporciona acesso mais rápido à memória localdo que ao restante da memória global, porque o acesso à memória global requer que se percorra a rede de interconexão. Sem acesso à memória remota - NORMA Multiprocessadores sem acesso à memória remota - No Remote Memory Access (NORMA) - são multiprocessadores fracamente acoplados que não fornecem nenhuma memória global compartilhada. Cada nó mantém sua própria memória local, e multiprocessadores NORMA implementam, frequentemente, uma memória virtual compartilhada comum – Shared Virtual Memory (SVM). NUMA com cache coerente (CC-NUMA) - -7 NUMAs com cache coerente - Cache Coherent NUMAs (CC-NUMAs) - são multiprocessadores NUMA que im-põem coerência de cache. Em uma arquitetura CC-NUMA típica, cada endereço de memória física está associado a um (muitas vezes, o nó nativo é simplesmente determinado pelos bits de ordem mais alta do endereço),nó nativo responsável por armazenar o item de dado com aquele endereço de memória principal. Arquitetura de memória somente de cache - COMA Em um sistema NUMA, cada nó mantém sua própria memória local, cujo acesso pode ser feito por processadores de outros nós. Muitas vezes, o acesso à memória local é radicalmente mais rápido do que o acesso à memória global (ou seja, o acesso a outro nó da memória local). A latência de falta de (tempo requerido para recuperar dados que não estão nocache (cache-miss tatency) cache) pode ser significativa quando o dado requisitado não estiver presente na memória local. Um modo de reduzir a latência de falta de cache é reduzir o número de requisições de memória atendidas por nós remotos. Os multiprocessadores de arquitetura de memória somente de cache - Cache Only Memory Architecture (COMA) - usam uma ligeira variação da NUMA para abordar essa questão do posicionamento da memória. 4 Programação distribuída A programação distribuída pode ser: Sequencial – Composta por um conjunto de instruções que são executadas sequencialmente. Concorrente – Permite execução concorrente de tarefas dentro de um mesmo processo ou entre processos que compartilham recursos. Paralela – Pressupõe a existência de mais de uma CPU, pois é destinada à execução simultânea de tarefas de um mesmo processo. 5 Execução de uma tarefa Existem três maneiras de executar uma tarefa de forma mais rápida, quais sejam: Aumento da velocidade da CPU Algumas limitações estão associadas à aquisição de CPUs com maior poder de processamento, como o aumento de seu custo e a previsão para a velocidade dos processadores duplicarem a cada 18 meses (Lei de Moore), que tem sido mantida até os dias atuais. Mesmo com o aumento da frequência das CPUs, há a possibilidade de essas não atenderem à solução de alguns problemas. Otimização do Algoritmo - -8 Geralmente, conseguimos aumentar o desempenho de um sistema com a melhora do algoritmo. Entretanto, esse sistema pode ser comprometido quando não há uma solução determinística para o problema. Colaboração Quando pensamos em trabalhar com colaboração, devemos atentar para a diferença entre paralelismo e concorrência. Veja: • Paralelismo - Execução de uma tarefa em mais de uma CPU (os processadores colaboram para execução dessa tarefa); • Concorrência – Os processos disputam CPUs (uma ou mais). 6 Aspectos técnicos da programação distribuída Veja alguns aspectos técnicos da programação distribuída: Interação da aplicação e do usuário com o ambiente distribuído em níveis diferentes; Suporte a plataformas heterogêneas através de uma camada de entre o e a aplicaçãosoftware kernel (middleware); Problemas como custo e carência de produtos de adequados;software Programação paralela, utilizando bibliotecas de troca de mensagem (como, por exemplo, o MPI e o PVM) ou bibliotecas baseadas em memória compartilhada (como, por exemplo, Pthreads). A troca de mensagens (message passing) é o método de comunicação baseada no envio e recebimento de mensagens através de uma rede de computadores, seguindo regras de protocolo de comunicação entre vários processadores que possuam memória própria. Os processos possuem acesso à memória local. As informações, por sua vez, são enviadas da memória local do processo à memória local do processo remoto. Nesse modelo, o programador é responsável pela sincronização de tarefas. O que vem na próxima aula Na próxima aula, você vai estudar: •Introdução aos modelos de comunicação e a arquitetura cliente/servidor; •O que é um modelo e quais são as características dos modelos arquitetural e fundamental; •Fundamentos e características de cada componente do modelo cliente/servidor. - -9 CONCLUSÃO Nesta aula, você: • Conheceu a classificação de multiprocessadores em relação à quantidade de fluxo de dados e instruções, e em relação ao acesso à memória; • Verificou o desenvolvimento de aplicações para as arquiteturas MIMD. • • - -1 ARQUITETURA DE SISTEMAS DISTRIBUÍDOS INTRODUÇÃO AOS MODELOS DE COMUNICAÇÃO E A ARQUITETURA CLIENTE/SERVIDOR - -2 Olá! Objetivo desta Aula Nesta aula, você irá: 1. Reconhecer um modelo de comunicação; 2. Identificar os modelos arquitetural e fundamental e suas características; 3. Descrever os fundamentos e as características de cada componente do modelo cliente/servidor. Introdução Nesta aula, você entenderá o que é um modelo de comunicação. Em seguida, você conhecerá as características dos modelos arquitetural e fundamental e saberá como pode implementá-los. Por fim, você conhecerá as principais características e os componentes da arquitetura cliente/servidor. 1 Introdução aos modelos de comunicação Os sistemas desenvolvidos para a utilização em ambientes do mundo real devem ser projetados para funcionar corretamente na maior variedade possível de circunstâncias e frente às dificuldades e ameaças. Os modelos de sistemas distribuídos podem ser classificados como: Arquiteturais Aqueles que definem a forma como os componentes dos sistemas interagem. Fundamentais Aqueles que definem o comportamento e as propriedades dos componentes. 2 Modelos de Arquitetura de Sistemas Distribuídos A arquitetura ou organização de um sistema representa sua estrutura em termos de componentes especificados separadamente. Essa estrutura deve atender às demandas atuais e futuras impostas sobre ela. A maior preocupação é tornar o sistema: · Confiável · Gerencial · Adaptável · Rentável - -3 O modelo de arquitetura de um sistema distribuído primeiramente simplifica e abstrai as funções dos componentes individuais desse sistema. 3 Características dos modelos de arquitetura Os modelos de arquitetura de um sistema distribuído apresentam estrutura em camadas de software de diferentes níveis de abstração, quais sejam: (denominação frequente para as camadas de plataforma hardware e de nível mais baixo) e (camada de que tem como objetivo mascarar asoftware middleware software heterogeneidade e fornecer um modelo de programação conveniente para os desenvolvedores de aplicações distribuídas). Para definir o padrão de distribuição, devemos considerar o posicionamento e a carga de trabalho de cada componente. Além disso, as tarefas devem ser alinhadas de forma a atender aos requisitos de desempenho e confiabilidade. Os modelos de arquitetura classificam-se como: • Cliente/servidor; • Peer-to-peer; • De (utilização de serviços oferecidos por diversos servidores). variações Nesta aula, estudaremos mais especificamente o modelo cliente/servidor. Requisitos de projeto dos modelos de arquitetura Veja, a seguir, quais são os requisitos de projeto dos modelos de arquitetura! Desempenho - -4 Os desafios decorrentes da distribuição de recursos excedem a necessidade de gerenciamento das atualizações concorrentes. Os principais problemas associados à limitação finita da capacidade de recursos de processamento e de comunicação são: reatividade, throughput e balanceamento de carga. Qualidade de serviço As principais propriedades não funcionais dos sistemas que afetam a qualidade dos serviços fornecidosaos clientes são: • Confiabilidade; · Segurança; · Desempenho; · Adaptabilidade; · Disponibilidade. Replicação Os problemas de desempenho podem ser (em parte) solucionados através do uso de replicação de dados. Dependabilidade A dependabilidade pode ser definida como correção, segurança e confiabilidade. Trata-se de um requisito necessário à maior parte dos dominios da aplicação, o que significa que é crucial não apenas nas atividades de comando e controle, mas também em muitas aplicações comerciais. Como um par de programas pode-se encontrar em uma rede tão larga quanto a internet? Modelo cliente/servidor Como a maioria das redes, a internet utiliza um mecanismo simples: um aplicativo é ligado primeiro e espera que o outro aplicativo faça contato. O segundo aplicativo, por sua vez, precisa conhecer a localização na qual o primeiro aplicativo espera contato. O acordo no qual um aplicativo de rede espera pelo contato de outro é conhecido como paradigma cliente- servidor ou arquitetura cliente-servidor. O programa que espera pelo contato é chamado de servidor, e o que inicia o contato é conhecido co-mo cliente. Para iniciar contato, o cliente precisa saber onde o servidor está rodando e especificar a localização para o software de rede. Mas, como um cliente especifica a localização de um servidor? Por exemplo, na Internet, a localização é dada por um par de identificadores. Conceitualmente, o par consiste em: (o termo computador identifica a máquina na qual o servidor está rodando) e (ocomputador aplicativo aplicativo identifica um programa aplicativo em particular naquele computador). - -5 4 Modelos de Arquitetura de Sistemas Distribuídos Geralmente, os aplicativos desenvolvidos para a internet seguem o mesmo paradigma básico quando se comunicam. Dois aplicativos estabelecem comunicação, trocam mensagens e, só então, finalizam a comunicação. Sendo assim, para fins de comunicação, os aplicativos seguem os seguintes passos: O aplicativo servidor é ativado e aguarda o contato de um cliente. O cliente especifica a localização do servidor e solicita o estabelecimento de uma conexão. Após o estabelecimento da conexão, cliente e servidor estão aptos a trocar mensagens. Com a conclusão da transmissão, cliente e servidor enviam um fim de arquivo (end-of-file), e a conexão é encerrada. Application Program Interface (API) vários desenvolvedores utilizam a expressão Application Program Interface (API) para descrever o conjunto de aplicativos disponiveis a um programador. A API especifica os parâmetros para cada operação bem como suas semânticas. Application Program Interface (API) Como exemplo, veja a tabela a seguir que lista as sete funções de uma API simples para a comunicação em uma rede: - -6 Um servidor inicia a aplicação chamando a função await contact para esperar pelo contato de um cliente. O cliente, por sua vez, inicia a aplicação chamando a função make. contact para estabelecer contato. Uma vez que o cliente te-nha contatado o servidor, eles podem trocar mensagens com send e recv. Os dois aplicativos devem ser programados para saber se devem enviar ou receber se ambos tentarem receber sem enviar, ficarão bloqueados para sempre. Após o término do envio de dados, um aplicativo chama a função send eof para enviar a condição de fim de arquivo (end-of-file). Do outro lado, a função recv retorna um valor zero para indicar que o fim de arquivo foi alcançado. Por exemplo, se o cliente executa a função send eof, o servidor vai encontrar um valor zero de retorno para sua chamada à função recv. Uma vez que ambos os lados tenham invocado a função send eof, a comunicação é encerrada. Veja, a seguir, uma ilustração das chamadas API usadas para uma interação trivial, na qual o cliente envia um pedido e recebe uma resposta: - -7 5 Características dos modelos de arquitetura Para manter a API exemplo, independente de algum sistema operacional e software de rede em particular, são definidos três tipos de dados. Esses tipos são utilizados através de códigos. A tabela a seguir lista os nomes e os significados de cada (em um dado computador, esses tipostipo de dados são definidos como inteiros e de tamanho específico) usados na API exemplo: 6 O paradigma cliente-servidor O paradigma de organizar uma aplicação que espera passivamente por outro aplicati-vo para iniciar a comunicação está tão presente na computação distribuída que recebeu um nome: pa-radigma de interação cliente-servidor. Os termos cliente e servidor referem- se aos dois aplicativos envolvidos em uma comunicação. O aplicativo que começa ativamente o contato é chamado de cliente, enquanto o aplicativo que espera passivamente por contato é denominado servidor. Veja, a seguir, uma figura que representa o paradigma cliente-servidor: - -8 Fonte: Figura disponível no link. Acesso em: 29 fev. 2012. http://arqsystemsarmtecseduc.blogspot.com/2011/08 /aplicacao-cliente-servidor.html 7 Características de clientes e servidores Embora existam variações, em geral, a interação cliente-servidor tem as mesmas características. O software cliente é uma aplicação qualquer arbitrária que se torna um cliente temporariamente, quando o acesso remoto for necessário, mas pode executar, também, outro processamento local. Esse software é diretamente invocado por um usuário e executa somente para uma sessão. Essa execução ocorre localmente no computador pessoal de um usuário. O software cliente inicia ativamente o contato com um servidor e, quando necessário, pode acessar múltiplos serviços, mas contata, de forma ativa, um servidor remo-to de cada vez. O referido software não exige hardware especial ou sistema operacional sofisticado. Em contraste, o software servidor é um programa privilegiado, de propósito especial, dedicado a fornecer um serviço, mas pode tra-tar, simultaneamente, de múltiplos clientes remotos. Esse programa é automaticamente invocado quando um sistema inicializa (boot) e continua a executar por mui- tas sessões. O software servidor executa em um computador compartilhado, e não em um computador pessoal de um usuário, esperando, passivamente, pelo contato de clientes remotos arbitrários. O referido programa aceita o contato de clientes arbitrários, mas oferece um único serviço. Diferentemente do software cliente, o servidor exige hardware poderoso e um sistema operacional sofisticado. - -9 8 Requisições, Respostas e Direção do Fluxo de Dados A comunicação entre cliente e servidor pode ser realizada em uma ou ambas as direções. Um cliente envia uma requisição para um servidor; este, por sua vez, devolve uma resposta para o cliente. Em alguns casos, um cliente envia uma série de requisições, e o servidor emite uma série de respostas. Como exemplo, podemos citar um cliente de uma base de dados que poderia permitir a um usuário a consulta de mais de um item por vez. Em outros casos, o servidor fornece saída continua sem qualquer requisição assim que o cliente contata o servidor, este começa a enviar-lhe dados. Como exemplo, podemos citar um servidor local de dados climáticos, que poderia enviar, com frequência, relatórios sobre os valores de tempo, com temperatura e pressão barométrica atualizadas continuamente. Veja, a seguir, uma figura que representa o processo de comunicação realizado entre cliente e servidor: 9 Protocolos de transporte e interação cliente-servidor Como a maioria dos programas aplicativos, cliente e servidor usam um protocolo de transporte para se comunicar. Como exemplo, podemos citar um cliente e um servidor que usam a pilha do TCP/IP. Um aplicativo cliente ou servidor interage diretamente com um protocolo da camada de transporte para estabelecer uma comunicação e enviar ou receber informações. O protocolo de transporte usa, então, os protocolos das camadas mais baixas para enviar e receber mensagens individuais. Desse modo, um computador necessita de uma pilha completa de protocolos para executar um cliente ou um servidor.- -10 10 Múltiplos serviços em um computador Um sistema suficientemente poderoso pode gerenciar a execução de múltiplos clientes e servidores ao mesmo tempo. Entretanto, para isso, algumas características são necessárias, quais sejam: Primeiro O computador deve ter recursos de suficientes;hardware Segundo O computador deve ter um sistema operacional que permita que múltiplos programas aplicativos executem de modo concorrente (como, por exemplo, os sistemas UNIX, Linux ou Windows). 11 Identificando um serviço particular Os protocolos de transporte fornecem um mecanismo que permite a um cliente especificar, de forma não ambígua, qual o serviço desejado. Esse mecanismo designa cada serviço com um identificador único, e exige que o servidor e o cliente usem esse identificador. Múltiplas cópias de um servidor para um único serviço Quando um sistema permite que múltiplos aplicativos estejam ativos ao mesmo tempo, podemos afirmar que esse sistema suporta concorrência. Portanto, um programa que tem mais de um thread de controle é chamado de programa concorrente. A concorrência é fundamental para o modelo cliente-servidor de interação, porque um servidor concorrente oferece serviço para múltiplos clientes ao mesmo tempo, sem exigir que cada cliente espere os clientes anteriores terminarem a operação. O que vem na próxima aula Na próxima aula, você vai estudar: · Comunicação a partir da utilização de sockets e Chamada a Procedimento Remoto (RPC); · Como uma aplicação é desenvolvida; · Como funciona a programação com socket; · O funcionamento e a forma de geração de uma Chamada a Procedimento Remoto (RPC). - -11 CONCLUSÃO Nesta aula, você: • Conheceu as características dos modelos arquitetural e fundamental; • Conheceu as principais características e os componentes da arquitetura cliente/servidor. • • - -1 ARQUITETURA DE SISTEMAS DISTRIBUÍDOS COMUNICAÇÃO USANDO SOCKETS E CHAMADA A PROCEDIMENTO REMOTO (RPC) - -2 Olá! Objetivo desta Aula Ao final desta aula, o aluno será capaz de: 1- Reconhecer como uma aplicação é desenvolvida; 2- Identificar como funciona a programação com socket; 3- Estabelecer o funcionamento e a forma de geração de uma Chamada a Procedimento Remoto (RPC). Introdução Nesta aula, você entenderá como funciona a programação com sockets e conhecerá o funcionamento de uma Chamada a Procedimento Remoto (RPC). 1 Comunicação utilizando sockets A comunicação realizada a partir da utilização de sockets é um mecanismo de comunicação entre processos – Inter Process Comunication (IPC) – através da rede, que pode ser utilizado em processos na mesma máquina. Interface de Programa Aplicativo – Application Program Interface (API) As aplicações cliente e servidor utilizam protocolos de transporte para se comunicar. Para tal, essas aplicações devem especificar detalhes. Por exemplo, o remetente deve especificar os dados a serem enviados, e o receptor, onde esses dados recebidos devem ser colocados. Como uma API define um conjunto de operações que um aplicativo pode executar quando interage com o software de protocolo, essa interface determina a funcionalidade que está disponível. 2 A API de sockets Os protocolos de comunicação geralmente não especificam a API que as aplicações devem utilizar. Ao contrário disso, os protocolos especificam quais são as operações que devem ser fornecidas e permitem que cada sistema operacional defina a API específica que uma aplicação deve usar para executar suas operações. A API de sockets (ou somente sockets) originou-se como parte do sistema operacional BSD UNIX (University of California - Berkeley). Tanto neste quanto nos sistemas que dele derivaram, as funções de sockets são parte do próprio sistema operacional. - -3 Para um programador, seu programa chama procedimentos de sockets, que são, então, providos por procedimentos do sistema operacional ou por rotinas de biblioteca. Desse modo, um aplicativo que usa sockets pode ser copiado para um novo computador, compilado, carregado junto com a biblioteca de sockets do computador e, então, executado. 3 Comunicação de socket e entrada e saída do UNIX Originalmente, os sockets foram desenvolvidos como parte do sistema operacional UNIX e utilizam diversos conceitos que são implementados em outras partes desse sistema. Um programa vê os sockets como um mecanismo de entrada e saída de dados, pois eles seguem o paradigma open-read-write-close, usado pela maioria das operações de entrada e saída. Sendo assim, um socket deve ser criado, usado e, só então, destruído. Por isso, quando uma aplicação se comunica através de uma rotina similar ao socket, forma um caminho para a aplicação transferir dados a um arquivo. Dessa forma, a compreensão dos sockets exige o entendimento das características de entrada e saída do UNIX. Por exemplo, um aplicativo deve primeiro chamar open para preparar um arquivo para acesso. O aplicativo chama, então, ou para recuperar ou armazenar dados no arquivo. Finalmente, o aplicativo chama read write para especificar que terminou de usar o arquivo.close A figura a seguir representa uma conexão por sockets: - -4 4 Sockets e descritores A comunicação através de sockets utiliza também a abordagem de descritor. Quando a aplicação solicitar ao sistema operacional para criar um socket, o aplicativo passará o descritor como um argumento para a chamada de procedimentos na (não é necessário que a aplicação especifique detalhes sobre otransferência de dados destino para cada transferência de dados) através da rede. O sistema operacional fornece um único conjunto de descritores para arquivos, dispositivos, comunicação entre processos e comunicação de rede. Como resultado, procedimentos como são bem gerais - umaread e write aplicação pode usar o mesmo procedimento para enviar dados para outro programa ou um arquivo através de uma rede. Em terminologia corrente, o descritor representa um objeto e o procedimento write, o método aplicado àquele objeto. Parâmetros e a API de sockets A programação por difere da entrada e saída convencional de dados porque um aplicativo devesocket especificar diversos detalhes para utilizar um socket. Por exemplo, um aplicativo deve escolher um protocolo de transporte em particular, fornecer o endereço de protocolo de uma máquina remota e especificar se o aplicativo é cliente ou servidor. Para acomodar todos os detalhes, cada socket tem diversos parâmetros e opções - um aplicativo pode fornecer valores para cada um deles. Para evitar que exista uma única função de socket com argumentos separados para cada opção, os desenvolvedores das APIs de sockets definiram diversas funções. Essencialmente, um aplicativo cria um socket e, então, invoca funções para especificar, em detalhes, como ele será usado. A vantagem da abordagem de sockets respalda-se no fato de que a maioria das funções tem três ou menos argumentos. A desvantagem, por sua vez, indica que um programador deve lembrar-se de chamar múltiplas funções sockets. Procedimentos que implementam a API de sockets Conheça, agora, os procedimentos que implementam a API de sockets: Procedimento socket O procedimento socket cria um socket e retorna um descritor inteiro. Conheça o procedimento socket: sockfd = socket (protofamity, type, protocol); São argumentos desse procedimento: - -5 protofamity - especifica a familia de protocolos a ser usada com o socket; type - especifica o que o socket usará;tipo de comunicação protocol - especifica um protocolo de transporte particular usado com o socket. Tipo de comunicação – Os tipos mais comuns são (transferência de stream orientada à conexão)sock_stream e (transferência sem conexão orientada a mensagens).sock_dgram Procedimento bind Uma vez que tenha um socket, você deve associá-lo a uma porta em sua máquina. Um servidor usa o procedimento bind para prover um número de porta de protocolo em que o servidor esperará por contato. Conheça o procedimento bind:
Compartilhar