Desafio: Teorema CAP

Desafio Técnico: Análise de Trade-offs do Teorema CAP em Sistemas Distribuídos

Objetivo do Exercício

Este desafio tem como objetivo desenvolver sua capacidade de análise arquitetural aplicando o Teorema CAP a cenários reais de sistemas distribuídos. Você exercitará a tomada de decisão técnica fundamentada, avaliando consequências e trade-offs antes da implementação.


Contexto Teórico: Revisão do Teorema CAP

Os Três Pilares:

  • Consistência (C): Todas as leituras recebem a escrita mais recente ou um erro

  • Disponibilidade (A): Todas as requisições recebem uma resposta (não necessariamente a mais recente)

  • Tolerância a Partições (P): O sistema continua funcionando mesmo com falhas de comunicação entre nós

O Trade-off Fundamental:

O teorema estabelece que, durante uma partição de rede (P), um sistema distribuído deve escolher entre:

  • Priorizar AP → Manter disponibilidade sacrificando consistência imediata

  • Priorizar CP → Manter consistência sacrificando disponibilidade imediata


Cenários para Análise

Cenário 1: Sistema de Reservas de Salas de Reunião Corporativo

Contexto:

  • Empresa multinacional com filiais em diferentes regiões geográficas

  • Sistema crítico para operações diárias da empresa

  • Múltiplos usuários podem tentar reservar a mesma sala simultaneamente

  • Reservas podem ser feitas de diferentes locais (escritórios, home office)

Requisitos Funcionais:

  • Visualização em tempo real da disponibilidade de salas

  • Reserva instantânea de salas

  • Notificação de conflitos de agenda

  • Integração com calendários corporativos


Cenário 2: Plataforma de E-commerce com Múltiplos Data Centers

Contexto:

  • Marketplace global com operações na América do Norte, Europa e Ásia

  • Milhões de produtos com estoque limitado

  • Eventos promocionais causam picos de tráfego (ex: Black Friday)

  • Clientes podem realizar compras de qualquer região

Requisitos Funcionais:

  • Verificação em tempo real do estoque disponível

  • Processamento de pedidos com garantia de não vender o mesmo item duas vezes

  • Experiência de compra rápida e responsiva

  • Sincronização de dados entre regiões para relatórios globais


Tarefa de Análise

Para cada cenário, desenvolva uma análise estruturada respondendo:

Análise para Prioridade AP (Disponibilidade + Tolerância a Partições):

  1. Impactos Imediatos:

    • Como o sistema se comporta durante uma partição de rede?

    • Qual é a experiência do usuário em condições normais e de falha?

  2. Vantagens Operacionais:

    • Benefícios para a continuidade do negócio

    • Impacto na performance do sistema

  3. Desvantagens e Riscos:

    • Problemas de consistência de dados

    • Consequências para a integridade do sistema

    • Complexidade de resolução de conflitos

Análise para Prioridade CP (Consistência + Tolerância a Partições):

  1. Impactos Imediatos:

    • Comportamento do sistema sob condições de partição

    • Experiência do usuário durante falhas de rede

  2. Vantagens de Dados:

    • Garantias sobre a integridade das informações

    • Simplicidade no modelo de consistência

  3. Desvantagens Operacionais:

    • Impacto na disponibilidade do serviço

    • Consequências para a experiência do usuário final


Exercício Opcional Avançado: Design Doc Arquitetural

Objetivo:

Elaborar um documento de design técnico para um dos cenários, justificando sua decisão arquitetural.

Estrutura Sugerida:

  1. Contexto e Requisitos do Negócio

  2. Decisão Arquitetural (AP vs CP)

  3. Justificativa Baseada em:

    • Requisitos funcionais e não-funcionais

    • Expectativas dos usuários finais

    • Impacto no negócio durante falhas

    • Custo de implementação e manutenção

  4. Impacto da Decisão:

    • Padrões de design necessários (ex: Eventual Consistency, Saga Pattern)

    • Estratégias de mitigação de riscos

    • Plano para cenários de falha

  5. Considerações de Implementação:

    • Tecnologias recomendadas

    • Estrutura de dados e sincronização

    • Monitoramento e alertas


