75
EVOLUINDO SISTEMAS DISTRIBUÍDOS 6 ANOS DE NoSQL DAS TRINCHEIRAS Eiti Kimura Fernando Gonçalves MAR 2016

EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

Embed Size (px)

Citation preview

Page 1: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

EVOLUINDO SISTEMAS DISTRIBUÍDOS6 ANOS DE NoSQL DAS TRINCHEIRAS

Eiti KimuraFernando GonçalvesMAR 2016

Page 2: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

QUEM SOMOS NÓS?

Page 3: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

• Arquiteto de software e Coordenador de TI na Movile• Apache Cassandra Developer 1.1 Certified (2013)• Apache Cassandra MVP (2014 e 2015)• Apache Cassandra Contributor (2015)• Cassandra Summit Speaker (2014 e 2015)

Eiti Kimura

eitikimura

Page 4: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

• Desenvolvedor na Movile• Estudante de Ciência da Computação na Unicamp

Fernando Gonçalves

fhsgoncalves

Page 5: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

Sumário● INTRODUÇÃO

● CASOS DE USO

○ Plataforma de Tarifação e controle de assinaturas

○ Registro de dados de apps e envio de notificações push

● CONCLUSÃO

○ Problemas encontrados, lições aprendidas.

Page 6: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

LÍDER EM DESENVOLVIMENTO DE PLATAFORMAS DE COMÉRCIO E CONTEÚDO MÓVEL NA AMÉRICA LATINA

Page 7: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

A Movile é a empresa por trás das apps que fazem sua vida mais fácil!

Page 8: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

O Melhor conteúdo para Crianças

Page 9: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

Líder em delivery de comida no Brasil

Page 10: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

A empresa registrou um crescimento anual de 80% nos últimos 6 anos.

80%

Page 11: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

INTRODUÇÃO

Page 12: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de
Page 13: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

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 14: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de
Page 15: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de
Page 16: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de
Page 17: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

Controle de Assinaturas e Tarifações

• Composto de uma API de serviço;

• Responsável pelo gerenciamento de assinaturas de usuários;

• Cobrança dos usuários nas operadoras;

O serviço não pode parar de forma alguma e deve ser muito rápido.

Page 18: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

A plataforma em números

105M de assinaturas

76,3M de usuários únicos

145M de transações ao dia

Page 19: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

Linha e evolutiva da Plataforma (SBS)

2008

Banco relacional puro

2009

Apache Cassandra (v0.5)

2011

Remodelagem de dados com

4 nós no cluster

Cluster da versão 1.0 para 1.2

2013

Cluster upgrade da versão

0.7 para 1.0

Expansão de 4 para 6 nós

2014

Novo indice de dados para assinaturas

2015

Expansão do cluster para 10 nós

Page 20: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

ARQUITETURA V1

API

DB

API APIAPI API

Engine

Engine Engine

Page 21: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

Desvantagens da Arquitetura

• Ponto único de falha

• Tempos de resposta lentos

• Downtimes frequentes

• Caro e difícil para escalar

Escalar uma plataforma sem escalar as dependências externas resulta em falha.

Page 22: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

ARQUITETURA V2

APIAPI

Engine

Engine

DB

Regular SQLQueries

APIAPI

Page 23: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

Benefícios da nova solução

❏ Problemas de desempenho: OK;

❏ Problemas de disponibilidade: OK;

❏ Ponto único de falha: Parcialmente Resolvido;

❏ Aumento significante no throughput de leitura e escrita;

Page 24: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

ARQUITETURA V2 Ponto Fraco

Engine

Engine

DB

SQL Queries

Page 25: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

QUAIS SÃO OS PROBLEMAS?

Page 26: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

Problemas na Arquitetura

Com o aumento da concorrência ocorre degradação de desempenho nas operações com o banco de dados relacional.

Consultas ao banco relacional podem consumir tempo

Continua com impacto na escalabilidade

Page 27: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

Proposta de Evolução

➔ Extrair dados do Apache Cassandra ao invés do banco relacional;

➔ Sem ponto único de falha;

➔ Melhoria de desempenho, porém mais trabalho filtrando a informação;

Page 28: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de
Page 29: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

BACKEND SERVICE

Page 30: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

KIWI - BACKEND SERVICE

Foco em smartphones

Alta performance Alta disponibilidade

Analytics

Engajamento de usuário

Notificações por Push

Page 31: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

40MTotal de instalações de apps

450MTotal de notificações push enviadas

Análise de dadosAlguns dados do Kiwi em 2015

20MTotal de configurações de usuários

Page 32: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

NOSSO DESAFIONotificação por push

iOS ANDROID

Page 33: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

ARQUITETURA V1

SQL

Page 34: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

ARQUITETURA V2

