TAO

THE POWER OF THE GRAPH

CRISTIANO SANTOS

TÉRCIO SOUZA

DESKTOP BROWSER

MOBILE DEVICE

SOCIAL GRAPH

SOCIAL GRAPH

MEMCACHE & MYSQL

MEMCACHE & MYSQL

NEM MESMO A MELHOR TECNOLOGIA DE BD RELACIONAL DARIA CONTA SEM UM CACHE

MEMCACHE DESEMPENHA ESSA FUNÇÃO DESDE QUE ZUCKERBERG INSTALOU NOS SERVIDORES APACHE EM 2005

MEMCACHE DESEMPENHA ESSA FUNÇÃO DESDE QUE ZUCKERBERG INSTALOU NOS SERVIDORES APACHE EM 2005

MEMCACHE & MYSQL

- INEFICIÊNCIA DO INNODB

- LOCALIDADE

- DATA DE CRIAÇÃO

- REQUISIÇÕES SEM SENTIDO

- CACHE POLUÍDO

MEMCACHE & MYSQL

- DIFERENTES DBS E MODELOS

- MAIS CONHECIMENTO DOS ENGENHEIROS

- BUGS

- INCONSISTÊNCIAS VISÍVEIS

- PERFORMANCE

MEMCACHE & MYSQL

MODIFICAÇÕES NO SCHEMA REQUISITAVAM MUITA COORDENAÇÃO DOS ENGENHEIROS E OPERADORES DOS CLUSTERS MYSQL

E AGORA?

OBJECTS & ASSOCIATIONS

2007

OBJECTS & ASSOCIATIONS API

- DADOS EM GRAFOS

- INICIALMENTE EM PHP

- NÓS (OBJETOS) E ARESTAS (RELAÇÕES)

- SUCESSO IMEDIATO

- SEM CHAMADAS DIRETAS (MYSQL OU MEMCACHE)

OBJECTS & ASSOCIATIONS API

- INVALIDAÇÃO DE ITENS EM CACHE

- OPERAÇÕES COM TODA LISTA DE RELAÇÕES

- DIFICULDADE EM MANTER CONSISTÊNCIA (CACHE)

- THUNDERING HERDS

INÍCIO DE 2009 COMEÇAM O TAO

CLUSTERS DISTRIBUÍDOS GEOGRAFICAMENTE

BILHÕES DE LEITURAS, MILHÕES DE ESCRITAS

TAO DATA MODEL & API

OBJECTS API

TAO PERMITE OPERAÇÕES PARA ALOCAR UM NOVO OBJETO E SEU ID, PARA RECUPERAR, ATUALIZAR, OU DELETAR O OBJETO ASSOCIADO A UM ID.

ASSOCIATIONS API

assoc_add(id1, atype, id2, time, (k -> v)*)

ADICIONA OU SUBSCREVE A ASSOCIAÇÃO (id1, atype, id2), E SEU INVERSO (id1, inv(atype), id2) SE DEFINIDO.

assoc_delete(id1, atype, id2)

DELETA A ASSOCIAÇÃO (id1, atype, id2) E O INVERSO, SE DEFINIDO

assoc_change_type(id1, atype, id2, newtype)

MODIFICA A ASSOCIAÇÃO (id1, atype, id2) PARA (id1, newtype, id2), SE (id1, atype, id2) EXISTE

ASSOCIATIONS QUERY API

assoc_get(id1, atype, id2set, high?, low?)

RETORNA TODAS AS ASSOCIAÇÕES (id1, astype, id2) E SEUS DADOS E TEMPO, ONDE id2 PERTENCE id2set E high >= time >= low (SE ESPECIFICADO)

assoc_count(id1, atype)

RETORNA O TAMANHO DA LISTA DE ASSOCIAÇÕES PARA (id1, atype)

ASSOCIATIONS QUERY API

assoc_range(id1, atype, pos, limit)

RETORNA ELEMENTOS DE LISTA DE ASSOCIAÇÕES (id1, atype) COM ÍNDICE PERTENCENTE A [pos, pos + limit)

assoc_time_range(id1, atype, high, low, limit)

RETORNA ELEMENTOS DA LISTA DE ASSOCIAÇÕES (id1, atype) COMEÇANDO PELA PRIMEIRA ASSOCIAÇÃO ONDE time <= high, RETORNANDO ARESTAS ONDE time >= low

ASSOCIATIONS QUERY API

POSSÍVEIS REQUISIÇÕES:

 

  • "50 MOST RECENT COMMENTS ON ALICE'S CHECKIN"

 

 

  • "HOW MANY CHECKINS AT THE GG BRIDGE?"
assoc_range(632, COMMENT, 0, 50)
assoc_count(534, CHECKIN)

IMPLEMENTAÇÃO

TAO RODA EM UMA COLEÇÃO DE CLUSTERS DISTRIBUIDOS GEOGRAFICAMENTE E ORGANIZADO LOGICAMENTE EM ÁRVORE.

OS CLUSTERS SEPARADOS SÃO USADOS PARA ARMAZENAR OS OBJETOS E AS ASSOCIAÇÕES, E EM CACHE NA RAM E MEMÓRIA FLASH

ESSA SEPARAÇÃO PERMITE ESCALAR CADA TIPO DE CLUSTER INDEPENDENTEMENTE

IMPLEMENTAÇÃO

- REQUISIÇÕES DOS CLIENTS

- TAO ORQUESTRA A CONSISTÊNCIA NOS CLUSTERS

- CONTINUA PERSISTINDO OS DADOS NO MYSQL

- MIGRAR OU CLONAR PARA SERVERS NO MESMO CLUSTER

- IGUALAR O CARREGAMENTO

- AMENIZAR PICOS DE CARGA

CONSISTÊNCIA

CONSISTÊNCIA

- TEOREMA CAP

- NÃO PODEM FICAR OFFLINE

- NÃO SACRIFICAM A DISPONIBILIDADE NO CAP

- PREJUDICAM A CONSISTÊNCIA

- SEMPRE ACEITA ESCRITAS, SINCRONIZA DEPOIS

- EX: AMAZON DYNAMO, CASSANDRA, RIAK, ...

CONSISTÊNCIA

- SLAVES NÃO PODEM ATUALIZAR DADOS

- REDIRECIONA AS ESCRITAS PARA O MASTER

- CONSISTÊNCIA READ-AFTER-WRITE

- TROCA DO MASTER

WORKLOAD

EXPERIMENTO: AMOSTRA DE 6,5 MILHÕES DURANTE UM PERÍODO DE 40 DIAS

  • LEITURAS SÃO MUITO MAIS FREQUENTES QUE ESCRITAS

 

  • MAIORIA DAS QUERIES DE ASSOCIAÇÕES TEM RESULTADOS VAZIOS

OBRIGADO!

CRISTIANO SANTOS

TÉRCIO SOUZA

TAO - The power of the graph

By cristianossd

TAO - The power of the graph

MATA88 presentation

  • 654