.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 |
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:
C# - Tasks x Threads. Qual a diferença
DateTime - Macoratti.net
Null o que é isso ? - Macoratti.net
Formatação de data e hora para uma cultura ...
C# - Calculando a diferença entre duas datas
NET - Padrão de Projeto - Null Object Pattern
C# - Fundamentos : Definindo DateTime como Null ...
C# - Os tipos Nullable (Tipos Anuláveis)