Amazon SQS

DynamoDB

Consumidor

SQL

Page 35: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

Publicador #1

Publicador #2

Publicador #3

Limite de vazão alcançado

APNS

GCM

SQL

ARQUITETURA V2 Push Notification

Page 36: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

Problemas na Arquitetura

$$ Custos altos

Vazão de leitura muito baixaDynamoDB

Vazão de leitura atingidaSQL

Page 37: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

Lentidão no envio de Notificações por Push

Page 38: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

ARQUITETURA V3 Push Notification

Publicador #1

Publicador #2

Publicador #3

APNS

GCMCassandra v2.1

Page 39: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

Mudanças no modelo

➔ Amazon DynamoDB◆ Objeto serializado com Avro◆ Poucas colunas

➔ Apache Cassandra ◆ Objeto explodido◆ Mais de 80 colunas sem serialização

Page 40: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

US$ 10.825,00/mês

Vazão de leitura = ~ 12.000/s

PRÉ MIGRAÇÃO

Custo total da solução

Resultados

DynamoDB

+SQL

Page 41: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

Resultados

US$ 2.580,00/mês

Vazão de leitura = ~ 200.000/s

PÓS MIGRAÇÃO

(8 nós c3.2xlarge)

77% DE ECONOMIA

17x VazãoCusto total da nova solução

Page 42: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

Lições Aprendidas

O que deu errado

Page 43: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

COLLECTIONS

Page 44: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

Introdução a collections

map<type1, type2>

set<type1>

list<type1>Problema com

tombstones

http://bit.ly/cassandra-tombstones

Page 45: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

Introdução a atualização de dados no Cassandra

sstables tombstones repair

Page 46: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

Número de sstables antes do repair

# de arquivos sstable

Horário

Page 47: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

Durante o repair

Horário

# de arquivos sstable

Page 48: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

Alteração do tipo de dados

Usando Collections Usando blob

cqlsh:test> CREATE TABLE teste_com_mapa( ... id int, ... mapa map<text, text> , ... PRIMARY KEY (id) );

cqlsh:test> CREATE TABLE teste_sem_mapa( ... id int, ... mapa blob, ... PRIMARY KEY (id) );

Page 49: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

Repair usando blob ao invés de map

Horário

# de arquivos sstable

Page 50: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

MANUTENÇÃO DO CLUSTER

Page 51: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

Sobre adição de nós (Cassandra v2.1)

PARA NÃO PERDER DADOS:

1. Não adicionar em paralelo (ESPERAR BALANCEAR)

2. Rodar repair a cada adição

3. Consulte o procedimento no manual.

Page 52: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

Quando esquecemos de rodar repair

Horário

Tempo de respostapara leitura (ms)

Page 53: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

Lembre-se sempre...

AUTOMATIZAR

MONITORAR

Page 54: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

HINTED HANDOFF

Page 55: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

Hinted Handoffhttp://bit.ly/cassandra-hinted-handoff

Page 56: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

Hinted Handoff

ERROR [HintedHandoff:1] 2015-08-31 18:31:55,600 CassandraDaemon.java:182 - Exception in thread Thread

[HintedHandoff:1,1,main]

java.lang.IndexOutOfBoundsException: null

at java.nio.Buffer.checkIndex(Buffer.java:538) ~[na:1.7.0_79]

at java.nio.HeapByteBuffer.getLong(HeapByteBuffer.java:410) ~[na:1.7.0_79]

at org.apache.cassandra.utils.UUIDGen.getUUID(UUIDGen.java:106) ~[apache-cassandra-2.2.0.jar:2.2.0]

at org.apache.cassandra.db.HintedHandOffManager.scheduleAllDeliveries(HintedHandOffManager.java:515)

~[apache-cassandra-2.2.0.jar:2.2.0]

at org.apache.cassandra.db.HintedHandOffManager.access$000(HintedHandOffManager.java:88) ~[apache-

cassandra-2.2.0.jar:2.2.0]

at org.apache.cassandra.db.HintedHandOffManager$1.run(HintedHandOffManager.java:168) ~[apache-

cassandra-2.2.0.jar:2.2.0]

at org.apache.cassandra.concurrent.DebuggableScheduledThreadPoolExecutor$UncomplainingRunnable.run

(DebuggableScheduledThreadPoolExecutor.java:118) ~[apache-cassandra-2.2.0.jar:2.2.0]

at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [na:1.7.0_79]

at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304) [na:1.7.0_79]

at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThread)

CASSANDRA-10233 - IndexOutOfBoundsException in HintedHandOffManagerCASSANDRA-10485 - Missing host ID on hinted handoff write

Page 57: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

Hinted Handoff

cqlsh:system> SELECT target_id,hint_id,message_version FROM hints LIMIT 5;

