distribuição de dados em escala global com cassandra

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

Upload: mario-marroquim

Post on 09-Jul-2015

604 views

Category:

Technology


1 download

DESCRIPTION

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

TRANSCRIPT

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