Arquitetura de Microservice x Monolítica

Atualmente, uma das buzzwords, mais faladas em diversos seminários de tecnologia por todo o mundo é Microservices, desta forma, irei apoia-los em desvendar um pouco deste modelo arquitetural. Iremos conceituar este conceito, com uma grande definição do Martin Fowler: “The term “Microservice Architecture” has sprung up over the last few years to describe a particular way of designing software applications as suites of independently deployable services. While there is no precise definition of this architectural style, there are certain common characteristics around organization around business capability, automated deployment, intelligence in the endpoints, and decentralized control of languages and data.” Para esta definição, é destacado duas coisas: independências das linguagens de programação, isto é, cada serviço poderá ser programado (codificado) em qualquer linguagem e deployment, deverá ser automatizado, uma vez, que a partir de agora, existirão vários serviços rodando, que passarão para deployment.

Uma forma simples de representar este conceito é através da comparação entre o modelo monolítico x microservice, conforme representado na imagem a seguir.

Fonte: http://martinfowler.com/articles/microservices.html

Para o caso do modelo arquitetura monolítico, todas as funcionalidades estão agrupadas dentro um grande sistema, fazendo dela uma aplicação monolítica, ou seja, uma aplicação feita em apenas uma unidade. Em contra partida, para o modelo de microservice, onde, esta arquitetura possui um grande sistema quebrado em serviços menores e mais leves, por critério de funcionalidades de negócio, integrados via HTTP (ou alguma arquitetura de mensageria).

 

Como tudo em desenvolvimento de software, existem vantagens e desvantagens, da utilização de cada um dos modelos arquiteturais.

  • Modelo arquitetural Monolítico
Vantagens Desvantagens
Facilidade de Deploy Ponto único de falha

 

  • Modelo arquitetura Microservice
Vantagens Desvantagens
Ponto diversificado de falhar (sistema fica em funcionamento se algum serviço falhar) Complexidade de Deploy (muitas unidades para o deploy)
Cada unidade (serviço), poderá ser desenvolvido em qualquer linguagem
Facilidade de comunicação da equipe, haja visto, que existem serviços independentes.