target_id | hint_id | msg_version

--------------------------------------+--------------------------------------+------------

| 2f5e0320-62d3-11e5-877e-77558ae77cc8 | 8

72888e32-dae5-41cd-a033-3c5871a3e045 | fad152f0-662a-11e5-89ed-77558ae77cc8 | 8

72888e32-dae5-41cd-a033-3c5871a3e045 | fad152f1-662a-11e5-89ed-77558ae77ac9 | 8

72888e32-dae5-41cd-a033-3c5871a3e045 | fb69e970-662a-11e5-89ed-77558ae77cd5 | 8

52868e32-dae5-41cd-b033-2b5871a3e032 | fb69e971-662a-11e5-89ed-77558ae77zc6 | 8

(5 rows)

Page 58: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

Hinted Handoff

- POSSÍVEIS CAUSAS -

# enable assertions. disabling this in production will give a modest performance benefit (around 5%).

JVM_OPTS="$JVM_OPTS -ea"

Problemas de bootstrap na adição de novos nós ao cluster

Page 59: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

Hinted Handoff

Correção de Emergência

Executar operação de 'truncate' na tabela de hintsAtualizar para versão >= 2.1.11

A versão 3.x não foi afetada pelo problema, pois a nova StorageEngine armazena os hints em arquivos e não mais na estrutura de

uma tabela do Cassandra.

Page 60: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

ULTRA WIDE ROW(ANTI-PATTERN)

Page 61: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

CREATE TABLE idx_config ( conf_id int, ref_id varchar, subs_key varchar, data varchar, last_charge timestamp, expiration timestamp, last_charge_at timestamp, status_id int, origin_id int, msg_balance int, master boolean, enabled boolean, PRIMARY KEY ((conf_id, ref_id), subs_key));

Estrutura de dados utilizada (CQL)

Chave primária

Dados da assinatura desnormalizados

Chave de partição

Page 62: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

Limites Lógicos

Page 63: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

Cassandra 1.2

ERROR [CompactionExecutor:6523] 2015-10-09 12:33:23,551CassandraDaemon.java (line 191) Exception in threadThread[CompactionExecutor:6523,1,main]java.lang.AssertionError: incorrect row data size 3758096384 written to/movile/cassandra-data/SBSPlatform/idx_config/SBSPlatform-idx_config-tmp-ic-715-Data.db; at org.apache.cassandra.io.sstable.SSTableWriter.append(SSTableWriter.java:162) at org.apache.cassandra.db.compaction.CompactionTask.runWith(CompactionTask.java:162) at org.apache.cassandra.io.util.DiskAwareRunnable.runMayThrow(DiskAwareRunnable.java:48) at org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:28)

+3GB em 1 linha

Page 64: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

Limites Físicos de Partição

Cassandra 2.0 ou Anterior

● ~ 100MB ou menos / partição;● ~ 100k valores (colunas na linha).

Cassandra 2.1+

● Algumas centenas de MB por partição;● Milhões de valores (colunas por partição).

Page 65: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

DS220 Data Modeling

Datastax Academy

GRATUITO

http://bit.ly/cassandra-ds220

Page 66: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

CLIENT SIDE JOINS(ANTI-PATTERN)

Page 67: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

Modelo v1 Cópia do modelo relacional

Page 68: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

Modelo v1 Client Side Joins

Page 69: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

Modelo v2 Desnormalização

Page 70: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de
Page 71: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

NÃO COMETA OS MESMOS ERROS

Page 72: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

❏ Evitar Collections do Cassandra;

❏ Adição de nós em paralelo;

❏ Problemas no HintedHandOff;

❏ Client Side Joins (anti-pattern) - Copiar banco relacional;

❏ Ultra wide row (anti-pattern);

❏ Não verificar limites da ferramenta (lógicos e físicos).

O que não fazer

Page 73: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

E isso é tudo, pessoal!

Page 74: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

MUITO OBRIGADO!

eitikimura eiti-kimura-movile [email protected]

fhsgoncalves fhsgoncalves [email protected]

Design by Tiago Cardoso, thanks

Page 75: EVOLUINDO SISTEMAS - qconsp.com · • Cobrança dos usuários nas operadoras; O serviço não pode parar de forma alguma e deve ser muito rápido. A plataforma em números 105M de

Links de Referência:

Al Tobey Cassandra 2.1 Tuning Guide https://tobert.github.io/pages/als-cassandra-21-tuning-guide.html

Academia Datastax: Modelagem de dadoshttps://academy.datastax.com/courses/ds220-data-modeling

Cassandra, lists, and tombstoneshttp://bit.ly/1MwGuGT

How to drop and recreate a table in Cassandra versions older than 2.1http://bit.ly/1R481LO