{"id":17,"date":"2018-02-27T10:15:00","date_gmt":"2018-02-27T13:15:00","guid":{"rendered":"https:\/\/dcoder.io\/blog\/monolito-ou-microsservicos\/"},"modified":"2026-07-21T22:22:52","modified_gmt":"2026-07-22T01:22:52","slug":"monolito-ou-microsservicos","status":"publish","type":"post","link":"https:\/\/dcoder.io\/blog\/monolito-ou-microsservicos\/","title":{"rendered":"Mon\u00f3lito ou microsservi\u00e7os: como decidir sem quebrar o produto"},"content":{"rendered":"<p><strong>Comece com um mon\u00f3lito bem organizado.<\/strong> Microsservi\u00e7os resolvem um problema de equipe, times demais pisando no mesmo c\u00f3digo, antes de resolverem qualquer problema de escala. Se voc\u00ea tem um time de cinco pessoas, a arquitetura distribu\u00edda vai custar mais do que entregar.<\/p>\n<p>A conversa sobre microsservi\u00e7os costuma come\u00e7ar pelo lado errado. Algu\u00e9m l\u00ea que a Netflix tem centenas de servi\u00e7os independentes e conclui que o sistema da empresa tamb\u00e9m deveria ter. S\u00f3 que a Netflix chegou l\u00e1 empurrada por um problema que a maioria das empresas n\u00e3o tem: milhares de engenheiros que n\u00e3o podem ficar esperando uns aos outros para publicar uma altera\u00e7\u00e3o.<\/p>\n<h2>O custo que ningu\u00e9m mostra no diagrama<\/h2>\n<p>No slide, microsservi\u00e7os s\u00e3o caixinhas limpas ligadas por setas. Na opera\u00e7\u00e3o, cada seta \u00e9 uma chamada de rede que pode falhar, demorar ou responder pela metade.<\/p>\n<p>Quando voc\u00ea quebra um sistema em servi\u00e7os, ganha independ\u00eancia de deploy e paga com:<\/p>\n<ul>\n<li><strong>Transa\u00e7\u00f5es distribu\u00eddas.<\/strong> O que era um <code>BEGIN ... COMMIT<\/code> vira uma coreografia de compensa\u00e7\u00f5es. Pedido criado, pagamento falhou, estoque j\u00e1 foi reservado. E agora?<\/li>\n<li><strong>Depura\u00e7\u00e3o em v\u00e1rios lugares ao mesmo tempo.<\/strong> Uma requisi\u00e7\u00e3o lenta atravessa quatro servi\u00e7os. Sem rastreamento distribu\u00eddo, voc\u00ea est\u00e1 ca\u00e7ando no escuro.<\/li>\n<li><strong>Ambiente local.<\/strong> O desenvolvedor novo precisa subir sete servi\u00e7os para testar uma tela.<\/li>\n<li><strong>Versionamento de contratos.<\/strong> Mudar um campo de resposta deixa de ser um commit e vira uma negocia\u00e7\u00e3o entre times.<\/li>\n<\/ul>\n<p>Esse custo se paga quando voc\u00ea tem times o bastante para que o gargalo real seja a coordena\u00e7\u00e3o humana. Antes disso, \u00e9 imposto puro.<\/p>\n<h2>O mon\u00f3lito modular, que quase ningu\u00e9m tenta<\/h2>\n<p>Existe um degrau entre &#8220;tudo misturado&#8221; e &#8220;tudo separado&#8221;, e \u00e9 onde a maioria dos sistemas deveria viver por muito tempo. Um \u00fanico processo, um \u00fanico banco, mas com fronteiras internas levadas a s\u00e9rio.<\/p>\n<p>Na pr\u00e1tica significa tr\u00eas coisas. Cada dom\u00ednio (cobran\u00e7a, cat\u00e1logo, usu\u00e1rios) vive no seu pr\u00f3prio m\u00f3dulo, com a pr\u00f3pria camada de acesso a dados. M\u00f3dulos conversam por interfaces expl\u00edcitas, sem fu\u00e7ar as tabelas uns dos outros. E nada de <code>JOIN<\/code> entre tabelas de dom\u00ednios diferentes: se voc\u00ea precisou, a fronteira est\u00e1 no lugar errado.<\/p>\n<p>Feito assim, no dia em que um m\u00f3dulo precisar sair para um servi\u00e7o pr\u00f3prio, ele sai. As depend\u00eancias j\u00e1 est\u00e3o mapeadas e a extra\u00e7\u00e3o vira trabalho de alguns dias, n\u00e3o de trimestre.<\/p>\n<h2>Sinais concretos de que chegou a hora<\/h2>\n<p>N\u00e3o \u00e9 sensa\u00e7\u00e3o. \u00c9 evid\u00eancia:<\/p>\n<ol>\n<li><strong>Deploys travando uns aos outros.<\/strong> Duas equipes esperam a fila de publica\u00e7\u00e3o da outra de forma rotineira.<\/li>\n<li><strong>Perfis de escala muito diferentes.<\/strong> O m\u00f3dulo de relat\u00f3rios consome oito vezes mais CPU que o resto, e voc\u00ea escala a aplica\u00e7\u00e3o inteira s\u00f3 para dar conta dele.<\/li>\n<li><strong>Requisitos de disponibilidade diferentes.<\/strong> O checkout n\u00e3o pode cair. O painel administrativo interno pode ficar dez minutos fora sem drama nenhum.<\/li>\n<li><strong>Tecnologia incompat\u00edvel.<\/strong> Um peda\u00e7o do sistema precisa de processamento pesado que a linguagem principal n\u00e3o faz bem.<\/li>\n<\/ol>\n<p>Um item da lista j\u00e1 justifica extrair aquele peda\u00e7o espec\u00edfico. Nenhum item da lista n\u00e3o justifica reescrever tudo.<\/p>\n<h2>Extraia um, n\u00e3o trinta<\/h2>\n<p>Quando a hora chega, o caminho seguro \u00e9 sempre o mesmo. Escolha o m\u00f3dulo com a fronteira mais limpa e o menor acoplamento com o resto. Publique como servi\u00e7o. Deixe o mon\u00f3lito cham\u00e1-lo. E observe o que quebra, porque alguma coisa vai quebrar, e \u00e9 bem melhor descobrir com um servi\u00e7o do que com quinze.<\/p>\n<p>Se a primeira extra\u00e7\u00e3o for tranquila, a segunda tamb\u00e9m ser\u00e1. Se for um pesadelo, voc\u00ea acabou de descobrir algo valioso pelo pre\u00e7o mais barato poss\u00edvel.<\/p>\n<h2>O que costuma dar mais resultado antes disso<\/h2>\n<p>Boa parte dos sistemas que &#8220;precisam de microsservi\u00e7os&#8221; na verdade precisa de coisas bem menos glamourosas.<\/p>\n<p>\u00cdndices no banco, para come\u00e7ar. Falo s\u00e9rio: a maioria dos gargalos que vira justificativa de arquitetura \u00e9 uma consulta sem \u00edndice. Depois, cache no lugar certo, com invalida\u00e7\u00e3o pensada. Fila para o trabalho pesado, tirando envio de e-mail, gera\u00e7\u00e3o de relat\u00f3rio e processamento de imagem do caminho da requisi\u00e7\u00e3o do usu\u00e1rio. E, em \u00faltimo caso, um servidor maior. Escala vertical \u00e9 feia, \u00e9 limitada, e resolve muito mais casos do que a literatura admite.<\/p>\n<hr>\n<p>Precisa de uma segunda opini\u00e3o sobre a arquitetura antes de investir numa reescrita? A DCODER faz auditoria de arquitetura e desenvolve sistemas com atendimento direto do engenheiro respons\u00e1vel. <a href=\"https:\/\/dcoder.io\/\" rel=\"noopener\">Fale com o est\u00fadio em dcoder.io<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Microsservi\u00e7os resolvem um problema organizacional antes de resolver um problema t\u00e9cnico. Como saber se a sua empresa tem esse problema e o que fazer enquanto n\u00e3o tem.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[7,9,8],"class_list":["post-17","post","type-post","status-publish","format-standard","hentry","category-arquitetura","tag-arquitetura","tag-escalabilidade","tag-microsservicos"],"_links":{"self":[{"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/posts\/17","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/comments?post=17"}],"version-history":[{"count":1,"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/posts\/17\/revisions"}],"predecessor-version":[{"id":35,"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/posts\/17\/revisions\/35"}],"wp:attachment":[{"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/media?parent=17"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/categories?post=17"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/tags?post=17"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}