Teorema CAP, 12 anos depois. Nesta aula, nós vamos nos aprofundar mais na compreensão do Teorema CAP e eu vou compartilhar com você que possivelmente falar que um banco AP ou CP é uma discussão provavelmente rasa. Então, vamos nos aprofundar neste tema. Bom, quero relembrar você que o Teorema CAP é do ano 2000. Então, o Eric Brewer escreveu, teorizou o Teorema CAP no ano 2000 e 12 anos depois, em 2012, aconteceu uma nova reflexão do próprio Brewer sobre o Teorema. Qualquer sistema distribuído, qualquer persistência de dados que seja distribuída, somente entrega duas das três propriedades do Teorema K. Então, relembrando consistência, disponibilidade e tolerância ao particionamento de rede. Você nunca vai ter as três coisas ao mesmo tempo. ao mesmo tempo. Se sua rede falhar, é necessário decidir a prioridade entre consistência, que diminui a disponibilidade, ou escolher por disponibilidade, que vai diminuir a consistência de dados. Ao longo do tempo foi percebido o seguinte, que não é 8 ou 80, que a gente na verdade está trabalhando com um espectro. Ou seja, ao trabalhar, aqui vou pela definição formal, ao manipular explicitamente as partições de rede, é possível obter uma otimização entre consistência e disponibilidade, conseguindo assim alguma compensação entre os três estados desejáveis. O que nós temos aqui? Que não necessariamente vai acontecer uma interrupção de rede. O que pode e vai acontecer com frequência, na verdade, é um aumento na latência. O tempo de comunicação entre um nó e outro vai estar comprometido ou vai acontecer uma perda parcial dos pacotes. Nem sempre vai chegar no cenário extremo de particionamento de rede, que é a falha da rede de interrupção. Ou ainda, este particionamento pode ser tratado. E aí com isso, ao invés de você abrir mão completamente da consistência ou abrir mão completamente da disponibilidade, é possível chegar em cenários intermediários desses estados. Então, a ideia aqui é uma reflexão de que existem posicionamentos num espectro bem amplo, que vai variar de projeto a projeto, caso de uso a caso de uso, tipo da interrupção ou diminuição da capacidade de rede. Então, isso aqui é uma coisa que lá nos anos 2000 não era tão clara e que foi ficando claro 12 anos depois. Então, o objetivo moderno do CAP é com que a gente entenda qual é a combinação necessária entre consistência e disponibilidade da nossa aplicação. Então, nós precisamos conhecer muito o nosso caso de uso. Então, a ideia aqui, inclusive o movimento NoSQL fala disso, é criação de possibilidades que se concentram primeiro na disponibilidade e depois na consistência. Se a gente olhar e resgatar o ácido que nós discutimos nos bancos de dados relacionais, a gente entende que acontece o oposto. É um foco muito maior em consistência e depois a gente pensa na disponibilidade. Então, olha só este primeiro aprofundamento. Quando nós tivermos uma indisponibilidade, um particionamento de rede, a escolha entre consistência e disponibilidade pode ocorrer várias vezes dentro de um mesmo aplicativo e para diferentes operações, inclusive. E essa escolha entre consistência e disponibilidade, ela deve variar conforme o tipo de operação que estamos realizando ou até mesmo os dados que estão sendo manipulados naquela operação que estamos realizando, ou até mesmo os dados que estão sendo manipulados naquela operação, ou até quem é a pessoa usuária final daquela operação. Vamos resgatar o exemplo clássico do caixa eletrônico CAP. Então, quando nós temos dois caixas eletrônicos se comunicando entre si, eu tenho tanto a operação de depósito quanto de saque liberadas para todo mundo. Quando esses dois caixas eletrônicos ficam indisponíveis, eu posso tomar a decisão de que para todo mundo eu vou permitir apenas os depósitos, mas não vou permitir nenhum saque, porque o meu objetivo principal como banco é não deixar o saldo negativo das contas das pessoas. Então, isso pode ser uma decisão de negócio. Mas eu também posso deixar claro que, caso seja o tesoureiro do banco realizando um saque, essa pessoa tem a capacidade de realizar esta operação. E depois, no momento em que ambos os caixas eletrônicos voltarem a se conversar, os dados serão consistidos. Então, é esse nuance, esse espectro que estamos tratando neste aprofundamento, nessa reflexão que acontece sobre o Teorema CAP, 12 anos depois do seu lançamento. E uma outra coisa para comentar também desses 12 anos, é que o CAP permite consistência e disponibilidade na maior parte do tempo. Então, quando as partições estão acontecendo, a forma de tratar é a gente preparar a nossa aplicação de maneira a detectar que aquela degradação está acontecendo, aquela interrupção aconteceu, entrar neste modo de partição, que vai ser exemplo do caixa eletrônico, que pode deixar parcialmente a operação limitada para somente depósitos em anos. Então, a minha disponibilidade não foi a zero. Eu estou navegando num espectro menos disponível, mas eu continuo realizando algumas operações de negócio. E depois, eu faço a recuperação, conciliação dos dados e volto a 100% das operações disponíveis.