{"id":229,"date":"2025-10-25T12:12:59","date_gmt":"2025-10-25T15:12:59","guid":{"rendered":"https:\/\/cahfelix.tech\/blog\/?p=229"},"modified":"2025-10-27T10:45:24","modified_gmt":"2025-10-27T13:45:24","slug":"o-que-e-atomicidade","status":"publish","type":"post","link":"https:\/\/cahfelix.tech\/blog\/o-que-e-atomicidade\/","title":{"rendered":"O que \u00e9 Atomicidade?"},"content":{"rendered":"\n<p>Vamos come\u00e7ar com um cen\u00e1rio que todo mundo j\u00e1 viveu:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Voc\u00ea clica para finalizar uma compra online e&#8230; algo d\u00e1 errado.<\/li>\n\n\n\n<li>O pagamento falha, mas o pedido aparece como \u201cconfirmado\u201d.<\/li>\n\n\n\n<li>O estoque diminui, o e-mail de confirma\u00e7\u00e3o chega, mas o dinheiro nunca saiu da conta.<\/li>\n<\/ul>\n\n\n\n<p>Pronto: o sistema entrou em <strong>caos<\/strong>. \ud83d\ude2e <\/p>\n\n\n\n<p>Parece exagero, mas \u00e9 exatamente isso que acontece quando um sistema <strong>n\u00e3o tem atomicidade<\/strong>. As opera\u00e7\u00f5es acontecem de forma parcial, e cada servi\u00e7o acredita que o outro fez a parte dele.<\/p>\n\n\n\n<p>O resultado? Dados inconsistentes, retrabalho e, claro, usu\u00e1rios confusos.<\/p>\n\n\n\n<p>A atomicidade \u00e9 o que impede esse tipo de bagun\u00e7a. Ela vem da palavra \u201c\u00e1tomo\u201d, algo que <strong>n\u00e3o pode ser dividido<\/strong>. No contexto de APIs e sistemas, significa que <strong>um processo precisa ser tratado como uma \u00fanica unidade de execu\u00e7\u00e3o<\/strong>.<\/p>\n\n\n\n<p><strong>Ou tudo acontece com sucesso, ou nada acontece.<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Atomicidade e a Integridade dos Dados (ACID)<\/h3>\n\n\n\n<p>A atomicidade \u00e9 o primeiro pilar de um conjunto fundamental de regras para a confiabilidade de bancos de dados transacionais: o <strong>ACID<\/strong> (Atomicidade, Consist\u00eancia, Isolamento, Durabilidade).<\/p>\n\n\n\n<p>Esses quatro princ\u00edpios garantem que as transa\u00e7\u00f5es no banco de dados sejam processadas de maneira confi\u00e1vel, especialmente em cen\u00e1rios onde a integridade dos dados \u00e9 cr\u00edtica, como em sistemas financeiros ou de invent\u00e1rio.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"276\" src=\"https:\/\/cahfelix.tech\/blog\/wp-content\/uploads\/2025\/10\/image-2-1024x276.png\" alt=\"\" class=\"wp-image-242\" srcset=\"https:\/\/cahfelix.tech\/blog\/wp-content\/uploads\/2025\/10\/image-2-1024x276.png 1024w, https:\/\/cahfelix.tech\/blog\/wp-content\/uploads\/2025\/10\/image-2-300x81.png 300w, https:\/\/cahfelix.tech\/blog\/wp-content\/uploads\/2025\/10\/image-2-768x207.png 768w, https:\/\/cahfelix.tech\/blog\/wp-content\/uploads\/2025\/10\/image-2-1536x414.png 1536w, https:\/\/cahfelix.tech\/blog\/wp-content\/uploads\/2025\/10\/image-2.png 1585w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Exemplo did\u00e1tico: o carrinho de compras<\/h2>\n\n\n\n<p>Imagine uma API que realiza este processo:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Atualiza o estoque dos produtos<\/li>\n\n\n\n<li>Registra o pedido no banco de dados<\/li>\n\n\n\n<li>Processa o pagamento<\/li>\n\n\n\n<li>Envia o e-mail de confirma\u00e7\u00e3o ao cliente<\/li>\n<\/ol>\n\n\n\n<p>Agora pense: o que acontece se o pagamento falhar no passo 3, mas os dois primeiros passos j\u00e1 foram executados?<\/p>\n\n\n\n<p>\ud83d\udd34 O estoque foi atualizado e o pedido foi criado, mas <strong>o pagamento n\u00e3o aconteceu<\/strong>.<br>Resultado: o sistema ficou <strong>inconsistente<\/strong>, parece que a compra foi feita, mas o dinheiro nunca entrou. Sistemas sem atomicidade criam lacunas perigosas, que afetam a experi\u00eancia do usu\u00e1rio, a integridade dos dados e a imagem da empresa.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Por que isso \u00e9 um problema?<\/h2>\n\n\n\n<p>Porque <strong>voc\u00ea perde a confiabilidade do sistema<\/strong>.<br>O cliente vai ver um pedido \u201cconfirmado\u201d que na verdade n\u00e3o foi pago.<br>E o pior: n\u00e3o h\u00e1 como desfazer automaticamente o que j\u00e1 foi feito.<\/p>\n\n\n\n<p>Sistemas sem atomicidade criam lacunas perigosas, que afetam a experi\u00eancia do usu\u00e1rio, a integridade dos dados e a imagem da empresa.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"> Como garantir atomicidade<\/h2>\n\n\n\n<p>Existem diferentes formas de garantir que tudo aconte\u00e7a de forma coerente. As mais comuns s\u00e3o:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Transa\u00e7\u00f5es no banco de dados<\/h3>\n\n\n\n<p>Quando todas as opera\u00e7\u00f5es est\u00e3o dentro de <strong>uma \u00fanica transa\u00e7\u00e3o<\/strong>, o banco de dados \u00e9 respons\u00e1vel por controlar a integridade (gra\u00e7as ao ACID):<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Se tudo der certo \u2192 <strong>commit<\/strong><\/li>\n\n\n\n<li>Se algo falhar \u2192 <strong>rollback<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Isso garante que <strong>ou tudo \u00e9 gravado, ou nada \u00e9 alterado<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">2. Orquestra\u00e7\u00e3o com controle de etapas<\/h3>\n\n\n\n<p>Quando o processo \u00e9 <strong>distribu\u00eddo<\/strong> (envolvendo v\u00e1rios microservi\u00e7os, como estoque, pagamento e notifica\u00e7\u00e3o), \u00e9 necess\u00e1rio controlar as etapas manualmente. \u00c9 aqui que entra o padr\u00e3o <strong>Saga<\/strong>. Jaja vamos falar mais \ud83d\ude09 <\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">3. Design de endpoint<\/h3>\n\n\n\n<p>Evite quebrar processos cr\u00edticos em v\u00e1rias chamadas sem controle. Crie <strong>endpoints compostos<\/strong> que englobem todas as etapas sens\u00edveis. E se algo falhar, implemente <strong>rollback<\/strong> ou a\u00e7\u00f5es compensat\u00f3rias, especialmente ao lidar com APIs externas.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Padr\u00e3o Saga: o equil\u00edbrio nos sistemas distribu\u00eddos<\/h2>\n\n\n\n<p>Em sistemas complexos, que envolvem m\u00faltiplos servi\u00e7os, o padr\u00e3o <strong>Saga<\/strong> ajuda a manter a consist\u00eancia mesmo sem uma transa\u00e7\u00e3o \u00fanica. Ele \u00e9 uma sequ\u00eancia de transa\u00e7\u00f5es locais onde, se uma falhar, o sistema executa a\u00e7\u00f5es compensat\u00f3rias para desfazer o trabalho realizado.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Exemplo pr\u00e1tico com Saga<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Cria pedido \u2705 (Transa\u00e7\u00e3o local 1)<\/li>\n\n\n\n<li>Atualiza estoque \u2705 (Transa\u00e7\u00e3o local 2)<\/li>\n\n\n\n<li>Processa pagamento \u274c (Falha na Transa\u00e7\u00e3o local 3)<\/li>\n<\/ol>\n\n\n\n<p>O sistema ent\u00e3o executa <strong>a\u00e7\u00f5es compensat\u00f3rias<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Cancela o pedido<\/li>\n\n\n\n<li>Reverte o estoque<\/li>\n<\/ul>\n\n\n\n<p>Assim, o sistema \u201cdesfaz\u201d o que j\u00e1 fez, mantendo os dados \u00edntegros e o neg\u00f3cio em um estado coerente.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Resumo pr\u00e1tico<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Conceito<\/th><th>O que \u00e9<\/th><th>Por que importa<\/th><\/tr><\/thead><tbody><tr><td><strong>Atomicidade<\/strong><\/td><td>Tudo ou nada<\/td><td>Garante consist\u00eancia e integridade dos dados<\/td><\/tr><tr><td><strong>Sem atomicidade<\/strong><\/td><td>Processo parcial<\/td><td>Gera dados inconsistentes e falhas de neg\u00f3cio<\/td><\/tr><tr><td><strong>Com atomicidade<\/strong><\/td><td>Reverte em caso de erro<\/td><td>Inspira confian\u00e7a e evita retrabalho<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Conclus\u00e3o<\/h2>\n\n\n\n<p>Atomicidade \u00e9 um daqueles conceitos simples, mas fundamentais. Ela \u00e9 o que garante que o sistema <strong>n\u00e3o perca a coer\u00eancia<\/strong>, mesmo diante de falhas.<\/p>\n\n\n\n<p>Seja com <strong>commit ou rolllback<\/strong> em transa\u00e7\u00f5es de banco de dados, ou com <strong>Sagas<\/strong> e a\u00e7\u00f5es compensat\u00f3rias em arquiteturas distribu\u00eddas, o importante \u00e9 que o sistema consiga <strong>agir como uma unidade confi\u00e1vel.<\/strong><\/p>\n\n\n\n<p>No fim, \u00e9 disso que se trata a engenharia de software: <strong>entregar confian\u00e7a em cada opera\u00e7\u00e3o.<\/strong> \ud83d\ude09<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Por que entender esse conceito pode salvar seu sistema (e sua sanidade)<\/p>\n","protected":false},"author":1,"featured_media":251,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20],"tags":[17,13,18,19,14,16,15],"class_list":["post-229","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arquitetura-de-software","tag-arquitetura-distribuida","tag-atomicidade","tag-boas-praticas-de-engenharia","tag-confiabilidade-de-sistemas","tag-consistencia-de-dados","tag-micro-servicos","tag-padrao-saga"],"aioseo_notices":[],"featured":false,"read_time":4,"_links":{"self":[{"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/posts\/229","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/comments?post=229"}],"version-history":[{"count":15,"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/posts\/229\/revisions"}],"predecessor-version":[{"id":257,"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/posts\/229\/revisions\/257"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/media\/251"}],"wp:attachment":[{"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/media?parent=229"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/categories?post=229"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/tags?post=229"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}