escalando para alguns milhares

26
Escalando para alguns milhares [email protected] Friday, September 10, 2010

Upload: renato-elias

Post on 04-Aug-2015

1.108 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: Escalando para alguns milhares

Escalando para alguns milhares

[email protected]

Friday, September 10, 2010

Page 2: Escalando para alguns milhares

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

Page 3: Escalando para alguns milhares

Escalar o mito !

Friday, September 10, 2010

Page 4: Escalando para alguns milhares

O que é escalar ?

ME RESPONDAM ! (olha tem algo na bolsa, não posso falar...)

Friday, September 10, 2010

Page 5: Escalando para alguns milhares

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

Page 6: Escalando para alguns milhares

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

Page 7: Escalando para alguns milhares

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

Page 8: Escalando para alguns milhares

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

Page 9: Escalando para alguns milhares

Tudo tem a ver com design !

Friday, September 10, 2010

Page 10: Escalando para alguns milhares

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

Page 11: Escalando para alguns milhares

O C10k Problem

http://www.kegel.com/c10k.html

I/O - epool, kquee

EVENTOS

NGINX / Tornado / Lighttpd

Friday, September 10, 2010

Page 12: Escalando para alguns milhares

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

Page 13: Escalando para alguns milhares

Tá legal, parece simples um processo isolado

escalar, mas e cliente servidor, como fica ?

Friday, September 10, 2010

Page 14: Escalando para alguns milhares

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

Page 15: Escalando para alguns milhares

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

Page 16: Escalando para alguns milhares

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

Page 17: Escalando para alguns milhares

Escalonamento horizontal

Vários processos separadosMuitas CPU’s

+ Complexo gerenciamento dos dados

Mais fácil a replicaçãoTudo tem tudo

Friday, September 10, 2010

Page 18: Escalando para alguns milhares

Escalonamento vertical

Processo único, ou multi processos em fork/threads

Fácil manutençãoRequer mais investimento inicial,

Se cair, FU !

Friday, September 10, 2010

Page 19: Escalando para alguns milhares

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

Page 20: Escalando para alguns milhares

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

Page 21: Escalando para alguns milhares

Mas onde está os códigos ?

Você me prometeu códigos

Friday, September 10, 2010

Page 22: Escalando para alguns milhares

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

Page 23: Escalando para alguns milhares

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

Page 24: Escalando para alguns milhares

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

Page 25: Escalando para alguns milhares

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

Page 26: Escalando para alguns milhares

Obrigado, Perguntas ?Renato Elias

Friday, September 10, 2010