Arquitetura de microsserviços
Gorjeta
Este conteúdo é um trecho do eBook, .NET Microservices Architecture for Containerized .NET Applications, disponível no .NET Docs ou como um PDF para download gratuito que pode ser lido offline.
Como o nome indica, uma arquitetura de microsserviços é uma abordagem para criar um aplicativo de servidor como um conjunto de pequenos serviços. Isso significa que uma arquitetura de microsserviços é orientada principalmente para o back-end, embora a abordagem também esteja sendo usada para o front-end. Cada serviço é executado em seu próprio processo e se comunica com outros processos usando protocolos como HTTP/HTTPS, WebSockets ou AMQP. Cada microsserviço implementa um domínio de ponta a ponta específico ou capacidade de negócios dentro de um determinado limite de contexto, e cada um deve ser desenvolvido de forma autônoma e ser implantável independentemente. Finalmente, cada microsserviço deve possuir seu modelo de dados de domínio relacionado e lógica de domínio (soberania e gerenciamento descentralizado de dados) e pode ser baseado em diferentes tecnologias de armazenamento de dados (SQL, NoSQL) e diferentes linguagens de programação.
Qual deve ser o tamanho de um microsserviço? Ao desenvolver um microsserviço, o tamanho não deve ser o ponto importante. Em vez disso, o ponto importante deve ser criar serviços de acoplamento flexível para que você tenha autonomia de desenvolvimento, implantação e escala para cada serviço. É claro que, ao identificar e projetar microsserviços, você deve tentar torná-los tão pequenos quanto possível, desde que não tenha muitas dependências diretas com outros microsserviços. Mais importante do que a dimensão do microsserviço é a coesão interna que deve ter e a sua independência em relação a outros serviços.
Porquê uma arquitetura de microsserviços? Em suma, proporciona agilidade a longo prazo. Os microsserviços permitem uma melhor manutenção em sistemas complexos, grandes e altamente escaláveis, permitindo que você crie aplicativos com base em muitos serviços implantáveis de forma independente, cada um com ciclos de vida granulares e autônomos.
Como benefício adicional, os microsserviços podem ser expandidos de forma independente. Em vez de ter um único aplicativo monolítico que você deve dimensionar como uma unidade, você pode, em vez disso, dimensionar microsserviços específicos. Dessa forma, você pode dimensionar apenas a área funcional que precisa de mais poder de processamento ou largura de banda de rede para suportar a demanda, em vez de dimensionar outras áreas do aplicativo que não precisam ser dimensionadas. Isso significa economia de custos porque você precisa de menos hardware.
Figura 4-6. Implantação monolítica versus a abordagem de microsserviços
Como mostra a Figura 4-6, na abordagem monolítica tradicional, o aplicativo é dimensionado clonando todo o aplicativo em vários servidores/VM. Na abordagem de microsserviços, a funcionalidade é segregada em serviços menores, para que cada serviço possa ser dimensionado de forma independente. A abordagem de microsserviços permite mudanças ágeis e iteração rápida de cada microsserviço, porque você pode alterar áreas pequenas e específicas de aplicativos complexos, grandes e escaláveis.
A arquitetura de aplicativos refinados baseados em microsserviços permite a integração contínua e práticas de entrega contínua. Ele também acelera a entrega de novas funções no aplicativo. A composição refinada de aplicativos também permite executar e testar microsserviços isoladamente e evolui-los de forma autônoma, mantendo contratos claros entre eles. Contanto que você não altere as interfaces ou contratos, você pode alterar a implementação interna de qualquer microsserviço ou adicionar novas funcionalidades sem quebrar outros microsserviços.
Os seguintes são aspetos importantes para permitir o sucesso na entrada em produção com um sistema baseado em microsserviços:
Monitorização e verificações de saúde dos serviços e infraestruturas.
Infraestrutura escalável para os serviços (ou seja, nuvem e orquestradores).
Conceção e implementação de segurança a vários níveis: autenticação, autorização, gestão de segredos, comunicação segura, etc.
Entrega rápida de aplicativos, geralmente com diferentes equipes focadas em diferentes microsserviços.
Práticas e infraestrutura de DevOps e CI/CD.
Destes, apenas os três primeiros são abrangidos ou introduzidos no presente guia. Os dois últimos pontos, relacionados ao ciclo de vida do aplicativo, são abordados no e-book adicional Ciclo de vida do aplicativo Docker em contêiner com plataforma e ferramentas da Microsoft.
Recursos adicionais
Marcos Russinovich. Microsserviços: uma revolução de aplicativos impulsionada pela nuvem
https://azure.microsoft.com/blog/microservices-an-application-revolution-powered-by-the-cloud/Martin Fowler. Microsserviços
https://www.martinfowler.com/articles/microservices.htmlMartin Fowler. Pré-requisitos de microsserviço
https://martinfowler.com/bliki/MicroservicePrerequisites.htmlJimmy Nilsson. Computação em nuvem Chunk
https://www.infoq.com/articles/CCC-Jimmy-NilssonCésar da Torre. Ciclo de vida do aplicativo Docker em contêiner com plataforma e ferramentas da Microsoft (e-book para download)
https://aka.ms/dockerlifecycleebook