Download - Estou seguro com no sql
![Page 1: Estou seguro com no sql](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/1.jpg)
Estou seguro com NoSQL?
Rafael Redondo
![Page 2: Estou seguro com no sql](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/2.jpg)
O que falaremos
ACID(Atomicity, Consistency, Isolation, Durability)
+ backup
![Page 3: Estou seguro com no sql](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/3.jpg)
O que não falaremos
SQL X
NoSQL
![Page 4: Estou seguro com no sql](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/4.jpg)
O que não falaremos
BASE(Basically Available, Soft state, Eventual consistency)
CAP(Consistency, Availability, Partition tolerance)
![Page 5: Estou seguro com no sql](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/5.jpg)
Programação
• Durabilidade• Redis• Cassandra• Comparativo: Redis, Cassandra,
PostgreSQL
![Page 6: Estou seguro com no sql](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/6.jpg)
Durabilidade
“Garantir que os dados estarão disponíveis em definitivo.”
![Page 7: Estou seguro com no sql](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/7.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/8.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/9.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/10.jpg)
Redis
![Page 11: Estou seguro com no sql](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/11.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/12.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/13.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/14.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/15.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/16.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/17.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/18.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/19.jpg)
Cassandra
![Page 20: Estou seguro com no sql](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/20.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/21.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/22.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/23.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/24.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/25.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/26.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/27.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/28.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/29.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/30.jpg)
PostgreSql
![Page 31: Estou seguro com no sql](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/31.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/32.jpg)
Backup
• Use a ferramenta pg_dump• É gerado um arquivo que pode ser enviado
para outro datacenter.
![Page 33: Estou seguro com no sql](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/33.jpg)
Comparativo
![Page 34: Estou seguro com no sql](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/34.jpg)
fsync em config default
Até 600ms
Até 10000ms
Até 1000ms
![Page 35: Estou seguro com no sql](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/35.jpg)
Estratégia de backup
Automatizável via job
Automatizável via OPSC
Automático por default
![Page 36: Estou seguro com no sql](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/36.jpg)
Outras características
Master/Slave
Commitlog, HintedHandoff, Replicação em nós
Master/Slave, AOF
![Page 37: Estou seguro com no sql](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/37.jpg)
Partindo para o HW
xEphemeral
Rotacional
ESB
SSDDISCOS
![Page 38: Estou seguro com no sql](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/38.jpg)
Ephemeral x ESB
![Page 39: Estou seguro com no sql](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/39.jpg)
Rotacional x SSD
![Page 40: Estou seguro com no sql](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/40.jpg)
Bibliografia
• http://redis.io/topics/persistence• http://oldblog.antirez.com/post/redis-persiste
nce-demystified.html• https://sites.google.com/site/developertips/H
ome/java/how-cassandra-writes-and-reads-data
• http://www.datastax.com/documentation/opscenter/3.2/webhelp/index.html
![Page 41: Estou seguro com no sql](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/41.jpg)
Bibliografia
• http://stackoverflow.com/questions/10371017/fsync-vs-write-system-call
• http://www.postgresql.org/docs/9.0/static/runtime-config-wal.html
• http://dba.stackexchange.com/questions/18509/difference-between-fsync-and-synchronous-commit-postgresql
• http://jasonirwin.ca/2011/08/17/ec2-raid-comparison-ephemeral-vs-ebs-volumes/
![Page 42: Estou seguro com no sql](https://reader033.vdocument.in/reader033/viewer/2022051513/547f847db4af9f3d578b4599/html5/thumbnails/42.jpg)
Bibliografia
• http://www.samsung.com/global/business/semiconductor/minisite/SSD/de/html/about/whitepaper01.html