{
 "id": 36986,
 "slug": "2020-03-03_arquitetura-de-software-monolitica-vs-microsservicos",
 "url": "https://agents.willem.com/pt/posts/2020-03-03_arquitetura-de-software-monolitica-vs-microsservicos/",
 "source_url": "https://willem.com/pt/2020-03-03_arquitetura-de-software-monolitica-vs-microsservicos/",
 "language": "pt",
 "date": "2020-03-03",
 "published": "2020-03-03T00:00:00+01:00",
 "created": "2025-06-26T22:10:03.931000+02:00",
 "updated": "2026-10-20T09:24:06.103000+02:00",
 "title": "Arquitetura de software monolítica vs microsserviços",
 "subtitle": "Escolher o design certo para o desenvolvimento da tua app",
 "summary": "Esta semana voei para Gotemburgo para me encontrar com pessoas de uma grande empresa internacional de transporte marítimo, para falar sobre o desenvolvimento de software empresarial. Na reunião estavam vários especialistas e um deles perguntou-me como escolher a arquitetura de software certa (para apps grandes, complexas e de nível empresarial). Uma ótima pergunta, que merece um artigo no blogue.",
 "topics": [
  "cloud",
  "data",
  "design",
  "programming",
  "server",
  "work"
 ],
 "author": {
  "name": "Willem L. Middelkoop",
  "url": "https://willem.com"
 },
 "provenance": {
  "kind": "model",
  "method": "Claude Sonnet, two passes (translation, then proofreading) against a glossary and hunspell (pt_PT)",
  "date": "2026-10-20",
  "reviewed_by_native_reader": false,
  "language": "pt",
  "source_language": "en"
 },
 "translations": [
  {
   "language": "en",
   "title": "Monolithic vs Microservices software architecture",
   "url": "https://agents.willem.com/en/posts/2020-03-03_monolithic-vs-microservices-software-architecture/",
   "source_url": "https://willem.com/en/2020-03-03_monolithic-vs-microservices-software-architecture/"
  },
  {
   "language": "nl",
   "title": "Monolithische versus Microservices softwarearchitectuur",
   "url": "https://agents.willem.com/nl/posts/2020-03-03_monolithische-versus-microservices-softwarearchitectuur/",
   "source_url": "https://willem.com/nl/2020-03-03_monolithische-versus-microservices-softwarearchitectuur/"
  },
  {
   "language": "de",
   "title": "Monolithische vs. Microservices-Softwarearchitektur",
   "url": "https://agents.willem.com/de/posts/2020-03-03_monolithische-vs-microservices-softwarearchitektur/",
   "source_url": "https://willem.com/de/2020-03-03_monolithische-vs-microservices-softwarearchitektur/"
  },
  {
   "language": "es",
   "title": "Arquitectura de software monolítica vs. microservicios",
   "url": "https://agents.willem.com/es/posts/2020-03-03_arquitectura-de-software-monolitica-vs-microservicios/",
   "source_url": "https://willem.com/es/2020-03-03_arquitectura-de-software-monolitica-vs-microservicios/"
  },
  {
   "language": "fr",
   "title": "Architecture logicielle monolithique ou microservices",
   "url": "https://agents.willem.com/fr/posts/2020-03-03_architecture-logicielle-monolithique-ou-microservices/",
   "source_url": "https://willem.com/fr/2020-03-03_architecture-logicielle-monolithique-ou-microservices/"
  },
  {
   "language": "it",
   "title": "Architettura software monolitica contro microservizi",
   "url": "https://agents.willem.com/it/posts/2020-03-03_architettura-software-monolitica-contro-microservizi/",
   "source_url": "https://willem.com/it/2020-03-03_architettura-software-monolitica-contro-microservizi/"
  },
  {
   "language": "pap",
   "title": "Arkitektura di software monolítiko versus microservices",
   "url": "https://agents.willem.com/pap/posts/2020-03-03_arkitektura-di-software-monolitiko-versus-microservices/",
   "source_url": "https://willem.com/pap/2020-03-03_arkitektura-di-software-monolitiko-versus-microservices/"
  },
  {
   "language": "fy",
   "title": "Monolityske tsjin microservices-softwarearsjitektuer",
   "url": "https://agents.willem.com/fy/posts/2020-03-03_monolityske-tsjin-microservices-softwarearsjitektuer/",
   "source_url": "https://willem.com/fy/2020-03-03_monolityske-tsjin-microservices-softwarearsjitektuer/"
  }
 ],
 "image": "https://willem.com/global/images/ac25803922f6.webp",
 "image_width": 2560,
 "images": [
  {
   "url": "https://willem.com/global/images/189c28c69d02.webp",
   "description": "De visita a uma grande empresa internacional de transporte marítimo para falar de software empresarial",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_36986_images-1.jpg"
  },
  {
   "url": "https://willem.com/global/images/b73d8bf569bc.webp",
   "description": "Exemplo de arquitetura de software simples: diferentes estruturas a compor um sistema, com diferentes relações entre elas",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_36986_images-2.png"
  },
  {
   "url": "https://willem.com/global/images/df6c62e25d7d.webp",
   "description": "Complexidade crescente à medida que aumenta o número de estruturas (e das suas relações)",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_36986_images-3.png"
  },
  {
   "url": "https://willem.com/global/images/875d62aa72f8.webp",
   "description": "Arquitetura de software monolítica",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_36986_images-4.png"
  },
  {
   "url": "https://willem.com/global/images/2705ce2c332c.webp",
   "description": "Arquitetura de software de microsserviços",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_36986_images-5.png"
  },
  {
   "url": "https://willem.com/global/images/e50e134c3fb7.webp",
   "description": "“O céu é o limite” se dominares a arquitetura que escolheste (só não a mudes em pleno voo!)",
   "manager_file": "148-bf2d6faf6057f115dc72e82d984e71359f16b48d8c42b4b41c2ee918cf46b556_ContentAsPost_36986_images-6.jpg"
  }
 ],
 "text": "Arquitetura de software\nQuando concebes apps, não deves pensar só no aspeto e na sensação de utilização: um bom design abrange também a forma como tudo funciona em conjunto. A arquitetura de software refere-se às estruturas fundamentais de um sistema de software; cada estrutura inclui elementos, as relações entre eles e as propriedades dos elementos e das suas relações.\nÉ análoga à arquitetura de um edifício. Depois de uma arquitetura estar definida e implementada, mudá-la fica caro. Por isso é boa ideia escolher a arquitetura de software certa antes de começares a construir.\nPara apps simples a arquitetura pode ser óbvia, mas à medida que a aplicação cresce em tamanho e funcionalidade, o número de estruturas num sistema pode aumentar depressa. Isto pode acontecer ao longo do tempo, à medida que crescem as necessidades dos teus clientes. Quanto mais estruturas, mais relações entre elas, mais complexo se torna.\nLidar com um design de software complexo\nSe esperas que o teu software trate de muitas coisas diferentes, é provável que tenhas de lidar com complexidade. Do ponto de vista arquitetónico, há várias abordagens para lidar com essa complexidade.\nArquitetura monolítica\nA melhor descrição da arquitetura monolítica é “um grande bloco”. Aqui, tudo o que a tua app faz faz parte da mesma base de código.\nNuma “arquitetura monolítica” o software é muitas vezes organizado em camadas, cada uma com diferentes tipos de componentes:\n- camada de apresentação: responsável pela interface de utilizador e/ou de programação de aplicações (UI / API).\n- lógica de negócio: é onde se definem as regras de negócio propriamente ditas. É o núcleo da aplicação, muito próximo dos processos reais da empresa.\n- camada de acesso a objetos de dados: oferece uma interface comum entre a aplicação em execução e os armazenamentos persistentes de backend.\n- base de dados e sistema de ficheiros: é onde ficam todos os dados e recursos estáticos (ficheiros, imagens, etc).\nQuanto maior a aplicação, maior cada camada. Isto torna mais difícil escalar uma arquitetura monolítica; a certa altura as coisas ficam simplesmente demasiado grandes e complexas.\nCada vez que alteras a aplicação, toda a base de código é afetada. Para aplicações (muito) grandes isto dificulta a manutenção do software, porque exige uma compreensão total da aplicação inteira.\nComo a aplicação inteira é interdependente, os problemas numa parte afetam muitas vezes o sistema todo. A comunicação entre as diferentes partes do sistema faz-se internamente, ao nível do código. Isto significa que as diferentes partes têm de ser programadas na mesma linguagem de programação (ou em linguagens compatíveis). É uma barreira à adoção de novas tecnologias (no futuro), porque não podes mudar facilmente a linguagem de programação de uma parte do sistema.\nArquitetura de microsserviços\nEm vez de construíres uma grande aplicação monolítica, podes dividir a aplicação em serviços mais pequenos e interligados. Cada microsserviço é uma pequena aplicação por si só, com a sua própria arquitetura (mas mais pequena e simples), lógica de negócio e camadas de dados.\nOs diferentes serviços comunicam entre si através de APIs definidas independentemente da tecnologia usada, muitas vezes numa “estrutura de API” comum como REST, JSON, Redis e XML. Isto permite que a combinação de microsserviços funcione como “um só sistema”.\nAo decompor a aplicação “de um grande bloco” em serviços mais pequenos, fica mais fácil compreender as diferentes partes do sistema. Isso facilita a manutenção, porque cada microsserviço pode ser desenvolvido de forma independente. Reduz também a barreira à adoção de novas tecnologias, porque és livre de escolher a tecnologia mais adequada a cada serviço. Uma parte do sistema pode ser programada numa linguagem diferente das outras. Isto permite que equipas diferentes (com competências diferentes) trabalhem em conjunto.\nA arte e a perícia de acertar na arquitetura de microsserviços vêm da capacidade de definir corretamente um microsserviço. Demasiado amplo ou demasiado granular pode destruir a arquitetura. Podes usar processos de negócio, uma separação hierárquica ou por domínio para definir cada microsserviço.\nO desafio da arquitetura de microsserviços é que acrescenta complexidade ao sistema inteiro, por exigir um mecanismo de comunicação distribuída. As diferentes APIs que se ligam entre si podem ser difíceis de testar e depurar. Torna-se mais difícil implementar alterações que abrangem vários serviços.\nDefinir, conceber e implementar as diferentes APIs entre serviços exige um acordo sobre os dados trocados, o que pode ser difícil de alcançar quando pretendes partilhar estruturas de dados extensas e não universais.\nMonitorizar e implantar uma arquitetura de microsserviços pode ser complexo quando os serviços aumentam em número. Há simplesmente mais para gerir, o que exige mais planeamento e coordenação para cada um dos serviços.\nEscolher a arquitetura certa\nO meu falecido pai disse-me uma vez que “se ganha mais com as coisas que não se fazem”. Construir aplicações complexas é difícil por natureza; o melhor que podes fazer é tentar simplificar, simplesmente não fazendo tudo. Foca-te nas coisas que realmente importam e faz essas bem.\nSe a tua aplicação é simples e leve, a arquitetura monolítica é o caminho. Desenvolvimento, implementação, manutenção, tudo é mais fácil quando as coisas são pequenas.\nSe não consegues escapar à complexidade, então deves mesmo considerar a arquitetura de microsserviços. Pergunta a ti próprio:\n- Consegues definir uma “linguagem comum” entre os teus microsserviços?\n- Existem processos de negócio claramente distintos?\n- Até que ponto são interdependentes esses processos de negócio?\n- Como esperas que a tua aplicação evolua com o tempo: esperas que cresça ou que encolha?\n- Quantas tecnologias de programação diferentes pensas usar? Esperas que isso mude no futuro?\n- Quem vai construir e manter o software? Essas pessoas têm experiência a gerir uma arquitetura destas?\nConclusão\nNão existe uma “bala de prata” para a pergunta sobre qual é a arquitetura de software certa. Ambas as abordagens têm vantagens e desvantagens.\nO melhor que podes fazer é tomar uma decisão consciente, bem ponderada, e apostar tudo nela!",
 "word_count": 976,
 "markdown_url": "https://agents.willem.com/pt/posts/2020-03-03_arquitetura-de-software-monolitica-vs-microsservicos/post.md"
}