Buscar

DADist_Tema_01_Texto de apoio

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 6 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 6 páginas

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.

Continue navegando