Baixe o app para aproveitar ainda mais
Prévia do material em texto
CURSO DE CIÊNCIA DA COMPUTAÇÃO DISCIPLINA: DESENVOLVIMENTO DE APLICAÇÕES DISTRIBUÍDAS TEMA 01 – INTORDUÇÃO A APLICAÇÕES DISTRIBUÍDAS TEXTO PARA APOIO AO ESTUDO 1) Contextualização Sistemas Distribuídos estão presentes em diversas aplicações. Os sistemas corporativos estão, muitas vezes, em ambientes distribuídos, interconectando diferentes serviços de recursos humanos, departamento financeiro, gerenciamento de ativos, entre outros. Atualmente, há muitas aplicações que estão utilizando os recursos da computação em nuvem. Existem ainda aplicações de Engenharia e científicas de grande porte que utilizam clusters com o objetivo de paralelizar a carga de trabalho. O CERN (Organização Europeia para a Pesquisa Nuclear) é uma das maiores (se não for a maior) colaborações científicas do mundo. O trabalho de pesquisa é composto por profissionais de vários países, inclusive o Brasil. Para se ter a ideia da importância do CERN para a computação, especificamente, foi lá que o Tim Burns Lee desenvolveu o World Wide Web, dando origem à Web. Mais detalhes sobre esse assunto podem ser obtidos no seguinte endereço: https://home.cern/science/computing/birth-web. Um dos detectores do CERN é o ATLAS ( https://atlas.cern/ ), que utiliza um cluster com, aproximadamente, quinhentos computadores em paralelo de modo que seja possível realizar o processamento das informações que são geradas em grande quantidade pelo detector. Este é um exemplo de aplicação científica que utiliza os conceitos de paralelização de recursos computacionais. 2) Breve histórico da computação O desenvolvimento da Tecnologia da Informação teve várias etapas, assim como a conexão entre computadores. A internet comercial, como a conhecemos, tem, aproximadamente, trina anos. Porém, cresceu tanto que muitas pessoas têm acesso a internet, seja em aparelhos celulares, tablets, computadores, etc. Faremos uma síntese do histórico da computação, partindo dos seus primórdios até chegar a sistemas distribuídos. https://home.cern/science/computing/birth-web https://atlas.cern/ 2.1) Primeiros computadores Os primeiros sistemas computacionais têm mais de setenta anos. Vejamos: • Z1 - Zuse (1937): mecânico, números binários, programável; • Z2 - Zuse (1939): relés, aritmética de ponto fixo, programável; • Z3 – Zuse (1941): primeiro computador digital, relés eletromagnéticos, aritmética de ponto flutuante binário, programável, pipeline de instruções, paralelização de instruções, não era eletrônico; • Mark i, USA (1944): programável, sem aritmética de ponto flutuante, não era binário, não era eletrônico; • Electronic Numerical Integrator and Computer (ENIAC), USA (1946): programável, eletrônico, era decimal (não era binário), ponto fixo, não era de ponto flutuante; Os primeiros computadores como o ENIAC eram enormes e eram baseados em tubos a vácuo, conforme ilustra a Figura 1: Figura 1 – ENIAC. Extraído de: http://meetalgorithm.blogspot.com/2015/09/eniac-1940-1959-first- computer.html Os programas eram carregados manualmente e se utilizavam cartões perfurados ou fitas de papel. Não existiam sistemas operacionais e, muitas vezes, o programador era o operador. Os recursos eram utilizados de forma sequencial. 2.2) Segunda geração de computadores A segunda geração iniciou nos anos 1950 e houve a primeira separação de conceitos. O IBM 701 foi a primeira máquina em que os programas eram armazenados me memória interna, eletrônica e endereçável. Também foi introduzido o conceito de sistema operacional em cartões perfurados e fitas de papel. Possibilitou a separação entre o operador e o programador. Incialmente, um lote de instruções era carregado para, posteriormente, ser processado. http://meetalgorithm.blogspot.com/2015/09/eniac-1940-1959-first-computer.html http://meetalgorithm.blogspot.com/2015/09/eniac-1940-1959-first-computer.html Também possibilitou a divisão entre entrada, processamento e saída. A Figura 2 mostra uma foto do IBM 701. Figura 2 – IBM 701. Extraído de: https://www.ibm.com/ibm/history/exhibits/701/701_intro.html Por volta dos anos de 1960, foi desenvolvido um sistema comercial de reservas de passagens aéreas que funcionava com dois mainframes conectados. 2.3) Terceira geração de computadores A terceira geração de computadores trouxe grandes avanços de hardware, circuitos integrados, capacidade de memória aumentada, HD, entre outros. Além disso, possibilitava a multiprogramação com múltiplos processos na memória, sendo chaveados. Computadores como o IBM 360 tiveram um grande impacto tecnológico (https://www.ibm.com/ibm/history/ibm100/us/en/icons/system360/ ). Possibilitou a implementação de instruções de máquinas. Outro aspecto importante foi a divisão entre o espaço do usuário e o sistema operacional, além da proteção com eventuais erros nos processos. Máquinas como IBM CP-40 e CP-50 utilizavam virtualização de memória. 2.4) Conectividade No início da década e 1960, foram publicados artigos (Leonard Kleinrock e Joseph Carls Robnett) que apresentaram estudos envolvendo redes em que seres humanos e computadores poderiam interagir. O computador TX-2, localizado em Massachusetts foi conectado ao Q-32 localizado na Califórnia, estabelecendo a primeira WAN (Wide Area Network) que se tem notícia. O ARPANET (Advanced Research Projects Agensy Network), precursor da Internet, conectou diferentes universidades nos Estados Unidos, utilizando os conceitos de pacotes e roteamento. Em 1972, surgiu o e-mail. https://www.ibm.com/ibm/history/exhibits/701/701_intro.html https://www.ibm.com/ibm/history/ibm100/us/en/icons/system360/ 2.5) Quarta geração de computadores A quarta geração de computadores ocorreu na década de 1980 e trouxe mais avanços em termos de poder computacional, assim como redução de custo e de tamanho, utilizando CPU Intel 8088 e Motorola 6899. MS-DOS e Unix dominavam o mercado. 2.6) Modelo Cliente-Servidor Com o advento da quarta geração de computadores, houve também o desenvolvimento de sistemas distribuídos, considerando a arquitetura cliente-servidor. Utilização do conceito de Middleware para a construção de sistemas distribuídos que passou a ser um item importante dos sistemas operacionais. Sendo que Middleware é software que fornece funcionalidades para o desenvolvimento de aplicações de forma mais eficiente. No início da década de 1980, houve a padronização de protocolo para a Internet e, em 1995, aproximadamente, a internet se tornou comercial. A partir daí, a Internet cresceu vertiginosamente. 3) Contexto atual da computação Atualmente, há enorme disponibilidade de poder computacional, não só no que se refere à capacidade de processamento, mas, também, na capacidade de armazenamento, especialmente no que se refere a utilização de computação em nuvem. Muitas empresas já adotam a computação em nuvem e, desta forma, os dados podem ser compartilhados em diferentes dispositivos, ou seja, a pessoa pode acessar os serviços de determinada empresa tanto pelo celular, quanto pelo tablet, notebook, etc. Boa parte das pessoas possui telefones celulares, que são mais poderosos que os computadores pessoais de 15 anos atrás. Além disso, houve ampliação na cobertura de Internet e, consequentemente, mais pessoas puderam ter acesso a esta tecnologia. Usamos a Internet para diversos fins como, por exemplo, para aprendizagem, entretenimento, trabalho, etc. Empresas como Apple, Microsoft e Google estão entre as mais valiosas do mundo. 4) Introdução a sistemas distribuídos É possível encontrar diferentes definições para sistemas distribuídos. Vamos considerar a seguinte: um sistema distribuído é um conjunto de sistemas autônomos que estão conectados pela rede e se comunicam por meio da troca de mensagens. E algoritmos distribuídos são algoritmos que podem serexecutados por múltiplos computadores em um sistema distribuído, de modo que se busca resolver algum problema cooperativamente. Entretanto, se já era importante evitar os erros nos programas, em sistemas distribuídos essa preocupação é ainda maior porque há várias outras possibilidades de problemas que podem ocorrer. As redes de computadores são compostas por computadores interdependentes interconectados. E os computadores, assim como a comunicação entre eles, podem falhar sem uma razão previsível. A troca de informação ocorre por meio da troca de mensagem e a latência das mensagens não é determinística. Pode haver alguma falha na rede, alguma mensagem pode ser perdida, enfim. Talvez, alguém poderia pensar em estabelecer a sincronização dos clocks das máquinas, de modo que todas elas trocassem as mensagens sempre de forma sincronizada, no mesmo intervalo de tempo. Porém, a sincronização de clocks é complicada por causa da latência. Nenhum nó da rede sabe qual é o real estado dos demais nós. E em sistemas distribuídos assíncronos sem limite para atraso de comunicação, pode ser impossível identificar se houve alguma falha ou se há demora nos processos. Nestas poucas linhas, observamos que sistemas distribuídos não são triviais porque, além do que foi exposto, há uma gama enorme de hardware, sistemas operacionais e aplicações diferentes. Lembrando que sistemas distribuídos é composto por sistemas autônomos e separados uns dos outros. E a programação de sistemas distribuídos deve lidar com o paralelismo, além da comunicação. E, muitas vezes, as falhas não são reprodutíveis. A segurança em sistemas distribuídos também não é trivial. A seguinte frase é atribuída a Leslie Lamport: “Sistemas distribuído é aquele em que a falha em um computador que você nem sabia que existia pode tornar seu próprio computador inutilizável.” Diante do que foi exposto, pode parecer que sistemas distribuídos são inviáveis. Então, por que estudar sistemas distribuídos? Por que eles existem? A resposta é bem simples, especialmente nos dias de hoje. Muitos serviços precisam ser processados em uma máquina específica, que hospeda a aplicação que estamos requisitando o serviço. Por exemplo, compras online, controle de processos industriais. Além disso, muitas tarefas são distribuídas por natureza como, por exemplo, o armazenamento de mídias que são acessadas por múltiplos e diferentes dispositivos, o acesso a sites web criados em diferentes localidades. Outros aspectos importantes de sistemas distribuídos são a modularidade, além da flexibilidade, tendo em vista que os computadores podem ser adicionados a clusters quando necessário. Adicionalmente, Elastic Cloud Services podem ser replicados adicionando mais computadores ou máquinas virtuais de modo que se possa aumentar o poder computacional sempre que for preciso. Novos componentes podem ser adicionados ao SOA (Service-Oriented Architecture), de modo que se possa ter sistemas heterogêneos com novas aplicações assim como as aplicações antigas. Com sistemas distribuídos, pode-se fazer o compartilhamento de recursos, assim como o compartilhamento de carga, replicação de servidores web. Outras vantagens são a alta disponibilidade e a acessibilidade. Normalmente, as grandes empresas que oferecem serviços na nuvem têm réplica dos seus bancos de dados. Portanto, é recomendável que se utilize sistemas distribuídos somente quando há benefícios concretos porque, caso contrário, soluções centralizadas serão a melhor opção.
Compartilhar