O que é Atomicidade?

Por que entender esse conceito pode salvar seu sistema (e sua sanidade)

Vamos começar com um cenário que todo mundo já viveu:

  • Você clica para finalizar uma compra online e… algo dá errado.
  • O pagamento falha, mas o pedido aparece como “confirmado”.
  • O estoque diminui, o e-mail de confirmação chega, mas o dinheiro nunca saiu da conta.

Pronto: o sistema entrou em caos. 😮

Parece exagero, mas é exatamente isso que acontece quando um sistema não tem atomicidade. As operações acontecem de forma parcial, e cada serviço acredita que o outro fez a parte dele.

O resultado? Dados inconsistentes, retrabalho e, claro, usuários confusos.

A atomicidade é o que impede esse tipo de bagunça. Ela vem da palavra “átomo”, algo que não pode ser dividido. No contexto de APIs e sistemas, significa que um processo precisa ser tratado como uma única unidade de execução.

Ou tudo acontece com sucesso, ou nada acontece.


Atomicidade e a Integridade dos Dados (ACID)

A atomicidade é o primeiro pilar de um conjunto fundamental de regras para a confiabilidade de bancos de dados transacionais: o ACID (Atomicidade, Consistência, Isolamento, Durabilidade).

Esses quatro princípios garantem que as transações no banco de dados sejam processadas de maneira confiável, especialmente em cenários onde a integridade dos dados é crítica, como em sistemas financeiros ou de inventário.


Exemplo didático: o carrinho de compras

Imagine uma API que realiza este processo:

  1. Atualiza o estoque dos produtos
  2. Registra o pedido no banco de dados
  3. Processa o pagamento
  4. Envia o e-mail de confirmação ao cliente

Agora pense: o que acontece se o pagamento falhar no passo 3, mas os dois primeiros passos já foram executados?

🔴 O estoque foi atualizado e o pedido foi criado, mas o pagamento não aconteceu.
Resultado: o sistema ficou inconsistente, parece que a compra foi feita, mas o dinheiro nunca entrou. Sistemas sem atomicidade criam lacunas perigosas, que afetam a experiência do usuário, a integridade dos dados e a imagem da empresa.


Por que isso é um problema?

Porque você perde a confiabilidade do sistema.
O cliente vai ver um pedido “confirmado” que na verdade não foi pago.
E o pior: não há como desfazer automaticamente o que já foi feito.

Sistemas sem atomicidade criam lacunas perigosas, que afetam a experiência do usuário, a integridade dos dados e a imagem da empresa.


Como garantir atomicidade

Existem diferentes formas de garantir que tudo aconteça de forma coerente. As mais comuns são:

1. Transações no banco de dados

Quando todas as operações estão dentro de uma única transação, o banco de dados é responsável por controlar a integridade (graças ao ACID):

  • Se tudo der certo → commit
  • Se algo falhar → rollback

Isso garante que ou tudo é gravado, ou nada é alterado.


2. Orquestração com controle de etapas

Quando o processo é distribuído (envolvendo vários microserviços, como estoque, pagamento e notificação), é necessário controlar as etapas manualmente. É aqui que entra o padrão Saga. Jaja vamos falar mais 😉


3. Design de endpoint

Evite quebrar processos críticos em várias chamadas sem controle. Crie endpoints compostos que englobem todas as etapas sensíveis. E se algo falhar, implemente rollback ou ações compensatórias, especialmente ao lidar com APIs externas.


Padrão Saga: o equilíbrio nos sistemas distribuídos

Em sistemas complexos, que envolvem múltiplos serviços, o padrão Saga ajuda a manter a consistência mesmo sem uma transação única. Ele é uma sequência de transações locais onde, se uma falhar, o sistema executa ações compensatórias para desfazer o trabalho realizado.

Exemplo prático com Saga

  1. Cria pedido ✅ (Transação local 1)
  2. Atualiza estoque ✅ (Transação local 2)
  3. Processa pagamento ❌ (Falha na Transação local 3)

O sistema então executa ações compensatórias:

  • Cancela o pedido
  • Reverte o estoque

Assim, o sistema “desfaz” o que já fez, mantendo os dados íntegros e o negócio em um estado coerente.


Resumo prático

ConceitoO que éPor que importa
AtomicidadeTudo ou nadaGarante consistência e integridade dos dados
Sem atomicidadeProcesso parcialGera dados inconsistentes e falhas de negócio
Com atomicidadeReverte em caso de erroInspira confiança e evita retrabalho

Conclusão

Atomicidade é um daqueles conceitos simples, mas fundamentais. Ela é o que garante que o sistema não perca a coerência, mesmo diante de falhas.

Seja com commit ou rolllback em transações de banco de dados, ou com Sagas e ações compensatórias em arquiteturas distribuídas, o importante é que o sistema consiga agir como uma unidade confiável.

No fim, é disso que se trata a engenharia de software: entregar confiança em cada operação. 😉