conhecendo apache cassandra @movile

62
1 Conhecendo Apache Cassandra @Movile Eiti Kimura 2015

Upload: joao-paulo-eiti-kimura

Post on 06-Aug-2015

377 views

Category:

Technology


5 download

TRANSCRIPT

Page 1: Conhecendo Apache Cassandra  @Movile

1

Conhecendo Apache Cassandra

@Movile

Eiti Kimura 2015

Page 2: Conhecendo Apache Cassandra  @Movile

2

Quem sou eu… Cassandra MVP

Page 3: Conhecendo Apache Cassandra  @Movile

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

Page 4: Conhecendo Apache Cassandra  @Movile

4

A Movile cria apps para todas as plataformas móveis.

Page 5: Conhecendo Apache Cassandra  @Movile

5

Playkids

Page 6: Conhecendo Apache Cassandra  @Movile

6

IFood

Page 7: Conhecendo Apache Cassandra  @Movile

7

Apache CassandraO que é?Um pouco de História (NoSQL)Arquitetura Princípio de FuncionamentoFluxo de Leitura e EscritaModelo de Distribuição de Dados, Geo distribuiçãoModelo de dados, Demonstração CQLUm programa para acesso a dados em Java

Aplicação do CassandraRequisitos do serviçoArquitetura da PlataformaDicas de Uso

Sumário

Page 8: Conhecendo Apache Cassandra  @Movile

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]

Page 9: Conhecendo Apache Cassandra  @Movile

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.

Page 10: Conhecendo Apache Cassandra  @Movile

10

História

Page 11: Conhecendo Apache Cassandra  @Movile

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

Page 12: Conhecendo Apache Cassandra  @Movile

12

Herança do Dynamo

● Consistent Hash

● Protocolo Gossip

● Vector Clock

● Hinted Handoff

● Read repair

http://www.allthingsdistributed.com/files/amazon-dynamo-sosp2007.pdf

Page 13: Conhecendo Apache Cassandra  @Movile

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

Page 14: Conhecendo Apache Cassandra  @Movile

14

Cuidado!Não é SQL

Características Principais

Page 15: Conhecendo Apache Cassandra  @Movile

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)

Page 16: Conhecendo Apache Cassandra  @Movile

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

Page 17: Conhecendo Apache Cassandra  @Movile

17

Modelo Transacional

A C I Dtomicidade

oncistência

solamento

urabilidade

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)

Page 18: Conhecendo Apache Cassandra  @Movile

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)

Page 19: Conhecendo Apache Cassandra  @Movile

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

Page 20: Conhecendo Apache Cassandra  @Movile

20

Controle de Consistência

Escrita

Leitura

Page 21: Conhecendo Apache Cassandra  @Movile

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

Page 22: Conhecendo Apache Cassandra  @Movile

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)

Page 23: Conhecendo Apache Cassandra  @Movile

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

Page 24: Conhecendo Apache Cassandra  @Movile

24

Fluxo de Escrita (Write)

Page 25: Conhecendo Apache Cassandra  @Movile

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

Page 26: Conhecendo Apache Cassandra  @Movile

26

Page 27: Conhecendo Apache Cassandra  @Movile

27

Fluxo de Leitura (Read)

Page 28: Conhecendo Apache Cassandra  @Movile

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

Page 29: Conhecendo Apache Cassandra  @Movile

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

Page 30: Conhecendo Apache Cassandra  @Movile

30

Sem Distribuição Geográfica de Informação

Page 31: Conhecendo Apache Cassandra  @Movile

31

Com Distribuição Geográfica de Informação

Page 32: Conhecendo Apache Cassandra  @Movile

32

INTRODUÇÃO AO MODELO DE DADOS

Page 33: Conhecendo Apache Cassandra  @Movile

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).

Page 34: Conhecendo Apache Cassandra  @Movile

34

Introdução: Modelo de Dados

Modelo Relacional

DadosAPLICAÇÃO

MODELO

DADOS

Page 35: Conhecendo Apache Cassandra  @Movile

35

Modelo de Dados: Cassandra

Dados

MODELOS

DADOS

APLICAÇÃO

Page 36: Conhecendo Apache Cassandra  @Movile

36

Page 37: Conhecendo Apache Cassandra  @Movile

37

Introdução ao Modelo de Dados

Page 38: Conhecendo Apache Cassandra  @Movile

38

Exemplo: Serviço de Música

Page 39: Conhecendo Apache Cassandra  @Movile

39

Exemplo: Serviço de Música

Identificar Padrões de Acesso

Page 40: Conhecendo Apache Cassandra  @Movile

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!

Page 41: Conhecendo Apache Cassandra  @Movile

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.

Page 42: Conhecendo Apache Cassandra  @Movile

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

Page 43: Conhecendo Apache Cassandra  @Movile

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

Page 44: Conhecendo Apache Cassandra  @Movile

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

Page 45: Conhecendo Apache Cassandra  @Movile

45

CQL DEMO

Page 46: Conhecendo Apache Cassandra  @Movile

46

http://planetcassandra.org/tente-cassandra/

Page 47: Conhecendo Apache Cassandra  @Movile

47

http://planetcassandra.org/client-drivers-tools/

DataStax C# / .NET Client Driver for Apache CassandraA C# client driver for Apache Cassandra

DataStax Java Client Driver for Apache CassandraA Java client driver for Apache Cassandra. This driver works exclusively with CQL3

DataStax C++ Client Driver for Apache CassandraDataStax Python Driver for Apache CassandraDataStax Node.js Client Driver for Apache CassandraDataStax Ruby Client Driver for Apache CassandraDataStax PHP Client Driver for Apache Cassandra (Alpha)

Page 48: Conhecendo Apache Cassandra  @Movile

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 statusCluster: 'clusterName'--------------node1: UPnode3: UPnode2: UP

# ccm node1 status# ccm node1 stop# ccm node2 start

#ccm stop#ccm start

Page 49: Conhecendo Apache Cassandra  @Movile

49

https://github.com/eiti-kimura-movile/CassandraMusicService.git

Aplicação de Exemplo usando Java

JAVA DRIVER DEMO

Page 50: Conhecendo Apache Cassandra  @Movile

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)

Page 51: Conhecendo Apache Cassandra  @Movile

51

Caso de Uso Movile

Page 52: Conhecendo Apache Cassandra  @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

Page 53: Conhecendo Apache Cassandra  @Movile

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

Page 54: Conhecendo Apache Cassandra  @Movile

54

Arquitetura básica de serviço

Page 55: Conhecendo Apache Cassandra  @Movile

55

Arquitetura básica de serviço com alto uso

● Instâncias de serviços escaláveis● Alta disponibilidade

Page 56: Conhecendo Apache Cassandra  @Movile

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

Page 57: Conhecendo Apache Cassandra  @Movile

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

Page 58: Conhecendo Apache Cassandra  @Movile

58

Total de Operações por dia

tempo

num

. ope

raçõ

es

> 1,3 Billhões de Operações ao dia

Page 59: Conhecendo Apache Cassandra  @Movile

59http://techblog.netflix.com/2011/11/benchmarking-cassandra-scalability-on.html

Page 60: Conhecendo Apache Cassandra  @Movile

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

Page 61: Conhecendo Apache Cassandra  @Movile

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?

Page 62: Conhecendo Apache Cassandra  @Movile

62

[email protected]

@eitikimura

facebook.com/eiti.kimura

flickr.com/eitikimura

Perguntas

[email protected]://www.movile.com/pt/carreiras

eiti-kimura-movile

eitikimura