Critérios de Avaliação da Análise

  1. Profundidade Técnica:

    • Compreensão dos conceitos do Teorema CAP

    • Aplicação prática aos cenários específicos

  2. Pensamento Crítico:

    • Identificação clara de trade-offs

    • Avaliação de impactos no negócio

    • Consideração de cenários de borda

  3. Clareza e Estrutura:

    • Argumentação organizada e lógica

    • Linguagem técnica apropriada

    • Exemplos concretos e relevantes

  4. Criatividade em Soluções:

    • Proposta de mecanismos de mitigação

    • Consideração de abordagens híbridas quando apropriado


Dicas para uma Análise de Qualidade

  • Pense nos usuários finais: Como cada decisão afeta sua experiência?

  • Considere o modelo de negócio: Qual é o custo real de indisponibilidade vs inconsistência?

  • Avalie a frequência esperada de partições: É um cenário comum ou excepcional?

  • Pense em estratégias de mitigação: Como minimizar os impactos negativos da escolha?

  • Documente suposições: Explique as premissas que guiaram sua análise.

Lembre-se: Não existe resposta "certa" universal - existe a decisão mais adequada para o contexto específico de cada sistema e negócio.


Cenário 1: Sistema de Pagamentos

Uma empresa desenvolve um sistema de pagamentos online com os seguintes microsserviços:

  • Serviço de Processamento de Pagamentos: Recebe solicitações de pagamento e inicia a transação.

  • Serviço de Saldo do Usuário: Mantém o saldo atualizado após cada transação.

No momento, a equipe precisa decidir como lidar com falhas de comunicação entre esses serviços.

Eles podem priorizar Disponibilidade (AP), garantindo que os pagamentos sejam sempre aceitos, mesmo que o serviço de saldo esteja inacessível.

Ou podem priorizar Consistência (CP), garantindo que nenhuma transação ocorra sem que o saldo seja verificado com segurança, mesmo que isso signifique bloquear pagamentos temporariamente.

Respostas

chevron-rightPriorizando AP (Disponibilidade + Tolerância a Partições)hashtag

Vantagens:

  • Pagamentos são sempre processados, garantindo continuidade do negócio

  • Usuários não percebem falhas no sistema (experiência fluída)

  • Alta resiliência a falhas de rede ou indisponibilidade do serviço de saldo

Desvantagens:

  • Risco de saldo negativo (usuários gastando mais do que têm)

  • Possíveis inconsistências entre saldo real e processamento

  • Complexidade para reconciliação posterior (necessidade de compensações)

  • Maior risco financeiro para a empresa

Impactos:

  • Necessidade de mecanismos assíncronos de reconciliação

  • Sistema mais complexo para lidar com estornos e ajustes

  • Potencial aumento de fraudes devido a brechas temporárias

chevron-rightPriorizando CP (Consistência + Tolerância a Partições)hashtag

Vantagens:

  • Garantia absoluta de que nenhuma transação ocorre sem verificação de saldo

  • Sistema financeiramente seguro

  • Dados sempre consistentes entre serviços

Desvantagens:

  • Pagamentos podem ser recusados durante partições de rede

  • Experiência do usuário negativa (pagamentos bloqueados inesperadamente)

  • Possível perda de vendas durante indisponibilidades

Impactos:

  • Sistema mais simples de implementar (lógica síncrona)

  • Maior confiança dos usuários na integridade financeira

  • Menor necessidade de processos de reconciliação complexos

chevron-rightDesign Dochashtag

Decisão Arquitetural: CP (Consistência + Tolerância a Partições)

Justificativa:

  1. Domínio Crítico: Sistemas financeiros têm requisitos rigorosos de consistência. Transações inconsistentes podem resultar em perdas financeiras diretas e danos à reputação.

  2. Regulamentação: Setores financeiros estão sujeitos a regulamentações que exigem precisão absoluta nos registros.

  3. Custo do Erro: O custo de uma transação incorreta (saldo negativo não detectado) é significativamente maior do que o custo de recusar uma transação temporariamente.

  4. Recuperabilidade: É mais fácil explicar a um cliente "o sistema está temporariamente indisponível" do que "você gastou mais do que tinha e agora está devendo".

