.NET - Apresentando a arquitetura de Microsserviços


  Neste artigo vamos iniciar a apresentação da arquitetura de Microsserviços e mostrar uma  implementação na plataforma .NET

Os Microsserviços são uma abordagem arquitetural de desenvolvimento de software na qual uma aplicação monolítica é decomposta em vários pequenos serviços independentes, cada um focado em executar uma função específica

Esses serviços interagem uns com os outros por meio de APIs (Interfaces de Programação de Aplicativos) ou outros mecanismos de comunicação. Assim, cada microsserviço é uma unidade autônoma que pode ser desenvolvida, implantada e dimensionada de forma independente.

A figura a seguir mostra um exemplo de uma arquitetura de microsserviços:

As principais caracteristicas dos microsservicos

Vejamos as seguir as principais características dos microsserviços:

Independência: Cada microsserviço é autônomo e pode ser desenvolvido e implantado independentemente dos outros.

Foco na função: Cada microsserviço realiza uma função específica e é responsável por um conjunto limitado de recursos ou serviços.

Comunicação via API: Os microsserviços interagem entre si por meio de APIs, o que permite a comunicação e a integração.

Escalabilidade: Os microsserviços podem ser escalados individualmente, o que ajuda a lidar com diferentes demandas em partes específicas da aplicação.

Tecnologia diversificada: Cada microsserviço pode ser desenvolvido usando a tecnologia mais adequada para sua função, o que oferece flexibilidade tecnológica.

Facilita a manutenção: A manutenção e a atualização de um sistema de microsserviços podem ser mais fáceis devido ao isolamento de funções.

A seguir vamos recordar os conceitos sobre a arquitetura monolítica para depois compararmos com a arquitetura de microsserviços.

O que é a arquitetura Monolítica

A arquitetura monolítica, muitas vezes referida como um sistema de "monolito“, é um estilo de arquitetura de software em que uma aplicação é desenvolvida como uma única unidade monolítica.

Nesse modelo, todos os componentes e funcionalidades da aplicação são integrados em um único código-fonte e implantados como uma única unidade.

O termo "monolito" se refere a uma única estrutura, com todos os componentes e serviços necessários relacionados encapsulados em um único pacote, refletindo a ideia de que o sistema é uma entidade única e indivisível.

A seguir temos as principais características desta arquitetura :

Componentes integrados: Todos os componentes da aplicação, como a lógica de negócios, a interface do usuário e o banco de dados, estão fortemente acoplados e interligados no mesmo código-fonte.

Implantação única: A aplicação é implantada como uma única unidade, geralmente em um único servidor.

Ciclo de desenvolvimento monolítico: As atualizações e modificações da aplicação geralmente requerem a implantação de todo o sistema, mesmo que apenas uma parte seja alterada.

Complexidade: À medida que a aplicação cresce, a complexidade do código e a manutenção podem se tornar desafiadoras.

Escalabilidade limitada: A escalabilidade é geralmente alcançada por meio de replicação de servidores inteiros, o que pode ser ineficiente.

Dificuldade de tecnologia diversificada: A utilização de diferentes tecnologias para diferentes partes da aplicação pode ser mais difícil devido à natureza integrada do código..

As figuras abaixo apresentam um exemplo padrão para a arquitetura monolítica:

Principais diferenças entre as arquiteturas de Micrososerviços e Monolítica

Estrutura geral:

Acoplamento:

Escalabilidade:

Tecnologia diversificada:

Implantação e atualizações:

Complexidade:

Comunicação entre componentes:

Princípios fundamentais dos microsserviços

O design de microserviços possui princípios IDEALS semelhantes aos princípios SOLID. Esses principios estão designados pelo acrostico IDEALS onde temos:

I – Princípio de Segregação de Interface: Este princípio é derivado do Princípio de Segregação de Interfaces, também conhecido como Princípio da Interface Única. Ele sugere que as interfaces dos microsserviços devem ser específicas para as necessidades dos consumidores, evitando interfaces excessivamente amplas e complexas. Cada microsserviço deve expor apenas as funcionalidades necessárias para os clientes que o consomem, promovendo uma separação clara das responsabilidades e minimizando a sobrecarga de comunicação.

D – Princípio da implantabilidade (é por sua conta): Esse princípio enfatiza a independência e a autonomia dos microsserviços em relação à sua implantação. Cada microsserviço é responsável por seu próprio ciclo de vida, o que significa que ele pode ser implantado de forma independente, escalado e gerenciado sem afetar outros serviços.

E – Princípio Orientado a Eventos (Event-Driven): Este princípio promove a comunicação entre os microsserviços por meio de eventos e mensagens assíncronas. Em vez de comunicação síncrona, os microsserviços podem publicar eventos quando algo significativo acontece e outros microsserviços podem se inscrever para reagir a esses eventos.

A – Princípio da disponibilidade acima da consistência: Este princípio sugere que, em um ambiente de microsserviços, é muitas vezes preferível manter a disponibilidade dos serviços, mesmo que isso signifique aceitar uma possível falta de consistência imediata. Isso é especialmente importante em cenários de falhas parciais, onde a consistência rígida pode ser difícil de alcançar.

L – Princípio do Acoplamento Frouxo: Este princípio enfatiza a necessidade de manter baixo acoplamento entre os microsserviços. Os serviços devem ser independentes e não devem depender fortemente uns dos outros. O baixo acoplamento facilita a manutenção, a atualização e a escalabilidade individual de cada serviço.

S – Princípio da Responsabilidade Única: Cada microsserviço deve ter uma responsabilidade clara e bem definida, executando uma única função ou conjunto de funções. Isso torna o serviço mais coeso e mais fácil de entender, desenvolver e manter.

Esses princípios são fundamentais para orientar o projeto e a implementação de microsserviços, ajudando a criar sistemas mais flexíveis, escaláveis e resilientes.

Migrando de monolíto para microsserviços

A seguir veremos os desafios enfrentados ao migrar para Microsserviços.

A migração para uma arquitetura de microsserviços, pode ser um processo desafiador, exigindo a reescrita e a reengenharia significativa do código existente. 

A mudança para uma arquitetura de microsserviços muitas vezes exige uma mudança na cultura organizacional, incluindo práticas de desenvolvimento ágeis, colaboração entre equipes e a capacidade de tomar decisões descentralizadas.

A segurança em ambientes de microsserviços é crítica, pois a superfície de ataque pode ser expandida devido ao grande número de serviços expostos. Gerenciar autenticação, autorização e proteção contra ameaças de segurança em toda a arquitetura é um desafio.

Os microsserviços dependem uns dos outros, assim, a comunicação entre os serviços é um desafio e como a aplicação pode ser composta de centenas ou milhares de microsserviços, ela se tornará mais complexa e mais difícil de testar.

Você precisa implantar cada serviço individualmente, assim, a implantação de múltiplos serviços pode ser muito complicada.

À medida que os serviços evoluem, é comum ter várias versões em execução simultaneamente. Gerenciar essas versões e garantir que as atualizações sejam tratadas sem interrupções para os usuários pode ser um desafio.

Na próxima parte do artigo vamos apresentar um exemplo bem simples de utilização da arquitetura de microsserviços na plataforma .NET.

E estamos conversados...

"Porque Deus enviou o seu Filho ao mundo, não para que condenasse o mundo, mas para que o mundo fosse salvo por ele."
João 3:17

Referências:


José Carlos Macoratti