78
Distribuição de dados em escala global com Cassandra Mário Sérgio Coelho Marroquim [email protected] http://blogdomariomarroquim.wordpress.com

Distribuição de Dados em Escala Global com Cassandra

Embed Size (px)

DESCRIPTION

Apresentação do artigo para conclusão da minha Especialização em Banco de Dados, no IFPI, em 2012

Citation preview

Page 1: Distribuição de Dados em Escala Global com Cassandra

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

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

Web 2.0 :)Web 2.0 :)

Page 4: Distribuição de Dados em Escala Global com Cassandra

Big Data

Page 5: Distribuição de Dados em Escala Global com Cassandra

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

Múltiplos servidores!

SOLUÇÃO

Page 7: Distribuição de Dados em Escala Global com Cassandra

Múltiplos data centers!

SOLUÇÃO

Page 8: Distribuição de Dados em Escala Global com Cassandra

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

A rede VAI falhar

Page 10: Distribuição de Dados em Escala Global com Cassandra

Os nós VÃO falhar

Page 11: Distribuição de Dados em Escala Global com Cassandra

EscalabilidadeDisponibilidade

ConsistênciaPerformance

Page 12: Distribuição de Dados em Escala Global com Cassandra

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

2-phase commit

SERVIDORES

COORDENADOR

Page 14: Distribuição de Dados em Escala Global com Cassandra
Page 15: Distribuição de Dados em Escala Global com Cassandra

Banco NoSQLFeito em Java

Criado em 2008

Page 16: Distribuição de Dados em Escala Global com Cassandra

ACIDPROBLEMA

Page 17: Distribuição de Dados em Escala Global com Cassandra

CAPConsistência | Disponibilidade | Tolerância

SOLUÇÃO

Page 18: Distribuição de Dados em Escala Global com Cassandra
Page 19: Distribuição de Dados em Escala Global com Cassandra

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

Modelo de dados

Page 21: Distribuição de Dados em Escala Global com Cassandra

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

Coluna

Page 23: Distribuição de Dados em Escala Global com Cassandra

Super Coluna

Page 24: Distribuição de Dados em Escala Global com Cassandra

Família de Colunas

Page 25: Distribuição de Dados em Escala Global com Cassandra

Família de Super Colunas

Page 26: Distribuição de Dados em Escala Global com Cassandra

Família de Super Colunas

keys

pace

Page 27: Distribuição de Dados em Escala Global com Cassandra

Arquitetura Distribuída

Page 28: Distribuição de Dados em Escala Global com Cassandra

Baseada noDynamo

* Amazon *

Page 29: Distribuição de Dados em Escala Global com Cassandra

Redes P2P

Page 30: Distribuição de Dados em Escala Global com Cassandra

Redes P2P

DESCENTRALIZADO

Page 31: Distribuição de Dados em Escala Global com Cassandra

Gossip / Scuttlebutt

Page 32: Distribuição de Dados em Escala Global com Cassandra

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

Gossip / Scuttlebutt

INTELIGENTE

Page 34: Distribuição de Dados em Escala Global com Cassandra

Distributed Hash Tables

Page 35: Distribuição de Dados em Escala Global com Cassandra

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

Consistent Hashing

Page 37: Distribuição de Dados em Escala Global com Cassandra

Consistent Hashing

Page 38: Distribuição de Dados em Escala Global com Cassandra

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

Particionamento

Page 40: Distribuição de Dados em Escala Global com Cassandra

VOCÊ JÁ SABE!

Particionamento

Page 41: Distribuição de Dados em Escala Global com Cassandra

Replicação

Page 42: Distribuição de Dados em Escala Global com Cassandra

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

Replicação

Page 44: Distribuição de Dados em Escala Global com Cassandra

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

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

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

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

Escrita e Leitura

Page 49: Distribuição de Dados em Escala Global com Cassandra

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

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

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

R + W > NMaior consistência

Escrita e Leitura

Page 53: Distribuição de Dados em Escala Global com Cassandra

W = 1Escritas nunca irão falhar

Escrita e Leitura

Page 54: Distribuição de Dados em Escala Global com Cassandra

R e W altosMaior consistência, menor performance

Escrita e Leitura

Page 55: Distribuição de Dados em Escala Global com Cassandra

N altoMaior durabilidade, boa performance

Escrita e Leitura

Page 56: Distribuição de Dados em Escala Global com Cassandra

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

Deleção distribuída

Page 58: Distribuição de Dados em Escala Global com Cassandra

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

Detecção e correção de conflitos / falhas

Page 60: Distribuição de Dados em Escala Global com Cassandra

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

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

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

Protocolo anti-entropia

Nó #1, Chave 13 Nó #2, Chave 13

Page 64: Distribuição de Dados em Escala Global com Cassandra

Estudo de caso

Page 65: Distribuição de Dados em Escala Global com Cassandra

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

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

Configuração do cluster

Page 68: Distribuição de Dados em Escala Global com Cassandra

Configuração do cluster

Page 69: Distribuição de Dados em Escala Global com Cassandra

Configuração do cluster

Page 70: Distribuição de Dados em Escala Global com Cassandra

Configuração do cluster

Page 71: Distribuição de Dados em Escala Global com Cassandra

Configuração do cluster

Page 72: Distribuição de Dados em Escala Global com Cassandra

Resultados obtidos

Os 2 nós respondem normalmente às requisições

Page 73: Distribuição de Dados em Escala Global com Cassandra

Resultados obtidos

Após a queda do segundo nó, a velocidade diminui

Page 74: Distribuição de Dados em Escala Global com Cassandra

Resultados obtidos

Após a volta do segundo nó, a velocidade inicial é retomada

Page 75: Distribuição de Dados em Escala Global com Cassandra

Conclusões

Page 76: Distribuição de Dados em Escala Global com Cassandra

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

Dúvidas?

Page 78: Distribuição de Dados em Escala Global com Cassandra

Distribuição de dados em escala global com

CassandraMário Sérgio Coelho Marroquim

[email protected]://blogdomariomarroquim.wordpress.com