Implementação Proposta:

  • Pattern: Saga com Compensação

    • Transação inicia no serviço de processamento

    • Bloqueio síncrono do valor no serviço de saldo (fase 1)

    • Se confirmado, completa transação (fase 2)

    • Se serviço de saldo indisponível, transação falha imediatamente

    • Implementar fila de retry para casos de falhas transitórias

  • Mecanismos de Mitigação:

    • Timeouts agressivos (2-3 segundos) para minimizar impacto na experiência

    • Circuit breakers para detectar padrões de falha

    • Cache de saldo local com TTL curto para casos levemente desatualizados (apenas para leitura)

    • Dashboard em tempo real mostrando saúde do sistema

  • Impactos Esperados:

    • 99.9% das transações processadas com consistência garantida

    • < 0.1% de transações recusadas devido a indisponibilidade

    • Sistema de alertas para intervenção manual em caso de falhas prolongadas

    • SLA de 99.95% de disponibilidade geral

Trade-off Aceito:

Aceitamos uma redução mínima na disponibilidade (AP) em troca de consistência absoluta (CP), pois no domínio financeiro, a correção dos dados é mais valiosa que a disponibilidade irrestrita. A indisponibilidade temporária causa frustração; a inconsistência causa perdas financeiras e problemas legais.


Cenário 2: Sistema de E-commerce

Uma plataforma de e-commerce precisa definir a estratégia para dois microsserviços críticos:

  • Serviço de Carrinho de Compras: Permite que os clientes adicionem produtos ao carrinho e finalizem pedidos.

  • Serviço de Estoque: Mantém a quantidade disponível de cada item no catálogo.

O time de arquitetura precisa decidir o que fazer caso ocorra uma falha na comunicação entre esses dois serviços.

Eles podem priorizar Disponibilidade (AP), permitindo que os clientes adicionem produtos ao carrinho e façam pedidos, mesmo que o serviço de estoque não esteja acessível no momento.

Ou podem priorizar Consistência (CP), garantindo que cada pedido só seja processado se a quantidade exata dos produtos for confirmada no estoque, mesmo que isso possa impedir alguns clientes de concluir a compra temporariamente.

Respostas

chevron-rightPriorizando AP (Disponibilidade + Tolerância a Partições)hashtag

Vantagens:

  • Clientes sempre conseguem finalizar compras

  • Maior conversão de vendas (não perde vendas por indisponibilidade técnica)

  • Experiência do usuário otimizada

Desvantagens:

  • Risco de vender produtos sem estoque real

  • Clientes podem receber cancelamentos posteriores

  • Possível insatisfação com pedidos não atendidos

  • Complexidade logística com pedidos que não podem ser entregues

Impactos:

  • Necessidade de sistema de reserva de estoque assíncrono

  • Processos de cancelamento e reembolso mais frequentes

  • Maior custo operacional com gestão de expectativas

chevron-rightPriorizando CP (Consistência + Tolerância a Partições)hashtag

Vantagens:

  • Garantia de que todos os pedidos têm estoque disponível

  • Zero cancelamentos por falta de estoque

  • Sistema logístico mais previsível

  • Melhor gestão de cadeia de suprimentos

Desvantagens:

  • Clientes podem ser impedidos de comprar durante falhas

  • Possível perda de vendas para concorrentes

  • Experiência do usuário frustrante

Impactos:

  • Implementação mais direta (síncrona)

  • Maior confiança na plataforma

  • Menor custo com logística reversa e cancelamentos

chevron-rightDesign Dochashtag

Decisão: AP (Disponibilidade + Tolerância a Partições)

Justificativa

  1. Prioridade de Negócio: Converter venda é mais importante que evitar 100% dos cancelamentos

  2. Natureza Reversível: Pedidos podem ser cancelados/estornados (não como pagamentos)

  3. Experiência do Usuário: Cliente prefere comprar e talvez cancelar depois do que ser bloqueado

Implementação

  • Pattern: Reserva Assíncrona de Estoque

    • Carrinho verifica cache local de estoque (TTL curto)

    • Se estoque indisponível → assume disponibilidade com limites

    • Permite finalização da compra

    • Envia reserva para fila assíncrona

    • Processamento em background tenta reservar estoque real

  • Se falhar (sem estoque):

    • Cancela pedido automaticamente

    • Oferece alternativa/cupom ao cliente

    • Aprende com padrão para evitar reincidência

Trade-off Aceito

Aceitamos ~0.5% de cancelamentos por falta de estoque em troca de nunca bloquear uma compra. Em e-commerce, venda perdida é pior que cancelamento gerenciado.

Last updated