Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Dica
Esse conteúdo é um trecho do eBook, arquitetura de microsserviços do .NET para aplicativos .NET em contêineres, disponível em do .NET Docs ou como um PDF para download gratuito que pode ser lido offline.
Como resumo e pontos principais, a seguir estão as conclusões mais importantes deste guia.
Benefícios do uso de contêineres. As soluções baseadas em contêiner fornecem uma economia de custos importante 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 contêineres serão onipresentes. Os contêineres baseados no Docker estão se tornando o padrão de fato no setor, com suporte dos principais fornecedores nos ecossistemas do Windows e do Linux, como Microsoft, Amazon AWS, Google e IBM. O Docker provavelmente será onipresente em breve nos datacenters locais e na nuvem.
Contêineres como uma 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 preferencial para aplicativos de missão crítica distribuídos e grandes ou complexos com base em muitos subsistemas independentes na forma de serviços autônomos. Em uma arquitetura baseada em microsserviço, o aplicativo é criado como uma coleção de serviços que são desenvolvidos, testados, com versão, implantados e dimensionados de forma independente. Cada serviço pode incluir qualquer banco de dados autônomo relacionado.
Design controlado pelo domínio e SOA. Os padrões de arquitetura de microsserviços derivam da SOA (arquitetura orientada a serviço) e do DDD (design controlado pelo domínio). Ao projetar e desenvolver microsserviços para ambientes com necessidades e regras de negócios em evolução, é importante considerar as abordagens e padrões de DDD.
Desafios de microsserviços. Os microsserviços oferecem muitos recursos poderosos, como implantação independente, limites de subsistema fortes e diversidade tecnológica. No entanto, eles também geram muitos novos desafios relacionados ao desenvolvimento de aplicativos distribuídos, como modelos de dados fragmentados e independentes, comunicação resiliente entre microsserviços, consistência eventual e complexidade operacional resultante da agregação de informações de registro em log e monitoramento de vários microsserviços. Esses aspectos introduzem um nível de complexidade muito maior do que um aplicativo monolítico tradicional. Como resultado, apenas cenários específicos são adequados para aplicativos baseados em microsserviço. Eles incluem aplicativos grandes e complexos com vários subsistemas em evolução. Nesses casos, vale a pena investir em uma arquitetura de software mais complexa, pois fornecerá melhor agilidade a longo prazo e manutenção de aplicativos.
Contêineres para qualquer aplicação. Os contêineres são convenientes para microsserviços, mas também podem ser úteis para aplicativos monolíticos com base no .NET Framework tradicional, ao usar contêineres do Windows. Os benefícios de usar o Docker, como resolver muitos problemas de implantação em produção e fornecer ambientes de desenvolvimento e teste de última geração, se aplicam 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. Outra opção é usar uma abordagem centrada em IDE com o Visual Studio e seus recursos exclusivos para Docker, como a depuração de aplicativos de vários contêineres.
Aplicativos de 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áplizado à solicitação de um cliente. Por exemplo, um serviço pode estar inoperante devido a uma falha parcial ou para manutenção; o serviço pode estar sobrecarregado e respondendo lentamente às solicitações; ou pode não estar acessível por um curto período devido a problemas de rede. Portanto, um aplicativo baseado em nuvem deve adotar essas falhas e ter uma estratégia em vigor para responder a essas falhas. Essas estratégias podem incluir políticas de repetição (reenviar mensagens ou repetir solicitações) e implementar padrões de disjuntor para evitar a carga exponencial de solicitações repetidas. Basicamente, os aplicativos baseados em nuvem devem ter mecanismos resilientes, com base na 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 na autorização. No entanto, a segurança do contêiner deve considerar componentes de chave adicionais que resultam 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 geralmente requer credenciais, tokens, senhas e similares, comumente conhecidos como segredos do aplicativo. Qualquer solução segura deve seguir as práticas recomendadas de segurança, como criptografar segredos em trânsito e em repouso e impedir que segredos sejam vazados quando consumidos pelo aplicativo final. Esses segredos precisam ser armazenados e mantidos com segurança, como ao usar o Azure Key Vault.
Orquestradores. Orquestradores baseados em contêiner, como o Serviço de Kubernetes do Azure e o Azure Service Fabric, são parte fundamental de qualquer aplicativo significativo baseado em microsserviço e contêiner. Esses aplicativos carregam consigo alta complexidade, necessidades de escalabilidade e passam por constante evolução. Este guia introduziu orquestradores e sua função em soluções baseadas em microsserviço e em contêineres. Se suas necessidades de aplicativo estiverem movendo você em direção a aplicativos em contêineres complexos, você achará útil procurar recursos adicionais para aprender mais sobre orquestradores.