1
Conhecendo
Apache Cassandra
@Movile
Eiti Kimura 2015
2
Quem sou eu… Cassandra MVP
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
4
A Movile cria apps para todas as
plataformas móveis.
5
Playkids
6
IFood
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
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
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.
10
História
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
12
Herança do Dynamo
● Consistent Hash
● Protocolo Gossip
● Vector Clock
● Hinted Handoff
● Read repair
http://www.allthingsdistributed.com/files/amazon-dynamo-sosp2007.pdf
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
14
Cuidado!
Não é SQL
Características Principais
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
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
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
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
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
20
Controle de Consistência
Escrita
Leitura
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
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
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
24
Fluxo de Escrita (Write)
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
26
27
Fluxo de Leitura (Read)
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
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
30
Sem Distribuição Geográfica de Informação
31
Com Distribuição Geográfica de Informação
32
INTRODUÇÃO AO MODELO DE DADOS
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).
34
Introdução: Modelo de Dados
Modelo Relacional
Dados
APLICAÇÃO
MODELO
DADOS
35
Modelo de Dados: Cassandra
Dados
MODELOS
DADOS
APLICAÇÃO
36
37
Introdução ao Modelo de Dados
38
Exemplo: Serviço de Música
39
Exemplo: Serviço de Música
Identificar Padrões de Acesso
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
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
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
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
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
45
CQL DEMO
46
http://planetcassandra.org/tente-cassandra/
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
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
49
https://github.com/eiti-kimura-
movile/CassandraMusicService.git
Aplicação de Exemplo usando Java
JAVA DRIVER DEMO
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)
51
Caso de Uso Movile
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
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
54
Arquitetura básica de serviço
55
Arquitetura básica de serviço com alto uso
● Instâncias de serviços escaláveis
● Alta disponibilidade
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
• 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
Total de Operações por dia
tempo
num.operações
> 1,3 Billhões de Operações ao dia
59
http://techblog.netflix.com/2011/11/benchmarking-cassandra-scalability-on.html
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
● 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?
62
eiti.kimura@movile.com
@eitikimura
facebook.com/eiti.kimura
flickr.com/eitikimura
Perguntas
talentos@movile.com
http://www.movile.com/pt/carreiras
eiti-kimura-movile
eitikimura

Conhecendo Apache Cassandra @Movile

  • 1.
  • 2.
    2 Quem sou eu…Cassandra MVP
  • 3.
    3 Mais de 20milhõ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
  • 4.
    4 A Movile criaapps para todas as plataformas móveis.
  • 5.
  • 6.
  • 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 é? “ApacheCassandra é 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 OnlySQL" 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.
  • 10.
  • 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
  • 12.
    12 Herança do Dynamo ●Consistent Hash ● Protocolo Gossip ● Vector Clock ● Hinted Handoff ● Read repair http://www.allthingsdistributed.com/files/amazon-dynamo-sosp2007.pdf
  • 13.
    13 Arquitetura e FuncionamentoTeorema CAP Cassandra tem maior foco em disponibilidade e particionamento. O teorema indica que é possível obter somente duas dessas propriedades
  • 14.
  • 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 taxade 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 CI 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ênciae 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
  • 20.
  • 21.
    21 Cassandra: Isolamento Full row-levelisolation: 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 escritassã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ênciaEventual: 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
  • 24.
  • 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
  • 26.
  • 27.
  • 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 Fluxode 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
  • 30.
  • 31.
  • 32.
  • 33.
    33 Cassandra: Modelagem deDados 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).
  • 34.
    34 Introdução: Modelo deDados Modelo Relacional Dados APLICAÇÃO MODELO DADOS
  • 35.
    35 Modelo de Dados:Cassandra Dados MODELOS DADOS APLICAÇÃO
  • 36.
  • 37.
  • 38.
  • 39.
    39 Exemplo: Serviço deMúsica Identificar Padrões de Acesso
  • 40.
    40 Exemplo: Serviço deMú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 QueryLanguage, é 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 dedados 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 dearmazenamento 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 TABLEemp ( 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
  • 45.
  • 46.
  • 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
  • 49.
  • 50.
    50 Modelagem de dadoscom 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)
  • 51.
  • 52.
    52 Subscription & BillingPlatform 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 50request/s ★ subscribe ★ cancel ★ profile Plataforma em números 95,5 milhões transações com as operadoras
  • 54.
  • 55.
    55 Arquitetura básica deserviço com alto uso ● Instâncias de serviços escaláveis ● Alta disponibilidade
  • 56.
    56 Arquitetura básica deserviç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çõespor dia tempo num.operações > 1,3 Billhões de Operações ao dia
  • 59.
  • 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 desempenhode 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?
  • 62.