estou seguro com no sql

42
Estou seguro com NoSQL? Rafael Redondo

Upload: rafael-redondo

Post on 04-Dec-2014

121 views

Category:

Software


0 download

DESCRIPTION

Demonstra a segurança de durabilidade de dados do NoSQL e faz um comparativo entre Cassandra, Redis e PostgreSQL

TRANSCRIPT

Page 1: Estou seguro com no sql

Estou seguro com NoSQL?

Rafael Redondo

Page 2: Estou seguro com no sql

O que falaremos

ACID(Atomicity, Consistency, Isolation, Durability)

+ backup

Page 3: Estou seguro com no sql

O que não falaremos

SQL X

NoSQL

Page 4: Estou seguro com no sql

O que não falaremos

BASE(Basically Available, Soft state, Eventual consistency)

CAP(Consistency, Availability, Partition tolerance)

Page 5: Estou seguro com no sql

Programação

• Durabilidade• Redis• Cassandra• Comparativo: Redis, Cassandra,

PostgreSQL

Page 6: Estou seguro com no sql

Durabilidade

“Garantir que os dados estarão disponíveis em definitivo.”

Page 7: Estou seguro com no sql

O SO e o Disco

CLIENT

MÍDIA FÍSICA

CACHES BUFFERS

CACHES BUFFERS

CONTROLADOR DE DISCO

BANCO DE DADOS

SOWRITE

FSYNC

Page 8: Estou seguro com no sql

Quando o dado está seguro?

CLIENT

MÍDIA FÍSICA

CACHES BUFFERS

CACHES BUFFERS

CONTROLADOR DE DISCO

BANCO DE DADOS

SOFALHA DE BD

QUEDA DE ENERGIA

Page 9: Estou seguro com no sql

WRITE vs FSYNC

xDesempenho

Usa Cache

Garantia

Usa Recursos

LINUX: 30 Segundos

Qual o requisito não-funcional mais importante?

Page 10: Estou seguro com no sql

Redis

Page 11: Estou seguro com no sql

Modos de persistência

• RDB (Redis Database), faz um snapshot da base em intervalos pré-determinados.

• AOF (Append of file), log com todas as operações.

• Nenhum, caso você queira que os dados estejam disponíveis apenas enquanto durar o processo.

• Ambos. Nesse caso, o Redis vai utilizar o AOF quando iniciar o processo para garantir que os dados estejam completos.

Page 12: Estou seguro com no sql

Vantagens do RDB

• Perfeito para back-up: arquivo único com representação completa da base.

• Ótima para recuperação de desastres: pode ser armazenado em datacenters externos.

• Maximiza a performance: roda em um processo filho, evitando que o processo principal faça I/O.

• Restart mais rápido em comparação com o AOF.

Page 13: Estou seguro com no sql

Desvantagens do RDB

• Se o seu snapshot por feito a cada 5 minutos e o Redis parar sem um shutdown normal, haverá perdas.

• Ainda que o snapshot rode em um processo filho, pode interferir no processo pai caso a base seja muito grande ou o CPU e o disco não sejam performáticos.

Page 14: Estou seguro com no sql

Vantagens do AOF

• Configurações: nunca, a cada segundo ou a cada query.

• Thread paralela ajuda a performance.• Log simples: não há problemas com arquivo

corrompido nem gravações randômicas. • Mesmo que o logs termine com um comando

pela metade por alguma razão (disco cheio, queda de energia), a ferramenta redis-check-aof permite fácil correção.

Page 15: Estou seguro com no sql

Vantagens do AOF

• Dados que surgem após o início da reescrita do AOF são gravados no arquivo antigo e também em uma fila na memória, para que esses dados sejam gravados no novo arquivo.

• O AOF contém o log de todas as operações, uma depois da outra, em um formato legível e editável.

• As reescritas são geradas usando operações de I/O sequenciais, tornando o processo eficiente mesmo em discos tradicionais.

Page 16: Estou seguro com no sql

Desvantagens do AOF

• São maiores que o RDB.• Dependendo da configuração da escrita do

AOF, pode interferir na performance do Redis.• Os comandos gerados não são imunes a bugs,

embora estes sejam raros.

Page 17: Estou seguro com no sql

RDB ou AOF?

• Ambos. caso você deseje que a segurança dos dados fique em um nível de um banco tradicional.

• Se você pode viver com a perda de alguns minutos de dados, use apenas o RDB.

• O Redis não deixa uma execução interferir na outra.

• Há planos a longo prazo para que AOF e RDB sejam unificados.

Page 18: Estou seguro com no sql

Backup

• Crie um job para criar snapshots RDB de hora em hora

• Renomeie os snapshots com data e hora.• Transfira o snapshot para um local fora do seu

