escalando para alguns milhares
TRANSCRIPT
Escalando para alguns milhares
Friday, September 10, 2010
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
Escalar o mito !
Friday, September 10, 2010
O que é escalar ?
ME RESPONDAM ! (olha tem algo na bolsa, não posso falar...)
Friday, September 10, 2010
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
Porque Escalar ?
Atender + processos (pessoas, transações, o que for)
Responder os serviços mais rápidos
Atender a alguma emergência, imprevistos...
Huum, o tio da padaria está falindo, pensou em vender cachorro quente, para conseguir um trocado, ela dá conta ?
Friday, September 10, 2010
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
Poder de Processamentovs
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
Tudo tem a ver com design !
Friday, September 10, 2010
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
O C10k Problem
http://www.kegel.com/c10k.html
I/O - epool, kquee
EVENTOS
NGINX / Tornado / Lighttpd
Friday, September 10, 2010
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
Tá legal, parece simples um processo isolado
escalar, mas e cliente servidor, como fica ?
Friday, September 10, 2010
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
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
Ok, ok, estou entendendoOU 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
Escalonamento horizontal
Vários processos separadosMuitas CPU’s
+ Complexo gerenciamento dos dados
Mais fácil a replicaçãoTudo tem tudo
Friday, September 10, 2010
Escalonamento vertical
Processo único, ou multi processos em fork/threads
Fácil manutençãoRequer mais investimento inicial,
Se cair, FU !
Friday, September 10, 2010
Escalonamento por evento
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 =)
Friday, September 10, 2010
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
Mas onde está os códigos ?
Você me prometeu códigos
Friday, September 10, 2010
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
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
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
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
Obrigado, Perguntas ?Renato Elias
Friday, September 10, 2010