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
Nandopi (discussão | contribs)
Linha 17:
=== Banco de Dados ===
 
Sistemas de banco de dados altamente paralelos estão começando a substituir os tradicionais [http://pt.wikipedia.org/wiki/Mainframe mainframes] para maiores bancos de dados e tarefas de transações.
 
A partir da hegemonia do modelado[http://pt.wikipedia.org/wiki/Modelo_relacional modelo de dados relacionaisrelacional], sistemas de [http://pt.wikipedia.org/wiki/Banco_de_dados_relacional banco de dados relacionais] começaram a aparecer no mercado. As consultas relacionais são idealmente convertidas para execução em paralelo, pois elas consistem em operações uniformes aplicadas a conjuntos de dados uniformes. Cada operação produz uma nova relação, então as operações podem ser decompostas em fluxos de dados altamente paralelos.
 
Ao utilizamos a saída de um operador na entrada de outro, os dois operadores podem trabalhar em série, o que gera um [http://pt.wikipedia.org/wiki/Pipeline pipeline] paralelo. Podemos também particionar os dados de entrada entre vários [http://pt.wikipedia.org/wiki/Processador processadores] e [http://pt.wikipedia.org/wiki/Mem%C3%B3ria_%28computador%29 memórias], pois uma operação pode, com grande freqüência, ser dividida em várias operações independentes, cada um trabalhando em uma parte dos dados. Esta divisão de dados e execução gera um paralelismo particionado.
 
[[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 [http://pt.wikipedia.org/wiki/Arquitetura_de_software arquitetura] do sistema de banco de dados.
 
Apesar do grande número de arquiteturas de sistemas de banco de dados paralelos e [http://pt.wikipedia.org/wiki/Computa%C3%A7%C3%A3o_distribu%C3%ADda distribuídos], há um consenso quanto ao uso da arquitetura sem compartilhamento. Nesses sistemas, as tuplas de cada relação no banco de dados são particionadas dentre as unidades de disco que estão ligadas diretamente a cada processador. Isso permite que vários processadores possam buscar em grandes relações paralelamente sem precisar de dispositivos de [http://pt.wikipedia.org/wiki/E/s E/S] sofisticados.
 
==== 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 [http://pt.wikipedia.org/wiki/Complexidade_%28inform%C3%A1tica%29 complexidade] e, apesar dos modelos de custos para consultas relacionais executadas em um único processador serem bem conhecidos, eles ainda dependem de [http://pt.wikipedia.org/wiki/Estimador estimativas] de custo, que no melhor caso, adivinham.
 
[http://pt.wikipedia.org/wiki/Algoritmos Algoritmos] paralelos para cada operação e organização das [http://pt.wikipedia.org/wiki/%C3%81rvore_%28estrutura_de_dados%29 árvores] de consultas podem ser usados para aumentar significativamente o número de otimizações possíveis encontradas a cada consulta, aumentando consideravelmente a velocidade das consultas.
 
=== Protocolos paralelos ===
 
O aumento da demanda por conteúdo [http://pt.wikipedia.org/wiki/Multimidia multimídia], atualizações dentre outros, tornaram os servidores distribuídos cada vez mais utilizados para suprir esta demanda, sem o congestionamento na transmissão e falha do servidor por falha em um ponto único, que são problemas comuns de servidores centralizados. Além disso, servidores centralizados só podem responder a um número limitado de clientes, devido ao limite de conexões.
 
Servidores distribuídos permitiram que recursos sejam disponibilizados em pontos de grande demanda, aliviando o problema de congestionamento em servidores centralizados. Apesar disso, as [http://pt.wikipedia.org/wiki/Taxa_de_transfer%C3%AAncia taxas de transferências] continuam as mesmas dos servidores centralizados, pois apenas um nó no sistema distribuído realiza a transferência. Paralelismo podempode melhorar a transmissão.
 
O objetivo dos protocolos paralelos é provê suporte a transferências de [http://pt.wikipedia.org/wiki/Arquivo_de_computador arquivos] paralelas em servidores distribuídos.
 
[[Imagem:Protocolodist.png]]
Linha 51:
* transmitir o arquivo em seguimentos paralelos
* unir o arquivo automaticamente
* recuperar seguimentossegmentos perdidos
 
Além disso, existem dois problemas básicos ao utilizar [http://pt.wikipedia.org/wiki/Download "download"] distribuído: [http://pt.wikipedia.org/wiki/Balanceamento_de_carga balanceamento de carga] dinâmico e transparência ao usuário.
 
Enquanto o “download” está ocorrendo, a carga dos servidores deve ser checada para garantir que a carga continue baixa, senão o desempenho é reduzido. Quando um servidor ultrapassa sua capacidade, replicas são migradas para outros servidores até o servidor carregado atinga o nível adequado de carga. Se a demanda for muito alta, uma replica é criada ao invés de migrada e é destruída se a demanda for baixa.
Linha 59:
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 proposito dos sistemas distribuídos.
 
A transparência ao usuário, permite sistemas de software mudem sem alterar os sistemas ao redor, usando [http://pt.wikipedia.org/wiki/Interface_%28programa%C3%A7%C3%A3o%29 interfaces]. A transparência é obtida ao construir uma interface para o sistema e depois construir os sistemas ao redor baseados na interface. Ao realizar isto, o sistema atrás da interface pode ser mudado sem afetar os sistemas em volta.
 
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.