DEV Community

Bruno
Bruno

Posted on

O Teorema CAP: Por que não podemos ter tudo em Sistemas Distribuídos?

Com o crescimento exponencial de usuários e dados, a transição de sistemas locais para arquiteturas distribuídas se tornou o padrão na indústria de software. No entanto, manter bancos de dados em vários servidores traz um desafio fundamental: como garantir que todos os usuários vejam a mesma informação e que o sistema nunca saia do ar? É nesse cenário de "escolhas difíceis" que entra o Teorema CAP, um conceito vital para desenhar soluções escaláveis.

Criado pelo cientista da computação Eric Brewer, o Teorema CAP afirma que em um sistema distribuído, é impossível garantir perfeitamente e de forma simultânea três propriedades:

Consistência: Todos os nós (servidores) entregam os dados mais recentes. Se você atualizar uma informação, qualquer leitura subsequente, não importa em qual servidor ocorra, retornará esse dado atualizado.

Disponibilidade: Toda requisição feita ao sistema recebe uma resposta bem-sucedida, independentemente de haver servidores individuais com falha.

Tolerância a Particionamento: O sistema continua operando mesmo que a rede falhe e a comunicação entre os nós seja cortada (criando uma "partição").

Como falhas de rede em sistemas distribuídos são inevitáveis, a Tolerância a Particionamento é um requisito obrigatório. Logo, a verdadeira escolha que um arquiteto de software precisa fazer é: no momento em que a rede falha, o sistema prioriza a Consistência (CP) ou a Disponibilidade (AP)?

Aplicações no Mundo Real e Exemplos Práticos :

Sistemas CP (Consistência + Tolerância): Priorizam a integridade. Se a rede falhar, o sistema prefere devolver um erro ou bloquear o acesso a retornar um dado desatualizado.

Exemplo no mundo real: Sistemas bancários. É melhor que o aplicativo do banco fique temporariamente indisponível para uma transferência do que permitir que você gaste um dinheiro que não tem mais. Bancos de dados relacionais rigorosos e o MongoDB (dependendo da configuração) seguem essa linha.

Sistemas AP (Disponibilidade + Tolerância): Priorizam manter o serviço no ar. Se houver falha, o sistema responde com o dado que tem disponível, mesmo que não seja o mais recente (gerando a chamada "Consistência Eventual" ).

Exemplo no mundo real: Redes sociais. Se o Instagram ou X tiverem uma instabilidade entre seus servidores, você ainda consegue ver o feed, mas pode ser que o número de curtidas demore alguns segundos para atualizar. Tecnologias como Apache Cassandra operam focadas nisso.

O Teorema CAP nos prova que não existe a "arquitetura perfeita". Desenvolver sistemas distribuídos é a arte de gerenciar trade-offs. A decisão entre priorizar consistência ou disponibilidade não deve ser baseada no gosto pessoal do programador, mas sim nos requisitos de negócio. Um sistema de controle de voos exige dados precisos (CP), enquanto um catálogo de e-commerce prefere estar sempre online para não perder vendas (AP). Entender seu domínio é o primeiro passo para arquitetar a solução correta.

Referências
BREWER, E. A. (2012). CAP twelve years later: How the "rules" have changed. Computer, 45(2), 22-29.

KLEPPMANN, M. (2017). Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems. O'Reilly Media.

Top comments (0)