Escalando para alguns milhares

1.253 visualizações

Publicada em

Publicada em: Tecnologia
0 comentários
2 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
1.253
No SlideShare
0
A partir de incorporações
0
Número de incorporações
473
Ações
Compartilhamentos
0
Downloads
12
Comentários
0
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Escalando para alguns milhares

  1. 1. Escalando para alguns milhares renato.elias@gmail.com Friday, September 10, 2010
  2. 2. Agenda Escalar o mito ! Tudo tem a ver com design Mas onde está os códigos? Você me prometeu códigos ! Alguns testes... Perguntas Friday, September 10, 2010
  3. 3. Escalar o mito ! Friday, September 10, 2010
  4. 4. O que é escalar ? ME RESPONDAM ! (olha tem algo na bolsa, não posso falar...) Friday, September 10, 2010
  5. 5. Talvez seja: Se comprometer a entregar um serviço com alta concorrência (de acessos) Gastar recursos de maneiras adequadas Manter sua aplicação com uma resposta de tempo aceitável Poder dormir a noite Friday, September 10, 2010
  6. 6. Porque Escalar ? Huum, o tio da padaria está falindo, pensou em vender cachorro quente, para conseguir um trocado, ela dá conta ? Atender + processos (pessoas, transações, o que for) Responder os serviços mais rápidos Atender a alguma emergência, imprevistos... Friday, September 10, 2010
  7. 7. Nenhum aplicativo escala ? A maioria dos aplicativos não precisam escalar, eles rodam sobre condições aceitáveis. Alguma linguagem, faz a mágica sozinha ? Tem aquela linguagem chamada SCALA, porquê ? fiquei sabendo dela, achei legalll, minha bala de prata =D, C/C++, sempre escalou nos meus projetos, ou não ! Friday, September 10, 2010
  8. 8. Poder de Processamento vs Otimização Extrema Ok, então o famoso 80% vs 20% ! Otimização extrema, QSort, Eventos e outros truques... Ou simplesmente, vamos é adicionar core, trilhões de CPU, Amex, é para isso ! Friday, September 10, 2010
  9. 9. Tudo tem a ver com design ! Friday, September 10, 2010
  10. 10. Como Assim ? Projetos bem pensados inicialmente resolvem vários problemas, não estou falando de PMI, é simplesmente como vamos trabalhar os dados Google e MAP/Reduce (Hadoop e outros) ORACLE / RAC - sincronização em grandes volumes de dados, sistemas jornalados. GFS - um sistema de arquivos baseado em palavras MemCache / CouchDB Friday, September 10, 2010
  11. 11. O C10k Problem http://www.kegel.com/c10k.html I/O - epool, kquee EVENTOS NGINX / Tornado / Lighttpd Friday, September 10, 2010
  12. 12. Perfis de Dados Conteúdo Estático Conteúdo Estático, dependente de sessão Conteúdo Dinâmico Conteúdo Dinâmico, dependente de sessão Friday, September 10, 2010
  13. 13. Tá legal, parece simples um processo isolado escalar, mas e cliente servidor, como fica ? Friday, September 10, 2010
  14. 14. Humm, me de exemplos Dividir para conquistar, mainframes, os primeiros a se intrometerem no problema. CDN ( content delivery netwrok ) (AKAMAI / Amazon CloudFront / Level 3 / Google / Azure) Vanish, Proxy, Backend Servers, Processos especilizados, NIO + File Server, MultiCast Friday, September 10, 2010
  15. 15. Velhos Truqes Cache Proxy Reverso Cache No Cliente Limite de usuários Duplicação de dados ( Anti-pattern, talvez) USO de CPU especializadas: CUDA, OPENGL, entre outras Friday, September 10, 2010
  16. 16. Ok, ok, estou entendendo OU NÃO ! Porque Ruby não escala, mas Rails escala ? JVM e JAVA, ambas criação da SUN, uma é extremamente interessante, a outra talvez. PHP o que você tem de errado ? Facebook, eu gosto de vc, então resolvi a gambiarra com outra gambiarra ! Viva ao durex. MYSQL, um banco de dados interessante, mas... Friday, September 10, 2010
  17. 17. Escalonamento horizontal Vários processos separados Muitas CPU’s + Complexo gerenciamento dos dados Mais fácil a replicação Tudo tem tudo Friday, September 10, 2010
  18. 18. Escalonamento vertical Processo único, ou multi processos em fork/threads Fácil manutenção Requer mais investimento inicial, Se cair, FU ! Friday, September 10, 2010
  19. 19. Pode escalar extremamente se bem usado. Sua natureza assíncrona, beneficia o uso inteligente da computação. Menor gasto de I/O. APAMA ! E a bolsa de valores =) Escalonamento por evento Friday, September 10, 2010
  20. 20. Escalonamento cruzado Estrutura legadas, ou de grande complexidade, Google, Yahoo, Facebook, Bancos, etc.. Se usa pontos de entradas para determinar possíveis gatilhos de incidentes, redirecionamento de datacenters acontece de forma automática. Se stressado, modos light`s são ativados, para suprir demanda. Em extremos, serviços menos requisitados são desligados. Friday, September 10, 2010
  21. 21. Mas onde está os códigos ? Você me prometeu códigos Friday, September 10, 2010
  22. 22. Me diga qual o problema: map<string, int> word_count; for each document d { for each word w in d { word_count[w]++; } } Friday, September 10, 2010
  23. 23. Ok, vamos tentar denovo: Mutex lock; //Protected word_count map <string, int> word_count; for each document d in Parell { for each word w in d { lock.Lock(); word_count[w]++; lock.Unlock(); } } Friday, September 10, 2010
  24. 24. Grr, mais uma vez: struct CountTable { Mutex lock; map <string, int> word_count; } const int kNumBuckets = 256; CountTable tables[kNumBuckets]; for each document d in parallel { for each word w in d { int bucket = hash(w) % kNumBuckets; tables[bucket].lock.Lock(); tables[bucket].word_count[w]++; tables[bucket].lock.Unlock(); } } Friday, September 10, 2010
  25. 25. Ok, desisto... Map/Reduce , é isto, uma forma simples de executar tarefas complexas, distribuídas Coisas talvez que você não imagem: existe dns de palavras, os nós se auto-gerenciam, e executam somente processos pertos deles, afim de evitar precisar fibra otica e uma super banda. Friday, September 10, 2010
  26. 26. Obrigado, Perguntas ? Renato Elias Friday, September 10, 2010

×