Teorema CAP

O Teorema CAP (também conhecido como Teorema de Brewer) é um dos principais conceito em sistemas distribuídos. Ele foi proposto por Eric Brewer em 2000 e formalmente provado em 2002 por Seth Gilbert e Nancy Lynch. Este teorema descreve as limitações inerentes ao design de sistemas distribuídos, especialmente em relação a três propriedades essenciais: Consistência (C), Disponibilidade (A) e Tolerância à Partição (P).

De acordo com o teorema, em um sistema distribuído é impossível garantir simultaneamente as três propriedades a seguir:

Consistência (Consistency): Todos os nós do sistema possuem os mesmos dados ao mesmo tempo. Ou seja, após uma operação de escrita, todas as leituras subsequentes retornam o valor mais recente.
Disponibilidade (Availability): O sistema está sempre disponível para responder a solicitações, mesmo que alguns nós estejam inativos ou enfrentando falhas.
Tolerância à Partição (Partition Tolerance): O sistema continua a operar mesmo que haja falhas de comunicação ou partições na rede que impeçam a troca de informações entre alguns nós.

Segundo o teorema um sistema distribuído pode satisfazer no máximo duas dessas propriedades ao mesmo tempo, porém nunca as três (ao mesmo tempo).

O que representa cada propriedade do teorema?

  • Consistência

A consistência garante que todos os nós do sistema tenham uma visão uniforme dos dados. Por exemplo, em um banco de dados distribuído, se um cliente atualiza um registro, todos os outros clientes devem ver essa atualização imediatamente.

  • Disponibilidade

A disponibilidade assegura que o sistema responda a todas as solicitações, mesmo que alguns nós estejam indisponíveis. Isso significa que o sistema deve ser resiliente a falhas e sempre fornecer uma resposta válida.

  • Tolerância à Partição

A tolerância à partição é a capacidade do sistema de continuar funcionando corretamente, mesmo que a comunicação entre alguns nós seja interrompida. Em sistemas distribuídos, partições de rede são inevitáveis, especialmente em redes grandes e complexas.

Possíveis escolhas

  • Consistência + Disponibilidade (CA): O sistema é consistente e disponível, mas não tolera partições. Isso é viável apenas em redes confiáveis, onde partições são extremamente raras.
  • Consistência + Tolerância à Partição (CP): O sistema é consistente e tolera partições, mas pode sacrificar a disponibilidade. Isso significa que, durante uma partição, algumas solicitações podem não ser atendidas.
  • Disponibilidade + Tolerância à Partição (AP): O sistema é disponível e tolera partições, mas pode sacrificar a consistência. Isso é comum em sistemas que priorizam a experiência do usuário, como redes sociais e caches distribuídos.
CAP theorem - Wikipedia

Aplicações do Teorema CAP

Sistemas CA: Bancos de dados centralizados ou sistemas em redes locais confiáveis.
Sistemas CP: Bancos de dados distribuídos como o HBase e o MongoDB em modo de consistência forte.
Sistemas AP: Sistemas como o Cassandra e o DynamoDB, que priorizam alta disponibilidade e tolerância a falhas.

O Teorema CAP é uma ferramenta essencial para entender os trade-offs no design de sistemas distribuídos. Ele nos lembra que não existe uma solução perfeita e que as escolhas dependem das necessidades específicas de cada aplicação. Ao compreender as implicações do teorema, engenheiros de software podem tomar decisões mais informadas ao projetar sistemas escaláveis, resilientes e eficientes.

Que tal resolver agora?