O que é o .NET Aspire?
Os ecossistemas de nuvem, como o Microsoft Azure e a Amazon Web Services (AWS), estão profundamente incorporados no setor de TI e em soluções de hospedagem populares para aplicativos e serviços Web. É provável que um sistema de hospedagem em nuvem seja a escolha padrão para seus aplicativos. Portanto, você precisa garantir que os aplicativos que você cria sejam projetados para tirar o máximo proveito deles.
Um aplicativo nativo da nuvem é aquele que você projeta especificamente para ser executado na nuvem. Os aplicativos geralmente exibem certos padrões de arquitetura para que o desempenho, a escalabilidade e a confiabilidade sejam ideais.
Imagine que você trabalha para uma empresa de roupas e equipamentos para atividades ao ar livre. O conselho pede que você desenvolva um novo aplicativo web eShop para o principal site voltado para o cliente da empresa. Sua equipe está familiarizada com o modelo de microsserviços e você quer saber se o uso do .NET Aspire pode facilitar o projeto.
Nesta unidade, você aprende mais sobre arquiteturas nativas da nuvem e vê os desafios que podem ser envolvidos na sua criação. Você também vê como o .NET Aspire pode enfrentar esses desafios.
O que é uma aplicação nativa da cloud?
Um aplicativo nativo da nuvem é aquele que é projetado para fazer o uso ideal das infraestruturas de nuvem para oferecer o melhor desempenho, disponibilidade e resiliência. Existem seis pilares das arquiteturas de software nativas da nuvem:
- Infraestrutura na nuvem. Os aplicativos nativos da nuvem são implantados em soluções de hospedagem em nuvem e não em farms de servidores locais.
- Microsserviços. Os aplicativos nativos da nuvem são implementados como um conjunto de microsserviços, cada um dos quais implementa uma pequena parte da funcionalidade de negócios.
- Contentores. Microsserviços e outras partes do aplicativo são desenvolvidos e implantados em contêineres para garantir um ambiente de execução consistente.
- Serviços de apoio. Recursos auxiliares, como bancos de dados e serviços de cache, podem ser usados para fornecer funcionalidade comum a microsserviços.
- Design moderno. Os aplicativos nativos da nuvem estão em conformidade com a metodologia Twelve-Factor Application, que inclui princípios como Integração Contínua/Implantação Contínua (CI/CD), descartabilidade, vinculação de porta e assim por diante.
- Automatização. Os aplicativos nativos da nuvem usam a infraestrutura como código (IaC) para automatizar o provisionamento e a implantação da plataforma.
Para proporcionar agilidade, um aplicativo nativo da nuvem é composto por um conjunto de microsserviços. Cada microsserviço:
- Implementa uma parte da funcionalidade completa.
- Executa em seu próprio processo e é isolado dos outros, freqüentemente em um contêiner dedicado.
- É construído por uma equipe separada.
- Comunica com os outros, mas está frouxamente acoplado.
Cada equipa escolhe as linguagens e tecnologias que prefere para implementar o seu microsserviço. Cada microsserviço é implantado e dimensionado independentemente dos outros.
O diagrama a seguir ilustra as diferenças entre um aplicativo Web monolítico tradicional e um aplicativo Web composto por microsserviços.
Os aplicativos nativos da nuvem podem trazer muitas vantagens para o seu negócio. Por exemplo:
- Ao hospedar seu aplicativo na nuvem, você não precisa criar e manter infraestrutura, como servidores de hospedagem, sistemas operacionais e serviços de suporte.
- Como cada microsserviço é desenvolvido de forma independente, você pode implantar continuamente novas funcionalidades neles sem ter que esperar por outras equipes ou marcos principais da versão.
- Como cada microsserviço é executado em um ou mais contêineres, você sabe que o ambiente é o mesmo em todos os ambientes de teste, preparação e produção.
- Como você pode usar um sistema de orquestração de contêineres, como o Kubernetes, pode implantar instâncias extras rapidamente para responder à crescente demanda.
Desafios apresentados por aplicativos nativos da nuvem
Um aplicativo nativo da nuvem que consiste em vários microsserviços e com muitos recursos pode se tornar complexo e apresentar desafios que não surgem com aplicativos monolíticos. Por exemplo:
- Definição do aplicativo. A menos que documentado cuidadosamente, pode ser difícil para os desenvolvedores entender quais integrações compõem o aplicativo nativo da nuvem completo.
- Comunicação. Cada microsserviço pode precisar trocar mensagens ou dados com outros microsserviços para formular uma resposta a uma solicitação do usuário. Embora você deva habilitar essa comunicação, você deve fazê-lo de uma forma que não associe fortemente os microsserviços uns aos outros. Você também precisa de comunicação para permanecer confiável em momentos de alta demanda ou durante falhas de serviço.
- Resiliência. Nenhum serviço de hospedagem pode estar 100% disponível. Nas raras ocasiões em que um microsserviço não está disponível, deves garantir que o aplicativo seja robusto na gestão de falhas e aguarde as solicitações até que o serviço retorne.
- Dados distribuídos. Cada microsserviço implementa sua própria camada de armazenamento de dados e pode não usar o mesmo servidor de banco de dados que os outros. Você deve considerar como consulta dados de vários microsserviços e como implementa transações.
- Segredos. Se seu aplicativo lida com qualquer tipo de dados confidenciais, cada microsserviço deve autenticar todas as solicitações recebidas antes de retornar uma resposta. Muitas vezes, segredos como chaves de criptografia assimétricas e simétricas são usados para proteger dados e identificar positivamente usuários e microsserviços de chamadas. Você deve considerar como esses segredos são armazenados e trocados em seu aplicativo nativo da nuvem.
- Integração de desenvolvedores. Novos desenvolvedores devem ser capazes de entender a arquitetura do aplicativo e como trabalhar com ele rapidamente. Você deve garantir que os novos desenvolvedores possam se atualizar sem muito conhecimento entre domínios ou configuração local.
Recentemente, o design de aplicativos nativos da nuvem tem ganhado popularidade, mas desafios como os desta seção desencorajam algumas equipes de adotar esse padrão. O .NET, por exemplo, tem todos os recursos necessários para resolver esses problemas, mas as soluções podem precisar de um investimento significativo em treinamento e código personalizado.
O que é o .NET Aspire?
O .NET Aspire é uma nova pilha compatível com a nuvem criada para o .NET, projetada para permitir que os desenvolvedores criem aplicativos nativos na nuvem rapidamente e facilmente. Vejamos os recursos do .NET Aspire que abordam os desafios que descrevemos.
Orquestração
Os microsserviços e sua natureza de acoplamento flexível aumentam a flexibilidade do seu aplicativo implantado, mas podem dificultar a configuração. A lista de serviços que compõem o aplicativo pode se tornar obscura e o ponto de extremidade onde um microsserviço está disponível pode ser difícil de identificar. O .NET Aspire fornece funcionalidade de orquestração para que:
- Você pode especificar claramente para todas as equipes os projetos .NET, contêineres, executáveis e recursos de nuvem que compõem o aplicativo.
- Os microsserviços podem descobrir automaticamente pontos de extremidade para todas as integrações da aplicação. O .NET Aspire realiza essa descoberta de serviço gerenciando cadeias de conexão e injetando-as em microsserviços onde necessário.
Quando você cria uma solução .NET Aspire , você vê um novo projeto na solução chamado <SolutionName>. AppHost. Este projeto implementa a orquestração para seu aplicativo e você deve garantir que seja o projeto inicial da solução.
Integrações
Os microsserviços geralmente têm requisitos funcionais para serviços de suporte complexos que sustentam seus recursos. Por exemplo:
- Armazenamento de dados. Para persistir dados para oferecer suporte a catálogos de produtos, carrinhos de compras, repositórios de identidades e outros recursos, os microsserviços devem armazenar dados em repositórios estruturados ou semiestruturados.
- Armazenamento em cache. Para maximizar o desempenho, os microsserviços podem armazenar respostas parciais ou completas em um cache para que solicitações semelhantes subsequentes possam ser atendidas mais rapidamente.
- Mensagens. Os microsserviços de acoplamento flexível devem se comunicar uns com os outros e você deve garantir que essa comunicação seja confiável, mesmo quando o tráfego é alto ou as condições da rede são desafiadoras. Um serviço que enfileira e distribui mensagens de remetentes para destinatários é um requisito comum.
No .NET Aspire, é fácil implementar esses serviços de apoio em cada microsserviço porque a plataforma inclui integrações do .NET Aspire. Cada integração é um pacote NuGet que você pode adicionar à sua solução e implementa uma interface padrão para um serviço de suporte. Essa interface padrão garante que seu microsserviço se conecte aos seus serviços de suporte de forma consistente e perfeita.
As integrações pré-configuradas do .NET Aspire incluem:
- Integrações de armazenamento de dados, como as de PostgreSQL, Banco de Dados SQL, Azure Cosmos DB e MongoDB.
- Integrações de cache, como a integração para Redis.
- Integrações de mensagens como as do RabbitMQ e do Azure Service Bus.
Importante
O .NET Aspire inclui muitas integrações que funcionam com serviços do Azure, como Armazenamento do Azure e Serviço de Barramento do Azure, mas não é necessário usar o Azure para projetos do .NET Aspire, e eles funcionam igualmente bem com serviços subjacentes fora do Azure, como RabbitMQ e MongoDB.
Ferramentas
O .NET Aspire também adiciona às ferramentas disponíveis para desenvolvedores no Visual Studio. Por exemplo:
- Novos modelos de projeto permitem que você crie soluções .NET Aspire com algumas etapas em um assistente.
- O painel do .NET Aspire é uma interface da Web que aparece sempre que você inicia a solução a partir do Visual Studio. Esse painel exibe todos os microsserviços e serviços de suporte para o aplicativo, e você pode chamá-los para teste. Ele também mostra ferramentas de desempenho e monitoramento.
- Itens de menus extras aparecem, que você pode usar para adicionar uma integração com o .NET Aspire , registrar um projeto para suporte ao orquestrador do .NET Aspire ou concluir outras tarefas.
Nota
Mais adiante neste módulo, você aprenderá mais sobre as ferramentas do .NET Aspire .