Programação Paralela em Arquiteturas Multi-Core/Aplicações Internet: diferenças entre revisões
[edição não verificada] | [edição não verificada] |
Conteúdo apagado Conteúdo adicionado
removendo imagem sem licença... |
ortografia; formatação |
||
Linha 1:
== Introdução ==
A Internet é um conglomerado de redes em escala mundial de milhões de computadores interligados pelo [
Neste capítulo abordaremos sobre algumas aplicações paralelas que existem na Internet. Falaremos primeiro sobre aplicações para a infra-estrutura da rede mundial de computadores, depois sobre aplicações distribuídas e por último sobre algumas linguagens que permitem a construção de aplicações paralelas para a Internet.
Linha 19 ⟶ 9:
=== Banco de Dados ===
Sistemas de banco de dados altamente paralelos estão começando a substituir os tradicionais [
A partir da hegemonia do [
Ao utilizamos a saída de um operador na entrada de outro, os dois operadores podem trabalhar em série, o que gera um [
[[Imagem:Bdparalelo.png]]
Esta técnica requer uma comunicação entre os sistemas de bancos de dados paralelos, seja através de mensagens, seja através de recursos compartilhados ou de outros métodos possíveis. Esses métodos se baseiam na [
Apesar do grande número de arquiteturas de sistemas de banco de dados paralelos e [
==== Otimização de consultas em paralelo ====
Os otimizadores de consultas a banco de dados não consideram todos as possíveis formas de otimização em uma consulta relacional devido a sua [
[
=== Protocolos paralelos ===
O aumento da demanda por conteúdo [
Servidores distribuídos permitiram que recursos sejam disponibilizados em pontos de grande demanda, aliviando o problema de congestionamento em servidores centralizados. Apesar disso, as [
O objetivo dos protocolos paralelos é provê suporte a transferências de [
[[Imagem:Protocolodist.png]]
Linha 55 ⟶ 45:
* recuperar segmentos perdidos
Além disso, existem dois problemas básicos ao utilizar [
Enquanto o
Balanceamento dinâmico de carga é essencial para manter transmissões efetivas de arquivos. Apesar de manter a demanda no máximo parecer lógico, as vezes, isto atrapalha a transmissão. Focar somente na demanda gera outros problemas na rede como congestionamento, o que degenera o
A transparência ao usuário, permite sistemas de software mudem sem alterar os sistemas ao redor, usando [
Os protocolos paralelos devem ser transparentes ao usuário e a outras aplicações, para que possam ser compatíveis com as aplicações atuais e outros protocolos.
Linha 75 ⟶ 65:
==== Definição ====
A computação em grade (do Inglês ''[
Uma experiência de integração de processamento distribuído é o projeto [http://setiathome.ssl.berkeley.edu/ SETI@home], uma continuação do projeto da NASA de busca de inteligência extraterrestre. Usando um software que pode ser baixado pela Internet, um microcomputador pode analisar sinais do rádio telescópio de Arecibo. Atualmente, existem 4 milhões de assinantes em 224 países, criando um computador virtual com uma performance de 20 Tflops.
Linha 83 ⟶ 73:
A diferença existente entre a computação distribuída e computação em grade se dá pelo fato de que a computação distribuída é um conceito que vem dos anos 80 e 90, e consiste na possibilidade de resolver um determinado problema computacional através da utilização de diferentes recursos distribuídos geograficamente. A computação distribuída passa a ser uma “Computação em Grade” no momento em que existe uma infra-estrutura física e uma infra-estrutura lógica (software) que permita coordenar os trabalhos que vão ser processados e garantir a sua qualidade de serviço.
O surgimento das ''Grids'' Computacionais nasceu da comunidade de Processamento de Alto Desempenho (PAD). O conceito foi apresentado pelos pesquisadores Ian Foster e Carl Kesselman, sendo composto por uma infra-estrutura de hardware e software que permite-nos acesso a grandes capacidades computacionais geograficamente distribuídas, de forma confiável, consistente, econômica e persistente. Na verdade o conceito é antigo, mas com uma nova dinâmica, em que se pode utilizar a capacidade de computação (ex. Storage/CPU) sem ter que se preocupar de onde vem, como é mantida, fazendo uma metáfora às redes elétricas.
Chamamos de Organização Virtual (VO) quando temos participantes que desejam compartilhar recursos para poder concluir uma tarefa. Além disso, o compartilhamento esta além de apenas troca de documentos, isto pode envolver acesso direto a software remoto, computadores, dados, sensores e outros recursos.
[[Image:VirtOrg.png|thumb|right|Organizações Virtuais acessando diferentes e sobrepostos conjuntos de recursos]]
Grids são construídos como um grupamento de serviços básicos independentes. Um aspecto essencial dos serviços de Grid é que esses estão disponíveis uniformemente através dos ambientes distribuídos na Grid. Os serviços são agrupados em um sistema integrado, também chamado de ''middleware''. Exemplos de ferramentas atuais de Grid incluem Globus, Legion, OpenGrid, AppLeS.
O Grid permite também o uso de técnicas de programação paralela por passagem de mensagens. O ambiente MPI (
A Internet surgiu no início da década de 70 com o objetivo de interligar diferentes ambientes computacionais e geograficamente dispersos. Os ''web sites'' desenvolvidos pela indústria sempre foram interoperáveis em relação usuário-''site'', por meio de aplicações criadas neste contexto, em que o usuário dispõe de um menu de serviços fechados. O que ocorre em um ambiente de ''Grid'' é o inverso, onde o usuário tem de submeter suas aplicações para serem resolvidas dentro do ambiente por ele montado.
Um ambiente de ''cluster'' constitui em um sistema formado por hardware e software conectados em um local apenas, servindo a usuários que estão trabalho somente em um projeto, usado exclusivamente para resolver os problemas computacionais de uma determinada organização. Por outro lado, um ''Grid'' presta serviços de uma forma geograficamente distribuída. Em um ''cluster'', os recursos são gerenciados por uma entidade central, e os computadores agem como se fosse um único dispositivo. Nas configurações em ''Grid'', cada
==== Benefícios e Desafios ====
Um ''Grid'' possui muitos benefícios, entre os quais podemos citar:
*Organizações podem agregar recursos - a computação em ''Grid'' permite que as organizações possam agregar recursos com toda a infraestrutura dos ITs, não importando localização global. Isso elimina situações onde um ''site'' esteja sendo executado com sua capacidade máxima, enquanto outros tenham ciclos disponíveis.
*Poderosa plataforma de suporte a Organizações Virtuais - organizações podem melhorar dramaticamente sua qualidade e velocidade de produtos e serviços disponibilizados, enquanto os custos de IT são reduzidos por habilitar a colaboração transparente dos recursos compartilhados
Linha 110 ⟶ 100:
*Melhor utilização de largura de banda - pode-se criar a mais robusta e resistente infraestrutura de informações.
*Aproveitamento de recursos ociosos – pode-se aproveitar os ciclos de processamento ''idle'' disponíveis dos PCs ''desktops'' que se encontram em várias localidades pelo planeta. Por exemplo, os computadores que se encontram tipicamente ociosos durante a noite de uma empresa em
A computação em grade, por ser uma tecnologia ainda muito recente, possui muitos desafios operacionais e de pesquisa a serem combatidos. Apenas para exemplificar, citamos alguns deles:
*Localização dos recursos
*Reserva de recursos
*Capacidade para adaptar- se a mudanças no ambiente
*Criação e escalonamento das tarefas
*Autonomia de cada grupo participante para definir suas próprias políticas de segurança
*Recursos requisitados podem estar em diferentes localidades
*Qualidade de serviço exigida por cada aplicação
==== Conclusão ====
O ''Grid Computing'' é um desafio bem maior do que formas mais simples de computação paralela e distribuída. Hoje, a maioria dos projetos de ''Grid'' permanecem localizados nos centros de supercomputação e laboratórios universitários. Os centros de pesquisa são ligados a conexões em rede cerca de 20 vezes mais rápidas do que as conexões de banda largas normais, são equipadas com sistemas de armazenamento capazes de lidar com vastos arquivos de dados e com computadores de alta performance. O ''Grid Computing'' é um conceito sobre o qual existe ainda uma grande expectativa e que poderá evoluir em diferentes direções, mas que é já hoje entendido como a próxima geração da ''Web'' para a comunidade científica.
=== Peer-to-Peer ===
Linha 141 ⟶ 125:
As redes '''Peer-to-Peer (P2P)''' são um modelo de comunicação em que todas as partes possuem as mesmas capacidades e responsabilidades, podendo também iniciar uma seção de comunicação. Difere do modelo de cliente/servidor, no qual alguns computadores são dedicados a servirem dados a outros. Os computadores que constituem a rede não possuem um papel fixo de cliente ou servidor, pelo contrário, costumam ser considerados de igual nível e assumem o papel de cliente ou de servidor dependendo da transação sendo iniciada ou recebida de um outro ''peer'' da mesma rede.
Os nós da rede Peer-to-Peer podem diferir em termos de configuração local, capacidade de processamento, capacidade de armazenamento, largura de banda, entre outras características particulares. O primeiro uso da expressão Peer-to-Peer foi em 1984, com o desenvolvimento do projeto Advanced Peer-to-Peer Networking Architecture na [
O termo é também utilizado em diferentes tecnologias que adotam o modelo conceitual ponto-a-ponto, tais como o protocolo [
Na Internet, Peer-to-Peer é um tipo de rede transiente que permite a um grupo de computadores usuários com um mesmo programa conectarem e terem acesso direto a arquivos no disco rígido um dos outros. Esses programas de compartilhamento de arquivos, como por exemplo o [
Há também outros tipos de recursos podem ser
==== Arquitetura e
As redes Peer-to-Peer podem ser classificadas em relação o seu uso.
Linha 155 ⟶ 139:
* Compartilhamento de arquivos
* Telefonia
* [
* Fóruns de discussão
Outra classificação possível para as redes Peer-to-Peer é em relação ao grau de centralização delas. Algumas aplicações são baseadas em arquiteturas cliente/servidor para algumas tarefas críticas como a indexação de informações, por exemplo. Outras aplicações usam uma arquitetura Peer-to-Peer pura, sem nenhuma centralização de tarefas. Essa arquitetura completamente descentralizada faz com que os usuários tenham o mínimo de contato com o servidor central, o que provém maior escalabilidade do sistema.
As aplicações Peer-to-Peer puras são raras. Em geral é utilizada uma arquitetura híbrida, utilizando alguns elementos centralizadores na execução de algumas tarefas cujo desempenho é crítico. As questões de desempenho são o que induzem a uma centralização parcial das atividades em
Nas arquiteturas puras, os ''peers'' são iguais, fazendo os papéis de clientes e servidores. Não há um servidor central para controlar a rede, nem um roteador central. Nas arquiteturas híbridas há um servidor central para manter informações sobre os ''peers'' e atender a requisições pelas informações. Os ''peers'' são responsáveis por armazenar dados, deixar o servidor central saber quais arquivos eles querem compartilhar, e disponibilizar os dados a outros ''peers'' quando eles requisitarem.
Linha 182 ⟶ 166:
=== Web Crawlers ===
Uma outra aplicação interessante do paralelismo na internet é na construção de ''Web crawlers'', também conhecidos como [
==== Definição ====
Um ''crawler'' geralmente começa a funcionar a partir de um conjunto inicial de [
Com a expansão diária do tamanho da Web, fica cada vez mais difícil coletar toda ou uma significante parte da Web em um só processo. Então, a paralelização dos Web crawlers se tornam uma medida essencial para maximizar a taxa de captura dos dados.
Linha 196 ⟶ 180:
*Qualidade: geralmente é mais interessante coletar as páginas mais "importantes" primeiro, a fim de maximizar a "qualidade" dos dados coletados. Em crawlers paralelos, cada processo pode não ter conhecimento da imagem de toda a rede coletada, tomando decisões de acordo com a imagem local da parte que coletou.
*Banda de Comunicação: periodicamente os processos precisam se comunicar para prevenir a sobreposição de dados ou melhorar a qualidade da coleta.
A paralelização dos web crawlers nos trazem importantes vantagens em relação aos crawlers não paralelizados, como:
*[
*Dispersão: os múltiplos processos de um crawler paralelo podem rodar em lugares geograficamente distantes, cada um coletando dados de locais próximos geograficamente. Por exemplo, um processo no Brasil pode coletar páginas dos países da América do Sul, enquanto um outro processo na Alemanha coleta dados da Europa. Essa dispersão pode ser necessária quando um crawler serial não consegue lidar com uma carga pesada de uma coleta em larga escala.
Linha 206 ⟶ 190:
*Redução: um crawler paralelo pode também reduzir a carga na rede. Por exemplo, assuma que um crawler na América do Norte precise coletar uma página da Europa. Primeiramente, a página deve ir pela rede na Europa, passando pela rede inter-continental Europa-para-América do Norte, e finalmente passa pela rede na América do Norte. Se um processo de um crawler paralelo coleta todas as páginas européias, e outro processo coleta as páginas da América do Norte, então o tráfego total na rede será reduzido.
Note que as páginas coletadas devem ser transferidas para uma central de comando, a fim de se construir um
*Compressão: as páginas coletas e armazenadas podem ser comprimidas antes de serem enviadas a uma localização central.
Linha 212 ⟶ 196:
*Diferença: ao invés de mandar uma imagem inteira de todas as páginas coletadas por um processo, é possível mandar apenas a diferença entre a imagem corrente e a anterior. Isso pode reduzir o tráfego porque muitas páginas são estáticas e não costumam ser atualizadas com muita frequência.
*Sumarização: em muitos casos é necessário apenas um
Fica claro que para a construção de Web crawlers efetivos é necessário muito mais do que apenas uma simples paralelização.
Linha 219 ⟶ 203:
A figura acima nos mostra a arquitetura geral de um crawler paralelo, que consiste de múltiplos processos, referidos por <math>C-proc</math>. Cada <math>C-proc</math> é responsável por executar uma tarefa básica de um crawler não paralelo. Ele coleta páginas da Web, armazena as páginas localmente, extrai todas as URLs que encontrar e segue os [
*Intra-site crawler: quando todos os processos rodam em uma mesma rede local e se comunicam em alta velocidade. Na figura anterior, isso pode ser observado no caso onde todos os <math>C-proc</math> rodam na rede local da parte de cima.
*Crawler
Em um crawler que roda com múltiplos processos, é possível ocorrer o problema da sobreposição. Para evitar esse problema, os processos devem ser coordenados entre eles para saber quais páginas cada um deve coletar. Essa coordenação pode ser feita seguindo algum dos caminhos:
Linha 235 ⟶ 219:
==== Conclusão ====
Web crawlers vem sendo utilizados com cada vez mais frequência para coletar dados da Web para máquinas de busca, caches e [
== Programação paralela na web ==
Linha 302 ⟶ 286:
Atualmente os navegadores abrem muitas conexões em paralelo, e ainda é póssivel aumentar esse número. Esse último esquema é mais útil para navegadores limitados a somente duas conexões.
===== AJAX
A algum tempo atrás o modelo clássico das aplicações na web era puramente sequêncial. Você tinha uma seqüência de chamadas de funções e elas sempre eram executadas em uma certa ordem. Mas a forma de programar para web mudou. As aplicações aumentaram de porte. Muito disso deve-se ao conjunto de tecnologias AJAX.
Linha 507 ⟶ 491:
== Referências ==
* [http://www.deakin.edu.au/scitech/sit/dsapp/archive/upload/20071002_134654brock_06_appfti.pdf A Parallel Downloading Protocol for the Internet]▼
* [http://www.deakin.edu.au/scitech/sit/dsapp/archive/upload/20071002_135006Brock%202007%20-%20Preparing%20PHTTP%20for%20the%20Real%20World.pdf Preparing PHTTP for the Real World]▼
* [http://www.patentstorm.us/patents/6085251-fulltext.html Implementing a parallel file transfer protocol]▼
* [http://pages.cs.wisc.edu/~cs764-1/paralleldb.pdf Parallel Database Systems: The Future of High Performance Database Processing]▼
* [http://www.dba-oracle.com/art_ops1.htm Using parallel Oracle for high-speed e-commerce systems]▼
* [http://oak.cs.ucla.edu/~cho/papers/cho-parallel.pdf Parallel Crawlers]▼
* [http://www.clubedohardware.com.br/artigos/124/1 Computação em Grade - Uma Visão Introdutória]▼
* [http://en.wikipedia.org/wiki/Grid_computing Grid Computing]▼
* [http://www.inf.ufrgs.br/procpar/hetnos/grid/papers/open_grid.pdf Rodando Aplicações Paralelas Leves em Escala Mundial: A Perspectiva do Usuário]▼
* [http://en.wikipedia.org/wiki/Peer-to-peer Peer-to-Peer - Wikipedia]▼
* [http://searchnetworking.techtarget.com/sDefinition/0,,sid7_gci212769,00.html Peer-to-Peer]▼
* [http://www.mozilla.org/quality/networking/docs/netprefs.html Mozilla Network Preferences]▼
* [http://blogs.msdn.com/kristoffer/archive/2006/12/22/loading-javascript-files-in-parallel.aspx Loading Javascript Files in parallel]▼
* [http://www.hunlock.com/blogs/Concurrent_Ajax Concurrent Ajax]▼
* [http://tableless.com.br/artigos/ajaxdemo/ Introdução ao Ajax]▼
* [https://blueprints.dev.java.net/ajax-faq.html#concurrent_requests Ajax faq for the JAVA developer]▼
* [http://www.hwhappy.co.uk/2006/11/07/concurrent-xml-queries-with-ajax/ Concurrent xml queries with ajax ]▼
* [http://www.lcmi.ufsc.br/~romulo/discipli/cad-ii2/thread-socket-java.pdf Thread em JAVA]▼
* [http://www.hristov.com/andrey/projects/php_stuff/pres/writing_parallel_apps_with_PHP.pdf Processo paralelos em PHP]▼
* [http://www.php.net/manual/en/ref.pcntl.php PHP Process Control Functions]▼
[[Categoria:Programação paralela em arquiteturas multicore|{{SUBPAGENAME}}]]
▲[http://www.deakin.edu.au/scitech/sit/dsapp/archive/upload/20071002_134654brock_06_appfti.pdf A Parallel Downloading Protocol for the Internet]
▲[http://www.deakin.edu.au/scitech/sit/dsapp/archive/upload/20071002_135006Brock%202007%20-%20Preparing%20PHTTP%20for%20the%20Real%20World.pdf Preparing PHTTP for the Real World]
▲[http://www.patentstorm.us/patents/6085251-fulltext.html Implementing a parallel file transfer protocol]
▲[http://pages.cs.wisc.edu/~cs764-1/paralleldb.pdf Parallel Database Systems: The Future of High Performance Database Processing]
▲[http://www.dba-oracle.com/art_ops1.htm Using parallel Oracle for high-speed e-commerce systems]
▲[http://oak.cs.ucla.edu/~cho/papers/cho-parallel.pdf Parallel Crawlers]
▲[http://www.clubedohardware.com.br/artigos/124/1 Computação em Grade - Uma Visão Introdutória]
▲[http://en.wikipedia.org/wiki/Grid_computing Grid Computing]
▲[http://www.inf.ufrgs.br/procpar/hetnos/grid/papers/open_grid.pdf Rodando Aplicações Paralelas Leves em Escala Mundial: A Perspectiva do Usuário]
▲[http://en.wikipedia.org/wiki/Peer-to-peer Peer-to-Peer - Wikipedia]
▲[http://searchnetworking.techtarget.com/sDefinition/0,,sid7_gci212769,00.html Peer-to-Peer]
▲[http://www.mozilla.org/quality/networking/docs/netprefs.html Mozilla Network Preferences]
▲[http://blogs.msdn.com/kristoffer/archive/2006/12/22/loading-javascript-files-in-parallel.aspx Loading Javascript Files in parallel]
▲[http://www.hunlock.com/blogs/Concurrent_Ajax Concurrent Ajax]
▲[http://tableless.com.br/artigos/ajaxdemo/ Introdução ao Ajax]
▲[https://blueprints.dev.java.net/ajax-faq.html#concurrent_requests Ajax faq for the JAVA developer]
▲[http://www.hwhappy.co.uk/2006/11/07/concurrent-xml-queries-with-ajax/ Concurrent xml queries with ajax ]
▲[http://www.lcmi.ufsc.br/~romulo/discipli/cad-ii2/thread-socket-java.pdf Thread em JAVA]
▲[http://www.hristov.com/andrey/projects/php_stuff/pres/writing_parallel_apps_with_PHP.pdf Processo paralelos em PHP]
▲[http://www.php.net/manual/en/ref.pcntl.php PHP Process Control Functions]
|