![Page 1: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/1.jpg)
Distribuição de dados em escala global com
CassandraMário Sérgio Coelho Marroquim
[email protected]://blogdomariomarroquim.wordpress.com
![Page 2: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/2.jpg)
Sumário
● A Web 2.0, o Big Data e as bases relacionais● O Casssandra● Modelo de dados, BigTable● Arquitetura distribuída, Dynamo
- Redes P2P, Gossip / Scuttlebut- Distributed Hash Tables, hash consistente- Distribuição, escrita, leitura e deleção de dados- Detecção e correção de conflitos / falhas
● Estudo de caso● Conclusões
![Page 3: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/3.jpg)
Web 2.0 :)Web 2.0 :)
![Page 4: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/4.jpg)
Big Data
![Page 5: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/5.jpg)
Facebook: 845 mi de usuários
Twitter: 140 mi de tweets por dia
PROBLEMA
![Page 6: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/6.jpg)
Múltiplos servidores!
SOLUÇÃO
![Page 7: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/7.jpg)
Múltiplos data centers!
SOLUÇÃO
![Page 8: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/8.jpg)
Dist. de dados em escala global!
● Baixa latência da rede
● Melhor balanceamento de carga
● Alta disponibilidade do serviço
● Maior performance geral
● (...)
![Page 9: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/9.jpg)
A rede VAI falhar
![Page 10: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/10.jpg)
Os nós VÃO falhar
![Page 11: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/11.jpg)
EscalabilidadeDisponibilidade
ConsistênciaPerformance
![Page 12: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/12.jpg)
Bases de dados relacionais
● Propriedades ACID- Atomicidade- Consistência- Isolamento- Durabilidade
● Normalizações● 2-phase commit / 2-phase locking
- Baixa performance- Deadlocks
PROBLEMA
![Page 13: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/13.jpg)
2-phase commit
SERVIDORES
COORDENADOR
![Page 14: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/14.jpg)
![Page 15: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/15.jpg)
Banco NoSQLFeito em Java
Criado em 2008
![Page 16: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/16.jpg)
ACIDPROBLEMA
![Page 17: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/17.jpg)
CAPConsistência | Disponibilidade | Tolerância
SOLUÇÃO
![Page 18: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/18.jpg)
![Page 19: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/19.jpg)
Cassandra
● Permite configuração do balanço entre- Escalabilidade- Disponibilidade- Consistência / Durabilidade- Performance
- Tolerância a falhas na rede● Sem nó coordenador
- Sem SPOF: Single Point Of Failure
● Baixo custo, servidores convencionais
![Page 20: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/20.jpg)
Modelo de dados
![Page 21: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/21.jpg)
BigTable
● Criado pelo Google em 2004
● Sem tabelas ou relacionamentos
● É fácil de particionar e replicar
● Altamente escalável
● Baseado em colunas
![Page 22: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/22.jpg)
Coluna
![Page 23: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/23.jpg)
Super Coluna
![Page 24: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/24.jpg)
Família de Colunas
![Page 25: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/25.jpg)
Família de Super Colunas
![Page 26: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/26.jpg)
Família de Super Colunas
keys
pace
![Page 27: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/27.jpg)
Arquitetura Distribuída
![Page 28: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/28.jpg)
Baseada noDynamo
* Amazon *
![Page 29: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/29.jpg)
Redes P2P
![Page 30: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/30.jpg)
Redes P2P
DESCENTRALIZADO
![Page 31: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/31.jpg)
Gossip / Scuttlebutt
![Page 32: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/32.jpg)
Gossip / Scuttlebutt
● Cada nó conheçe ao menos outro nó
● Propagação epidêmica
● Remove a necessidade de um registro
centralizado de nós
● Scuttlebutt, menor uso de recursos
- Accrural Failure Detector
![Page 33: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/33.jpg)
Gossip / Scuttlebutt
INTELIGENTE
![Page 34: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/34.jpg)
Distributed Hash Tables
![Page 35: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/35.jpg)
Distributed Hash Table
● Consistent Hashing
- Cada nó é identificado por uma chave
- Estrutura circular de nós
- Cada linha possui uma chave
- Cada linha é alocada no próximo nó com
chave maior que a sua
![Page 36: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/36.jpg)
Consistent Hashing
![Page 37: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/37.jpg)
Consistent Hashing
![Page 38: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/38.jpg)
Consistent Hashing
● Provoca o particionamento das linhas
● Permite prever em qual nó está uma linha
● A remoção ou inclusão de nós afeta apenas
os seus nós vizinhos
![Page 39: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/39.jpg)
Particionamento
![Page 40: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/40.jpg)
VOCÊ JÁ SABE!
Particionamento
![Page 41: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/41.jpg)
Replicação
![Page 42: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/42.jpg)
Replicação
● Evita um ponto único de falha
● Dados são replicados em N - 1 nós- N = fator de replicação
● Estratégias específicas para- Apenas um hack- Todo um data center- Todo o cluster
● Assíncrona
![Page 43: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/43.jpg)
Replicação
![Page 44: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/44.jpg)
Simple StrategyDesconsidera hacks e datacenters
Considera apenas a distribuição circular dos nós no data center!
![Page 45: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/45.jpg)
Old Network Topology StrategyConsidera os hacks em um mesmo data center
Uma das réplicas é enviada para outro data center!
![Page 46: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/46.jpg)
Network Topology StrategyConsidera os hacks em todos os data center
Permite parametrização de detalhes para otimização da rep.
![Page 47: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/47.jpg)
Replicação
● Nenhum nó será responsável por mais
de N - 1 nós (Zookeeper)
● Aumenta a disponibilidade dos dados
● Aumenta a tolerância contra falhas
● Não prejudica a performance geral
![Page 48: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/48.jpg)
Escrita e Leitura
![Page 49: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/49.jpg)
Escrita e Leitura
● A partir de qualquer nó: descentralização
● Redirecionamento para o nó coordenador
- Protocolo Gossip, Consistent Hashing
● Balanço entre consistência e performance
- Configurável
- Consistência eventual
![Page 50: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/50.jpg)
RNúmero mínimo de nós que devem responder
de forma síncrona à uma operação de LEITURA
Escrita e Leitura
![Page 51: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/51.jpg)
WNúmero mínimo de nós que devem responder de
forma síncrona à uma operação de ESCRITA
Escrita e Leitura
![Page 52: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/52.jpg)
R + W > NMaior consistência
Escrita e Leitura
![Page 53: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/53.jpg)
W = 1Escritas nunca irão falhar
Escrita e Leitura
![Page 54: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/54.jpg)
R e W altosMaior consistência, menor performance
Escrita e Leitura
![Page 55: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/55.jpg)
N altoMaior durabilidade, boa performance
Escrita e Leitura
![Page 56: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/56.jpg)
Quorum, Local Quorum, Each Quorum
● Configuração por operação (leit. e escrita)
● Ao menos N / 2 + 1 réplicas síncronas
● Consideram hacks no mesmo data center e
em outros data centers!
![Page 57: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/57.jpg)
Deleção distribuída
![Page 58: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/58.jpg)
Deleção distribuída
● Impossibilidade de propagar deleções
● Adição (e propagação) de uma coluna
chamada tombstone
● Limpeza local em cada nó com o comando
nodetool repair
![Page 59: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/59.jpg)
Detecção e correção de conflitos / falhas
![Page 60: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/60.jpg)
Hinted Handoff
● Um nó substitui outro nó indisponível
● Temporário, sincronização posterior
● Baseado no protocolo Gossip
● Rápido, assíncrono
![Page 61: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/61.jpg)
Read Repair
● Sincronização de dados sob demanda
● Uso do campo timestamp
● Rápido, assíncrono
![Page 62: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/62.jpg)
Protocolo anti-entropia
● Baseado em Merkle Trees
● MD5 para cada chave, coluna e família
● Sincronização baseada em timestamp
● Lento, muito uso de CPU e disco
● Uso do comando nodetool repair
● Corrige o que o Read Repair não corrigiu!
![Page 63: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/63.jpg)
Protocolo anti-entropia
Nó #1, Chave 13 Nó #2, Chave 13
![Page 64: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/64.jpg)
Estudo de caso
![Page 65: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/65.jpg)
Projeto Cassandra Hits
● Cluster simples, 2 servidores
● Centenas de escritas e leituras
● Escalabilidade x Performance
https://github.com/mariomarroquim/cassandra-hits
![Page 66: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/66.jpg)
Ambiente de teste
● Processadores Intel Xeon 2Ghz, quadcore
● 2Gb de RAM em um servidor e 512Mb de
RAM no outro
● Ubuntu Server 10.04 e 10.10 instalados em
cada servidor, respectivamente
● Java 1.6.31 instalado em ambos
![Page 67: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/67.jpg)
Configuração do cluster
![Page 68: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/68.jpg)
Configuração do cluster
![Page 69: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/69.jpg)
Configuração do cluster
![Page 70: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/70.jpg)
Configuração do cluster
![Page 71: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/71.jpg)
Configuração do cluster
![Page 72: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/72.jpg)
Resultados obtidos
Os 2 nós respondem normalmente às requisições
![Page 73: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/73.jpg)
Resultados obtidos
Após a queda do segundo nó, a velocidade diminui
![Page 74: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/74.jpg)
Resultados obtidos
Após a volta do segundo nó, a velocidade inicial é retomada
![Page 75: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/75.jpg)
Conclusões
![Page 76: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/76.jpg)
Conclusões
● O Cassandra está preparado para os desafios
da Web 2.0 e do fenômeno do Big Data
● Balanço configurável entre escalabilidade,
disponibilidade, consistência e performance
● Escalabilidade incremental e linear
● Provado pelo mercado!
![Page 77: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/77.jpg)
Dúvidas?
![Page 78: Distribuição de Dados em Escala Global com Cassandra](https://reader034.vdocuments.pub/reader034/viewer/2022042505/559e60c01a28ab8d6d8b4611/html5/thumbnails/78.jpg)
Distribuição de dados em escala global com
CassandraMário Sérgio Coelho Marroquim
[email protected]://blogdomariomarroquim.wordpress.com