Sinopse do Episódio "ACID, BASE e o Teorema CAP"
ACID ou BASE, qual escolher? Conhece o teorema CAP? Neste episódio falamos sobre as propriedades destes dois modelos transacionais. Marcio https://twitter.com/marciofrayze Julianno https://twitter.com/juliannoms Links: Artigo "ACID vs. BASE: What are the differences?" https://phoenixnap.com/kb/acid-vs-base Teorema CAP: https://en.wikipedia.org/wiki/CAP_theorem https://dzone.com/articles/understanding-the-cap-theorem https://martin.kleppmann.com/2015/05/11/please-stop-calling-databases-cp-or-ap.html https://www.infoq.com/articles/cap-twelve-years-later-how-the-rules-have-changed/ Modelo ACID Atômico – Cada transação é devidamente realizada ou o processo para e o banco de dados volta para o estado antes do início da transação (rollback), garantindo que todos os dados no banco de dados sejam válidos. Consistente – Uma transação processada nunca colocará em risco a integridade estrutural do banco de dados. A transação cria um novo estado válido tanto para a estrutura como para os dados ou reverte para o estado anterior. Isolado – As transações não podem comprometer a integridade de outras transações interagindo com elas enquanto ainda estão em andamento. Durável – Os dados relacionados à transação concluída persistirão mesmo nos casos de quedas de rede ou energia. Se uma transação falhar, ela não afetará os dados manipulados. Modelo BASE Basically Available – Em vez de impor consistência imediata, os bancos de dados BASE garantirão a disponibilidade de dados espalhando-os e replicando-os nos nós do cluster de banco de dados. Soft State – Devido à falta de consistência imediata, os valores dos dados podem ser diferentes dependendo do nó que atender a requisição. Eventually Consistent – O fato de não impor consistência imediata não significa que ela nunca a alcance. No entanto, até que isso ocorra, as leituras de dados ainda são possíveis (mesmo que não reflitam a realidade mais atual). Teorema CAP Eric Brewer provou que em um modelo distribuído de armazenamento você só consegue atender simultaneamente duas de três opções: Consistência (C): Cada leitura recebe a gravação mais recente ou um erro. Disponibilidade (A): Cada solicitação recebe uma resposta de sucesso, sem a garantia de que contém a gravação mais recente. Tolerância à partição (P): O sistema continua a operar apesar de um número arbitrário de mensagens sendo retiradas (ou atrasadas) pela rede entre nós. Na prática você precisará ter suporte a tolerância a partição, então a escolha se resume a: quando ocorre um particionamento na rede, o que você quer priorizar: consistência ou disponibilidade?
Ouvir "ACID, BASE e o Teorema CAP"
Mais episódios do podcast p de Podcast
- Pattern Matching for instanceof
- Feedback
- Teste A/B (e porquê isso importa)
- Coragem
- Generics mais avançado: Invariância, Covariância, Contravariância e Bivariância
- Generics Básico
- Migrations
- Vazamento de memória
- Diga, não peça (Tell, don’t ask)
- Código como Documentação
- Programação em Par
- Estrangulamento de Software
- Transações Distribuídas
- ACID, BASE e o Teorema CAP
- Software Resiliente
- Monólito Primeiro e Design Simples
- Retrospectiva 2020
- Arquitetura Baseada em Serviços (Service-based Architecture)
- Linguagem onipresente
- Programação Assíncrona
- O resto do REST
- REST: você (provavelmente) está fazendo isso errado
- Refatoração: o que é e como fazer
- SRP x CRUD (Bônus)
- SRP: O Princípio da Responsabilidade Única
- Injeção de dependência e inversão de controle
- Por que usar programação funcional em linguagens OO?
- UX: Por que todo mundo está falando disso?
- Integração Contínua não é (apenas) automatizar a build
- Pare de usar IF/Else
- ORM amar ou odiar?
- Imutabilidade e programação defensiva
- DevOps
- Código limpo
- Frameworks e o seu impacto na arquitetura de software
- TDD: Desenvolvimento Guiado Por Testes
- p de Podcast
- Arquitetura de software no desenvolvimento mobile
- Arquitetura Monolítica versus Microsserviços - parte 3
- Arquitetura Monolítica versus Microsserviços - parte 2
- Arquitetura Monolítica versus Microsserviços - parte 1
- O que é Arquitetura de Software?