Software · Infraestrutura & Sistemas

Teorema CAP e Sistemas Distribuídos: O Dilema Inevitável entre Consistência e Disponibilidade

Entenda por que redes distribuídas nunca conseguem garantir consistência e disponibilidade simultâneas durante falhas e como avaliar os compromissos CP e AP.

Diagrama conceitual do Teorema CAP demonstrando o dilema entre consistência e disponibilidade diante de partições de rede

No projeto de sistemas distribuídos e bancos de dados modernos, existe um limite matemático inegociável que dita como as informações podem ser replicadas e servidas através de múltiplos servidores. Formulado por Eric Brewer em 1999 e formalmente provado por Seth Gilbert e Nancy Lynch em 2002, o Teorema CAP (também conhecido como Teorema de Brewer) estabelece que é impossível para qualquer armazenamento distribuído garantir simultaneamente as três propriedades fundamentais de dados: Consistência, Disponibilidade e Tolerância a Partições.

Compreender esse teorema afasta discussões ingênuas sobre tecnologias "perfeitas" e orienta os arquitetos de software a tomarem decisões explícitas de engenharia baseadas nos riscos reais do negócio.

As Três Propriedades do Teorema

flowchart TB
    C["CONSISTÊNCIA — C<br/>todos os nós leem o dado mais recente"]
    A["DISPONIBILIDADE — A<br/>toda requisição recebe resposta"]
    P["TOLERÂNCIA A PARTIÇÕES — P<br/>o sistema opera durante falhas de rede"]

    C ---|CP| P
    P ---|AP| A
    A ---|CA| C
    Tradeoff["Em uma partição de rede,<br/>escolha consistência ou disponibilidade"]
    Tradeoff -.-> C
    Tradeoff -.-> A

    classDef property fill:#172033,stroke:#38bdf8,color:#f8fafc;
    classDef decision fill:#2a1f32,stroke:#a855f7,color:#f8fafc;
    class C,A,P property;
    class Tradeoff decision;

1. Consistência (Consistency - C)

No contexto do Teorema CAP, consistência refere-se à linearizabilidade: todo nó do cluster deve retornar o dado mais recentemente gravado no exato instante em que uma leitura for realizada. Para o cliente da aplicação, o sistema comporta-se como se existisse apenas uma única cópia atômica da informação, mesmo que ela esteja fisicamente distribuída em cinco data centers pelo mundo.

2. Disponibilidade (Availability - A)

Toda requisição não-bloqueada enviada por um cliente a um nó saudável do cluster deve receber uma resposta válida (de sucesso ou falha planejada de negócio), sem travar a conexão em esperas infinitas ou erros de tempo esgotado (timeout). A resposta deve ser imediata, ainda que os dados retornados não representem necessariamente a versão mais recente.

3. Tolerância a Partições de Rede (Partition Tolerance - P)

O sistema tem capacidade de continuar operando normalmente mesmo quando conexões de rede entre os servidores são rompidas, perdidas ou sofrem atrasos severos, dividindo o cluster em duas ou mais metades isoladas (Network Partition).

Por que a Tolerância a Partições é Inegociável

Existe uma interpretação equivocada comum de que um arquiteto pode "escolher duas das três garantias" como em um cardápio de restaurante (por exemplo, optar por "CA" — Consistência e Disponibilidade).

Em qualquer sistema distribuído real, cabos de rede sofrem rompimentos, switches quebram, zonas de nuvem oscilam e a latência de comunicação varia de maneira imprevisível. Portanto, a tolerância a partições (P) não é uma opção; ela é uma condição compulsória da física das redes.

Quando uma partição de rede inevitavelmente acontece entre o Data Center de São Paulo e o de Nova York, o arquiteto é forçado a escolher entre dois únicos caminhos:

Cenário 1: Escolher Consistência sobre Disponibilidade (Sistemas CP)

Se o sistema prioriza a integridade absoluta da informação a qualquer custo, o nó de São Paulo recusa-se a aceitar novas gravações ou leituras enquanto não conseguir sincronizar com o nó de Nova York.

  • Consequência: O cliente recebe uma mensagem de erro ou bloqueio temporário, mas o sistema garante que nenhum saldo bancário incorreto ou venda em duplicidade seja gravado.
  • Exemplos de Tecnologias: MongoDB (com escrita majoritária configurada), Apache HBase, CockroachDB e Redis Cluster.

Cenário 2: Escolher Disponibilidade sobre Consistência (Sistemas AP)

Se o sistema prioriza manter o serviço online para os usuários mesmo durante a pane de rede, os nós de São Paulo e Nova York continuam respondendo a requisições de forma autônoma.

  • Consequência: O cliente em São Paulo pode ler uma versão ligeiramente defasada da informação até que a partição de rede seja resolvida e os nós sincronizem suas divergências via consistência eventual (Eventual Consistency).
  • Exemplos de Tecnologias: Apache Cassandra, Amazon DynamoDB e CouchDB.

E onde ficam os Bancos de Dados Tradicionais (CA)?

Sistemas classificados teoricamente como "CA" (Consistentes e Disponíveis) só conseguem fornecer essa garantia porque não toleram falhas de rede — o que significa que não são sistemas verdadeiramente distribuídos.

Bancos relacionais clássicos (como uma instância única de PostgreSQL ou MySQL rodando em um único servidor físico) operam com transações ACID completas e disponibilidade garantida para suas conexões locais. No entanto, no momento em que você introduz réplicas de leitura em outras máquinas ou fragmentação (sharding), a rede torna-se uma variável crítica e o banco é instantaneamente jogado no dilema do Teorema CAP.

Classificação Prioridade Real Comportamento sob Falha de Rede Cenário de Negócio Ideal
CP Consistência Rejeita requisições para evitar dados divergentes. Saldo financeiro, emissão fiscal, reservas de voos.
AP Disponibilidade Responde com o dado localmente disponível. Feeds de redes sociais, catálogos de produtos, métricas de telemetria.
CA (Nó Único) Transacional Local Não se aplica (não opera em múltiplos nós de rede). Aplicações tradicionais centralizadas em um único servidor.

Compreender o Teorema CAP permite que a equipe de engenharia selecione o banco de dados e o modelo de persistência adequados para cada domínio de negócio, abandonando soluções genéricas e construindo aplicações preparadas para sobreviver aos imprevistos inevitáveis da infraestrutura moderna.