Principais conclusões da arquitetura de microsserviços .NET
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 resumo e principais conclusões, as conclusões mais importantes deste guia são as seguintes.
Benefícios da utilização de contentores. As soluções baseadas em contêiner proporcionam economias de custos importantes porque ajudam a reduzir os problemas de implantação causados por dependências com falha em ambientes de produção. Os contêineres melhoram significativamente o DevOps e as operações de produção.
Os contentores serão omnipresentes. Os contêineres baseados em Docker estão se tornando o padrão de fato no setor, suportados por fornecedores-chave nos ecossistemas Windows e Linux, como Microsoft, Amazon AWS, Google e IBM. O Docker provavelmente em breve será onipresente tanto na nuvem quanto nos datacenters locais.
Contêineres como unidade de implantação. Um contêiner do Docker está se tornando a unidade padrão de implantação para qualquer aplicativo ou serviço baseado em servidor.
Microsserviços. A arquitetura de microsserviços está se tornando a abordagem preferida para aplicações de missão crítica distribuídas e grandes ou complexas baseadas em muitos subsistemas independentes na forma de serviços autônomos. Em uma arquitetura baseada em microsserviços, o aplicativo é criado como uma coleção de serviços que são desenvolvidos, testados, versionados, implantados e dimensionados de forma independente. Cada serviço pode incluir qualquer base de dados autónoma relacionada.
Design orientado a domínio e SOA. Os padrões de arquitetura de microsserviços derivam da arquitetura orientada a serviços (SOA) e do design controlado por domínio (DDD). Ao projetar e desenvolver microsserviços para ambientes com necessidades e regras de negócios em evolução, é importante considerar abordagens e padrões DDD.
Desafios dos microsserviços. Os microsserviços oferecem muitos recursos poderosos, como implantação independente, limites fortes de subsistemas e diversidade tecnológica. No entanto, eles também levantam muitos novos desafios relacionados ao desenvolvimento de aplicativos distribuídos, como modelos de dados fragmentados e independentes, comunicação resiliente entre microsserviços, eventual consistência e complexidade operacional resultante da agregação de informações de registro e monitoramento de vários microsserviços. Estes aspetos introduzem um nível de complexidade muito mais elevado do que uma aplicação monolítica tradicional. Como resultado, apenas cenários específicos são adequados para aplicativos baseados em microsserviços. Estes incluem aplicações grandes e complexas com vários subsistemas em evolução. Nesses casos, vale a pena investir em uma arquitetura de software mais complexa, pois proporcionará melhor agilidade e manutenção de aplicativos a longo prazo.
Contentores para qualquer aplicação. Os contêineres são convenientes para microsserviços, mas também podem ser úteis para aplicativos monolíticos baseados no .NET Framework tradicional, ao usar contêineres do Windows. Os benefícios do uso do Docker, como a solução de muitos problemas de implantação para produção e o fornecimento de ambientes de desenvolvimento e teste de última geração, aplicam-se a muitos tipos diferentes de aplicativos.
CLI versus IDE. Com as ferramentas da Microsoft, você pode desenvolver aplicativos .NET em contêineres usando sua abordagem preferida. Você pode desenvolver com uma CLI e um ambiente baseado em editor usando a CLI do Docker e o Visual Studio Code. Ou você pode usar uma abordagem focada no IDE com o Visual Studio e seus recursos exclusivos para o Docker, como depuração de vários contêineres.
Aplicações na nuvem resilientes. Em sistemas baseados em nuvem e sistemas distribuídos em geral, há sempre o risco de falha parcial. Como clientes e serviços são processos separados (contêineres), um serviço pode não ser capaz de responder em tempo hábil à solicitação de um cliente. Por exemplo, um serviço pode estar inativo devido a uma falha parcial ou para manutenção; o serviço pode estar sobrecarregado e responder lentamente às solicitações; ou pode não estar acessível por um curto período de tempo devido a problemas de rede. Portanto, um aplicativo baseado em nuvem deve abraçar essas falhas e ter uma estratégia para responder a essas falhas. Essas estratégias podem incluir políticas de repetição (reenvio de mensagens ou novas tentativas de solicitações) e implementação de padrões de disjuntor para evitar a carga exponencial de solicitações repetidas. Basicamente, os aplicativos baseados em nuvem devem ter mecanismos resilientes, baseados em infraestrutura de nuvem ou personalizados, como os de alto nível fornecidos por orquestradores ou barramentos de serviço.
Segurança. Nosso mundo moderno de contêineres e microsserviços pode expor novas vulnerabilidades. Há várias maneiras de implementar a segurança básica do aplicativo, com base na autenticação e autorização. No entanto, a segurança do contêiner deve considerar componentes-chave adicionais que resultem em aplicativos inerentemente mais seguros. Um elemento crítico da criação de aplicativos mais seguros é ter uma maneira segura de se comunicar com outros aplicativos e sistemas, algo que muitas vezes requer credenciais, tokens, senhas e afins, comumente referidos como segredos de aplicativos. Qualquer solução segura deve seguir as melhores práticas de segurança, como criptografar segredos em trânsito e em repouso e evitar que segredos vazem quando consumidos pelo aplicativo final. Esses segredos precisam ser armazenados e mantidos com segurança, como ao usar o Cofre de Chaves do Azure.
Orquestradores. Os orquestradores baseados em contêiner, como o Serviço Kubernetes do Azure e o Azure Service Fabric, são parte fundamental de qualquer microsserviço significativo e aplicativo baseado em contêiner. Essas aplicações carregam consigo alta complexidade, necessidades de escalabilidade e passam por constante evolução. Este guia apresentou os orquestradores e seu papel em soluções baseadas em microsserviços e contêineres. Se as necessidades do seu aplicativo estão movendo você para aplicativos em contêineres complexos, você achará útil procurar recursos adicionais para aprender mais sobre orquestradores.