Escalando para alguns milhares

Post on 04-Aug-2015

1.108 views 4 download

Transcript of Escalando para alguns milhares

Escalando para alguns milhares

renato.elias@gmail.com

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