data center.• Certifique-se que o tamanho do arquivo

transferido é igual ao do arquivo copiado.• Crie algum tipo de alerta caso o arquivo não

esteja sendo transferido.

Page 19: Estou seguro com no sql

Cassandra

Page 20: Estou seguro com no sql

Modos de persistência

• Replicação do mesmo dado em diversos nós.• Nós podem estar em datacenters ou regiões

diferentes.• Escolha do tipo de consistência para cada

operação.• Commitlog.• SSTable.• HintedHandoff

Page 21: Estou seguro com no sql

Commitlog

• A cada operação, primeiramente o commitlog é escrito de forma sequencial

• É similar ao AOF do Redis• A escrita sequencial é rápida, já que não perde

tempo varrendo o disco• Age como um log de recuperação de crash

para os dados• A escrita nunca será considerada se não tiver

ao menos gravada no commitlog

Page 22: Estou seguro com no sql

fsync

• periodic: joga o cache para o commitlog a cada periodo configurado no commitlog_sync_period_in_ms (default: 10000ms), sem travar novos writes

• batch: o Cassandra não aceita outras escritas para o cache até que seja feito o flush, dentro do período limite configurado em commitlog_sync_batch_window_in_ms.

Page 23: Estou seguro com no sql

fsync

• coloque o commitlog em outro drive para não disputar recursos de I/O com SSTable

• o dado não será perdido uma vez que esteja no arquivo do commitlog

• o Cassandra roda o commitlog após o restart do sistema para recuperar dados que possam ter sido perdidos

Page 24: Estou seguro com no sql

memtable

• Depois do commitlog, o Cassandra escreve o dado na memtable

• Memtable é um cache na memória com os dados no formato chave/coluna

• É classificada por chave• Cada ColumnFamily tem sua própria

Memtable e recupera os dados da chave

Page 25: Estou seguro com no sql

SSTables

• Sorted String Table• Memtables são descarregadas quando esta

fica sem espaço, ou quando o número de chaves excede o limite (default de 128), ou quando atinge um determinado tempo

• uma SSTable é imutável e não pode ser alterada

Page 26: Estou seguro com no sql

SSTables

• Inúmeras SSTables serão criadas no disco para cada CF

• Ler uma linha requer ler todos os SSTables de uma CF para obter o valor mais atual

• Em algum momento é feito um merge das SStables para reduzir o tempo de leitura

Page 27: Estou seguro com no sql

HintedHandoff

• Técnica otimizada de escrever dados em réplicas

• Quando uma escrita é feita e um nó está fora:1. O coordenador envia uma mensagem para

outro nó vivo2. Esse nó vai lembrar o nó caído das mudanças

assim que ele voltar a funcionar

Page 28: Estou seguro com no sql

HintedHandoff

• HH reduz a latência da escrita quando uma réplica está fora do ar

• HH provê alta disponibilidade de escrita• Se não houve outros nós vivos, dependendo

do nível de consistência, o coordenador envia a mensagem para si mesmo

Page 29: Estou seguro com no sql

Backup

• A maneira mais simples de fazer backup é usando o Opscenter.

• Selecione a keyspace, frequência de backup e frequência com que backups antigos são apagados.

• Também é possível configurar o percentual mínimo de espaço em disco para que os backups não encham o disco.

Page 30: Estou seguro com no sql

PostgreSql

Page 31: Estou seguro com no sql

Modos de persistência

• fsync: desligado, deixa ao SO a tarefa de fazer fsync. Em caso de crash, se desligado pode deixar a base inconsistente.

• synchronous_commit: desligado, faz o fsync em até wal_writer_delay (default 200ms) * 3.

• Se crashar, dados dos últimos 600ms sofrerão rollback, mantendo a base consistente.

• Se ambos estiverem ligados, só retornam ok quando o dado estiver no disco.

Page 32: Estou seguro com no sql

Backup

• Use a ferramenta pg_dump• É gerado um arquivo que pode ser enviado

para outro datacenter.

Page 33: Estou seguro com no sql

Comparativo

Page 34: Estou seguro com no sql

fsync em config default

Até 600ms

Até 10000ms

Até 1000ms

Page 35: Estou seguro com no sql

Estratégia de backup

Automatizável via job

Automatizável via OPSC

Automático por default

Page 36: Estou seguro com no sql

Outras características

Master/Slave

Commitlog, HintedHandoff, Replicação em nós

Master/Slave, AOF

Page 37: Estou seguro com no sql

Partindo para o HW

xEphemeral

Rotacional

ESB

SSDDISCOS

Page 38: Estou seguro com no sql

Ephemeral x ESB

Page 39: Estou seguro com no sql

Rotacional x SSD