O documento apresenta uma introdução ao banco de dados Apache Cassandra. Explica o que é Cassandra, sua arquitetura, modelo de dados e como funciona. Também fornece exemplos de uso no serviço de assinaturas da Movile e dicas para aplicação do Cassandra.
3. 3
Mais de 20 milhões de pessoas usando nossos
serviços todo mês.
A Movile é líder em desenvolvimento de
plataformas de comércio e conteúdo móvel na
América Latina. Com produtos para celulares,
smartphones e tablets, nosso trabalho deixa a
vida das pessoas melhor e mais divertida
Movile
7. 7
Apache Cassandra
O que é?
Um pouco de História (NoSQL)
Arquitetura
Princípio de Funcionamento
Fluxo de Leitura e Escrita
Modelo de Distribuição de Dados, Geo distribuição
Modelo de dados, Demonstração CQL
Um programa para acesso a dados em Java
Aplicação do Cassandra
Requisitos do serviço
Arquitetura da Plataforma
Dicas de Uso
Sumário
8. 8
O que é?
“Apache Cassandra é um banco de dados não
relacional (nosql) orientado a colunas,
distribuído, escalável, de alta disponibilidade,
tolerante a falhas”
[The Definitive Guide, Eben Hewitt, 2010]
9. 9
NoSQL
NoSQL "Not Only SQL" são bancos de dados não relacionais que
não se baseiam diretamente no SQL, a linguagem mais comum
dos bancos de dados relacionais.
Em geral não suportam operações de junções de dados (joins)
NoSQL armazenam os dados com técnicas que visam atender a
requisitos de escalabilidade.
É importante entender que o intuito não é eliminar bancos de
dados relacionais, mas oferecer uma alternativa.
11. 11
Herança do BigTable
● Modelo de dados colunar
● Armazenamento em SSTable
● MemTable (buffer e ordenação)
● Arquivos SSTable imutáveis
● Compactação de dados
http://pt.slideshare.net/geminimobile/bigtable-4820829
13. 13
Arquitetura e Funcionamento Teorema CAP
Cassandra tem
maior foco em
disponibilidade e
particionamento.
O teorema indica que é possível obter somente duas dessas propriedades
15. 15
Descentralizado
Tolerante a falhas, sem ponto único central de controle,
não existe um nó “master”
Utiliza o Protocolo Peer-to-Peer (ao invés do modelo
master/slave)
16. 16
Escalabilidade Elástica
A taxa de transferência (throughput) de operações de
leitura e escrita aumenta linearmente a medida que
novas máquinas são adicionadas
17. 17
Modelo Transacional
A C I D
t
o
m
i
c
i
d
a
d
e
o
n
c
i
s
t
ê
n
c
i
a
s
o
l
a
m
e
n
t
o
u
r
a
b
i
l
i
d
a
d
e
Cassandra não usa
transações ACID com nos
RDBMS com rollback ou
mecanismos de lock.
Oference controle de
atomicidade e isolamento
no contexto de linha (row-
level)
18. 18
Cassandra: Atomicidade
Escrita é atômica no contexto da partição (row).
Atualização ou Inserção de colunas são tratadas como
uma operação de write.
Utiliza timestamps para determinar o valor mais
atualizado de uma coluna (Last Wins)
19. 19
Cassandra: Consistência
A consistência e disponibilidade podem ser ajustadas
(tunable) e podem ser fortes, conforme o teorema CAP.
Não há lock ou consistência transacional quando
múltiplas linhas ou tabelas são alteradas
concorrentemente. O ajuste da consistência e
disponibilidade oferece a possibilidade de tolerância a
partição.
Cassandra >= 2.0, micro transações (lighweight
transactions) use em menos de 1% de suas transações
21. 21
Cassandra: Isolamento
Full row-level isolation: Escrita a uma linha é totalmente
isolada ao cliente que está executando a escrita e não é
visível a nenhum outro cliente até que a operação
complete
22. 22
Cassandra: Durabilidade
As escritas são duráveis: Todas as escritas aos nós são
registrados em memória e em disco antes de retornar
como uma operação completa (acknowledge)
23. 23
Consistência Eventual
● Consistência Eventual: a
consistência ocorrerá ao
longo do tempo, e
eventualmente todos os
clientes acessarão a mesma
informação em um dado
instante.
● Forma de consistência
propagada. Ex.: DNS
25. 25
Distribuição dos dados (Consistent Hash)
Consistent Hash permite distribuir a informação pelos nós do
cluster minimizando a reorganização caso um nó seja adicionado
ou removido.
Cassandra atribui um valor hash para cada chave de partição
28. 28
O que é um cluster Cassandra?
Conjunto Ponto-a-Ponto de Nós
● Node: uma instância de Cassandra
● Rack: conjunto lógico de nós
● Datacenter: conjunto lógico de racks
● Cluster: conjunto total de nós que mapeiam um token-ring completo
29. 29
Arquitetura e Funcionamento
Fluxo de Dados
1. A escrita/leitura pode
ocorrer em qualquer nó
2. O coordenador
replica/obtém a
informação para/de
diferentes nós e zonas
3. Coordenador retorna
o ACK para o cliente
4. Cliente pode escolher
por esperar a
confirmação de um nó,
um grupo de nós
(quorum) ou todos os
nós do cluster antes de
receber o ACK
33. 33
Cassandra: Modelagem de Dados
Modelagem de dados é um processo que envolve a
identificação de entidades, ou itens para serem armazenados,
assim como o relacionamento entre essas entidades.
Adicionalmente envolve a identificação de padrões de acesso
aos dados e consultas que serão realizadas.
No Cassandra as consultas são a chave para organização dos
dados (query-driven). Por ser um banco distribuído, eficiência
de escrita e leitura é obtida quando os dados estão agrupados
em um mesmo nó (partição).
40. 40
Exemplo: Serviço de Música
Atenção: Diferentemente dos banco de dados relacionais, onde
a modelagem está baseada no relacionamento entre as
entidades, no Cassandra, temos uma tabela por consulta,
replicando os dados ao longo das tabelas envolvidas, processo
conhecido como desnormalização!
41. 41
CQL
● Cassandra Query Language, é a linguagem de acesso aos
dados do Cassandra.
● CQL v3 oferece um modelo muito próximo ao SQL no tocante
ao armazenamento de dados em forma de tabelas que
contém linhas e colunas.
● Não existe operações de junção (joins) entre tabelas, não
existe integridade referencial, não existe chave estrangeira,
não possui locks ou transações como nos bancos de dados
relacionais.
42. 42
CQL
● Particionamento de dados por chave
● Tipos de dados complexos (objeto do usuário)
● Tipo de dados multi-valorados
○ Set
○ List
○ Map
● Colunas do tipo contador
43. 43
CQL: Estrutura de armazenamento de dados
Column
Name
... Column
Name
Column Value ... Column Value
Timestamp ... Timestamp
TTL ... TTL
Row Key
2 billhões
● Modelo trazido do Bigtable do Google *
● Uma chave (row key) e muitas colunas
● Colunas de controle: Timestamp, TTL
● Nome da coluna ordenado (UTF8, Int, Timestamp, etc...)
* http://research.google.com/archive/bigtable.html
44. 44
CQL Exemplo
CREATE TABLE emp (
empID int,
deptID int,
first_name varchar,
last_name varchar,
PRIMARY KEY (empID, deptID)
);
Definição do
nome da tabela
Definição do
nome e tipo da
coluna
Campos que
compõe a chave
primária e
particionamento
47. 47
http://planetcassandra.org/client-drivers-tools/
DataStax C# / .NET Client Driver for Apache Cassandra
A C# client driver for Apache Cassandra
DataStax Java Client Driver for Apache Cassandra
A Java client driver for Apache Cassandra. This driver
works exclusively with CQL3
DataStax C++ Client Driver for Apache Cassandra
DataStax Python Driver for Apache Cassandra
DataStax Node.js Client Driver for Apache Cassandra
DataStax Ruby Client Driver for Apache Cassandra
DataStax PHP Client Driver for Apache Cassandra (Alpha)
48. 48
https://github.com/pcmanus/ccm
Cassandra Cluster Manager: bilbioteca/script para criar,
implantar e remover um cluster de Apache Cassandra em sua
máquina local.
# ccm create -v 2.0.14 --nodes 3 --start clusterName
# ccm status
Cluster: 'clusterName'
--------------
node1: UP
node3: UP
node2: UP
# ccm node1 status
# ccm node1 stop
# ccm node2 start
#ccm stop
#ccm start
50. 50
Modelagem de dados com Cassandra: Resumo
• Não tenha medo da desnormalização
• Desnormalizar: escritas são baratas, leituras mais
custosas, modele e organize seus dados no melhor
formato para recuperá-los
• Há várias formas de modelar uma solução, não
existe forma certa ou errada
• Modelagem guiada por consultas (Query)
52. 52
Subscription & Billing Platform a.k.a SBS
• API de serviço REST
• Responsável por gerenciar as assinaturas
dos usuários
• Efetua a cobrança dos usuários nas operadoras
• Renova as assinaturas dos usuários periodicamente
• Nunca pode parar
• Deve ter alto desempenho
53. 53
60,2 milhões de
assinaturas
50 request/s
★ subscribe
★ cancel
★ profile
Plataforma em números
95,5 milhões
transações com as
operadoras
55. 55
Arquitetura básica de serviço com alto uso
● Instâncias de serviços escaláveis
● Alta disponibilidade
56. 56
Arquitetura básica de serviço com carga Intensa
● Tempo de resposta
muito alto
● Capacidade de
processamento
(throughput) reduzida
● Baixa disponibilidade,
ponto único de falha
● Pior que parar é
funcionar algumas
vezes
57. 57
• Problemas de
desempenho
resolvidos
• Melhora de
disponibilidade
• Não existe mais
ponto único de falha
•Aumento da
capacidade de
processamento de
transações
C*
Solução Distribuída
58. 58
Total de Operações por dia
tempo
num.operações
> 1,3 Billhões de Operações ao dia
60. 60
# Dicas
Dica 1#: usar quando a disponibilidade é um fator
importante, onde exista um alto volume de dados, com
número grande de operações de escrita.
Dica 2#: entenda os requisitos da aplicação, identifique os
padrões de acesso a informação.
Dica #3: pense em desnormalização de dados, mas com
cuidado…
Dica #4: usar quando desempenho é um fator importante
para a aplicação
61. 61
● Bom desempenho de leitura
● Excelente desempenho em escrita
● Throughput de leitura e escrita altamente escalável
● Suporta geo-distribuição de informação
● Tolerante a falhas
● Controle fino do nível de consistência por cliente
● Integridade de dados com checks e repairs
● Queremos: FOSS (Free and Open Source Software) +
Suporte
Porque Cassandra?