Projeto'Integrador
Sistema Distribuído
Um'sistema'distribuído'é'... um'conjunto'de'componentes'hardware'e'software, interligados'através'de'uma'infraestrutura'de' comunicação, que'cooperam'e'se'coordenam'entre'si'apenas'pela' troca'de'mensagens.'Sistema Distribuído
Aspetos'inerentes'à'separação'física'dos' componentes... E Paralelismo real,'falhas'independentes E Ausência'de'um'relógio'global,'visão parcial'do' estado'global'do'sistema E E>'implicações'no'objetivo'de'operar,'de'forma' concertada,'como'um'todo...Arquitetura
• Organização'de'um'sistema'(complexo)'em' componentes'mais%simples%com' funcionalidades/responsabilidades'próprias • Num'sistema%distribuído,'define: – quais'os'componentes,'o'que'fazem'e'como' interagem'entre'siArquitetura
• A'arquitetura'de'um'sistema'distribuído'pode' ser'determinada'por'vários'fatores: – requisitos'funcionais: • E e.g.,'controlo,'segurança,'etc. – requisitos'não'funcionais: • E desempenho'(escalabilidade,'latência),'disponibilidade • E custoModelo'Cliente/Servidor
• A'arquitetura'mais'simples'divide'a'aplicação' distribuída'em'dois'componentes... Cliente Servidor pedido respostaComposição
• Arquiteturas'mais'sofisticadas'podem'ser' obtidas'por'composição'do'modelo'C/S… Servidor [particionado,'replicado,'geoEreplicado],' P2P,'3ETier,'etc. C S C S C S C S C Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Servidor Servidor Servidor Servidor ServidorServidor Servidor Servidor ServidorLimitações Modelo C/S'Base
• Falhas,'capacidade limitada do'servidor,'
latência da'comunicação… Cliente Cliente Cliente Cliente Servidor
Limitações Modelo C/S'Base
• Falhas,'capacidade limitada do'servidor,'
latência da'comunicação… Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Servidor
Limitações Modelo C/S'Base
• Falhas,'capacidade limitada do'servidor,'
latência da'comunicação… Cliente Servidor Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente
Limitações Modelo C/S'Base
• Falhas,'capacidade limitada do'servidor,'
latência da'comunicação… Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente
Servidor'Particionado
• Serviço'é'fornecido'por'múltiplos'servidores,' dedicados'a'uma'parte'do'problema – Melhor desempenho,'falhas'parciais • Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Servidor Servidor Servidor ServidorServidor'Replicado
• Serviço'é'fornecido'por'múltiplos'servidores'
funcionalmente'idênticos
– aumenta a'disponibilidade do'serviço,'desempenho'
depende'do'custo de'manter'a'consistência entre' réplicas • Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Servidor Servidor Servidor Servidor ServidorServidor Servidor Servidor Servidor
Servidor'GeoEReplicado
• Múltiplos'servidores'funcionalmente'idênticos% e%distribuídos%geograficamente – aumenta a'disponibilidade,'reduz'latência;' consistência'entre'réplicas'mais'cara • Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Cliente Servidor Servidor Servidor Servidor Servidor Servidor Servidor Servidor Servidor Servidor Servidor Servidor Servidor Servidor ServidorArquiteturas nEtier/camadas
• Funcionalidades da'aplicação estão
fisicamente separadas em diversas camadas
– Gestão dos'dados,'separada do'seu processamento,'
da'sua apresentação
– (+++)'Flexibilidade em
– alterar cada camada
– de'forma'independente
Exemplo:'Arquitetura'3Etier/camadas Clientes Application
Server Base'de'Dados
Modelo P2P
• Modelo'com'componentes' • funcionalmente'idênticas,' • interagindo'entre'si ( +')'controlo'descentralizado,'privacidade,'custo' reduzido,'escala'“ilimitada”… ('E )'difícil'de'concretizar'e'garantir'funcionalidades E Produtos:'Spotify,'Bittorrent C S C S C S C SDesempenho &'Escalabilidade
• Métricas
– Latência das'operações
• – afecta a'apreciação subjetiva da'qualidade do'serviço
– Débito
Latência de'uma operação
tempo Cliente Servidor processamento local:'~1'ms pedido ao servidor:'~10E100'ms processamento no'servidor:~1E100'ms resposta do'servidor:'~10E100'ms processamento local:'~1E100'msLatência de'uma operação
tempo Cliente Servidor processamento local:'~1'ms pedido ao servidor:'~10E100'ms processamento no'servidor:~1E100'ms resposta do'servidor:'~10E100'ms processamento local:'~1E100'msAplicação Web'no'Cliente
Algumas orientações:Responsive'web'design
http://jquerymobile.com/demos/1.3.0/docs/intro/rwd.html
Dimensões das'imagens/objetos/scripts Fidelidade/detalhe ajustado à plataforma Bibliotecas em versões minimizadas
Carregamento dinâmico de'páginas
Dar'(algum)'feedback'logo'que possível Atualizar apenas o'necessário
Prefetching'and'caching
Interação cliente/servidor
• Reduzir número de'interações
– Porquê?
• Latência da'interação
• Carga do'servidor
– Como?
• Verificações no'cliente sempre que possível
– e.g.'dados'dos'forms
• Caching'no'cliente,'caching'no'cliente,'caching'no'cliente,' caching'no'cliente,'…
Caching'dos'dados
• Importante devido ao potencial impacto no'
desempenho
– Dados'imutáveis:'simples
– Dados'mutáveis do'cliente (e.g.'preferências):'simples
• Outros'dados'mutáveis:'gerir risco de'divergência
– Aproximação simples/pragmática:'usar dados'em cache' e'aferir validade,'se'passou demasiado tempo,'
Interações periódicas
• Impacto no'cliente pela carga induzida no'
servidor
– e.g.:'informar servidor de'nova'localização,'obter localização de'um'grupo de'utilizadores,'etc.
• Aproximações possíveis
– Utilizar soluções push'(iniciativa do'servidor)
– tendem a'ser'dependentes da'plataforma,'websockets
– Limitar e'adaptar frequência das'invocações
– e.g.'apenas envia nova'localização se'a'actual'se'alterou siginifcativamente
Tempo'de'execução duma'operação
tempo cliente servidor processamento local:'~1'ms pedido ao servidor:'~10E100'ms processamento no'servidor:~1E100'ms aumenta com'acessos a'disco,'complexidade do'pedido e'carga resposta do'servidor:'~10E100'ms processamento local:'~1E100'ms
Servidor:'caching'das'páginas
• Executar código em cada pedido é lento • Servidor/proxy'pode fazer cache'dos'
resultados e'servir o'cliente sem contatar o' servidor aplicacional
– RubyOnRails fornece solução:
Servidor:'base'de'dados
• Base'de'dados'é determinante no'desempenho
– Acesso é ordens de'grandeza mais lento'que computação
• Aspectos a'ter em consideração
– Índices são fundamentais para bom desempenho
• e.g.'índices a'criar dependem das'pesquisas que se'fazem !!!
– Minimizar complexidade das'pesquisas efectuadas
• Joins'são pesados…'proibitivosse'não existirem os índices correctos
Caching'dos'resultados da base'de'
dados
• Repetir as'queries'à base'de'dados'leva a'um'
mau desempenho
• Solução:'fazer caching'dos'resultados das'
queries
– RubyOnRails fornece solução:
Particionamento e caching'distribuído
• A'partir de'certo nível de'carga,'é necessário
ter mais servidores a'executar
– Aproximação simples
• Várias máquinas correm servidor aplicacional
• Continua'a'existir uma única base'de'dados
• Para'escalar,'é fundamental'acesso eficiente aos dados
• Solução:'memcached
• Memcached – servidor de'caching'distribuído
Particionamento
• A'partir de'certo nível de'carga,'é necessário
ter mais servidores a'executar
• Aproximações mais complexas:
– Divisão em funcionalidades independentes servidas
por diferentes servidores
– Particionamento dos'dados,'de'forma'a'serem
Índice
• Desempenho duma aplicação
– Cliente
– Interacção cliente/servidor
• Reduzir número de'interacções
• Reduzir dimensão das'interacções – Servidor
• Melhorar desempenho dos'acessos à base'de'dados
• Particionar servidor
Medir desempenho:'porquê?
• Latência esperada
– Tempo'de'execução com'carga baixa
• Escalabilidade do'sistema
Medir desempenho:'como?
• DeveEse'executar uma carga de'trabalho semelhante à
executada pelos utilizadores finais
– Nas aplicações web,'podeEse'obter logs'dos'servidores e'fazer replays
• Para'obter latência esperada
– Executar as'cargas de'trabalho múltiplas vezes e'obter média e' desvioEpadrão (ou min/max),'percentil 90,'95,'para cada operação
• Para'verificar escalabilidade
– Ir aumentandoo'número de'clientes a'executarem operações concorrentemente
Algumas ferramentas
• Existe um'grande número de'ferramentas para
testar a'escalabilidade do'servidor
– RubyonRails – http://guides.rubyonrails.org/performance_testing.html#generati ngEperformanceEtests – Apache'Jmeter – http://jmeter.apache.org/ – Httperf – http://www.hpl.hp.com/research/linux/httperf/
– Medir desempenho através de'reEexecução de'logs