Teorema CAP, Consistência, Disponibilidade e Tolerância ao Particionamento de Rede. Vamos falar sobre a definição clássica. Bom, aqui nós estamos falando do teorema CAP. Em inglês, as três letras CAP correspondem a Consistency, para consistência, a Viability, para disponibilidade, e a letra P, que é o Partition Tolerance, ou tolerância ao particionamento de rede, uma expressão bonita para falar de falta de conexão com os demais nós de um cluster. falta de conexão com os demais nós de um cluster. E este daqui é o diagrama clássico e o conceito clássico. Importante você saber que o teorema CAP é também chamado de teorema de Brewer, de Eric Brewer. E basicamente aqui nós temos os conceitos de que qualquer armazenamento de dados distribuído, ou seja, nós em um cluster que estão em diferentes locais, somente consegue entregar duas das três garantias. tem uma rede interrompida, que é o particionamento de rede, você consegue obter a consistência e a disponibilidade. Se você tiver a interrupção da rede, ou seja, se você tem a rede interrompida, você vai ter que escolher entre consistência ou disponibilidade. Então, esse que é o nosso principal conceito fundamental do Teorema CAP. Ok, vamos aprofundar um pouquinho mais o que significa consistência neste teorema. Consistência é que cada leitura realizada vai receber a escrita mais recente ou um erro. Disponibilidade. Cada requisição recebe uma resposta sem a garantia de que esta contenha a escrita mais recente. escrita mais recente. Tolerância à partição ou partition tolerance é a possibilidade do sistema continuar a operar mesmo com uma interrupção de rede, ou seja, perda ou atraso de mensagens porque alguma coisa deu errado na comunicação entre nós, do nosso cluster. Então, quando acontecer essa situação, a rede está comprometida, temos que ter uma decisão. Cancelar a operação, diminuindo a disponibilidade, mas garantindo consistência de dados, ou prosseguir com esta operação com os nós que continuam suportando aquela tarefa, mas sem se comunicar com os demais nós. Porém, nós teremos um problema de inconsistência, porque nós teremos um nó inconsistente e se este outro nó estiver trabalhando com outro grupo de usuários da nossa aplicação, ambos as pontas estarão inconsistentes entre si. Então, este teorema fala justamente sobre decidir entre consistência ou disponibilidade, caso aconteça o particionamento de rede. E aí, em cima dessa definição clássica, eu quero deixar você preparado para discussões em que você vai encontrar posicionamentos de bancos de dados em relação a uma dessas três possibilidades do Teorema CAP. Então, é muito comum a gente relacionar o Banco Oracle, o MySQL, o SQL Server, o Postgres, do lado de consistência e disponibilidade. Porque, geralmente, esses bancos de dados não estão clusterizados. Geralmente é um nó comandando leitura e escrita em ambientes altamente disponíveis. É um nó secundário, um seguidor, fazendo apenas a escuta daquilo ali e aguardando alguma coisa dar errado com o nó primário. errado com o nó primário. Mas a gente já vai aprofundar um pouco mais nessa discussão. Bom, então, tradicionalmente, C e A está associado com os bancos relacionais, então disponibilidade e consistência. Do lado de disponibilidade e no caso de uma tolerância, a gente vai encontrar o Cassandra. Então, o Cassandra continua operando com escritas e leituras em todos os seus nós, assim como o CouchDB, assim como o Dynamo. E também, na outra aresta aqui do nosso triângulo, nós vamos geralmente encontrar o Bigtable, o HBase, o MongoDB, o Redis como bancos que priorizam consistência. Então, a leitura clássica do nosso conceito do Teorema CAP é essa. Bancos relacionais vão priorizar consistência e disponibilidade, portanto não toleram a falha de rede. E Cassandra, CalcDB e SimpleDB vai priorizar a disponibilidade na eventual tolerância na fase de rede, e o MongoDB, o Redis, o Bigtable e o HBase vão priorizar consistência. Esta é a leitura clássica do teorema CAP.