aspire2.jpg

Neste artigo, você vai conhecer sobre o .Net Aspire.

1. Afinal, o que é .Net Aspire?

Ecossistemas de nuvem, como Microsoft Azure e Amazon Web Services (AWS), estão profundamente enraizados 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 criados 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 determinados padrões de arquitetura para que o desempenho, a escalabilidade e a confiabilidade sejam ideais.

NET Aspire é um novo stack pronto para nuvem desenvolvido para .NET, projetado para permitir que os desenvolvedores criem aplicativos nativos da nuvem com rapidez e facilidade. Vejamos os recursos do .NET Aspire que abordam os desafios que vimos.

Orchestration

Os microsserviços e sua natureza fracamente acoplada aumentam a flexibilidade do seu aplicativo implantado, mas podem dificultar a configuração. A lista de serviços que compõem o aplicativo pode ficar pouco clara e o endpoint onde um microsserviço está disponível pode ser difícil de identificar. O .NET Aspire fornece funcionalidade de orquestração para que:

  • Você possa 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 endpoints para todos os componentes do aplicativo. O .NET Aspire realiza essa descoberta de serviço gerenciando cadeias de conexão e injetando-as em microsserviços quando necessário. Ao criar uma solução .NET Aspire, você verá um novo projeto na solução chamado .AppHost. Este projeto implementa orquestração para seu aplicativo e você deve garantir que seja o projeto inicial da solução.
Components

Os microsserviços geralmente possuem requisitos funcionais para serviços de apoio complexos que sustentam seus recursos. Por exemplo:

  • Armazenamento de dados. Para persistir os dados para dar suporte a catálogos de produtos, carrinhos de compras, armazenamentos de identidade e outros recursos, os microsserviços devem armazenar dados em armazenamentos estruturados ou semiestruturados.
  • 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 fracamente acoplados devem se comunicar entre si e você deve garantir que essa comunicação seja confiável mesmo quando o tráfego for alto ou as condições da rede forem desafiadoras. Um serviço que enfileira e distribui mensagens dos remetentes aos destinatários é um requisito comum.

No .NET Aspire, é fácil implementar esses serviços de apoio em cada microsserviço porque a stack inclui componentes do .NET Aspire. Cada componente é um pacote NuGet que você pode adicionar à sua solução e implementa uma interface padrão para um serviço de apoio. Essa interface padrão garante que seu microsserviço se conecte aos serviços de apoio de forma consistente e contínua.

Os componentes prontos para uso do .NET Aspire incluem:

  • Componentes de armazenamento de dados, como PostgreSQL, Banco de Dados SQL, Azure Cosmos DB e MongoDB.
  • Componentes de cache, como o componente para Redis.
  • Componentes de mensagens, como os do RabbitMQ e do Azure Service Bus.
Tooling

O .NET Aspire também adiciona ferramentas disponíveis para desenvolvedores no Visual Studio. Por exemplo:

Novos modelos de projeto permitem criar soluções .NET Aspire com apenas algumas etapas em um assistente. O painel do .NET Aspire é uma interface da web que aparece sempre que você inicia a solução no Visual Studio. Este painel exibe todos os microsserviços e serviços de apoio do aplicativo e você pode chamá-los para teste. Também mostra ferramentas de desempenho e monitoramento. Aparecem itens de menu extras, que você pode usar para adicionar um componente .NET Aspire, registrar um projeto para suporte ao orquestrador .NET Aspire ou concluir outras tarefas.

2. O que é uma aplicação cloud-native.

Um aplicativo nativo da nuvem é aquele projetado para fazer uso ideal das infraestruturas da nuvem para oferecer o melhor desempenho, disponibilidade e resiliência. Existem seis pilares das arquiteturas de software nativas da nuvem:

  • Cloud infrastructure: Os aplicativos nativos da nuvem são implantados em soluções de hospedagem na nuvem e não em farms de servidores locais.
  • Microservices. Os aplicativos nativos da nuvem são implementados como um conjunto de microsserviços, cada um dos quais implementa uma pequena parte da funcionalidade do negócio.
  • Containers. Microsserviços e outras partes do aplicativo são desenvolvidos e implantados em contêineres para garantir um ambiente de execução consistente.
  • Backing services. Recursos auxiliares, como bancos de dados e serviços de cache, podem ser usados ​​para fornecer funcionalidades comuns aos microsserviços.
  • Modern design. Os aplicativos nativos da nuvem estão em conformidade com a metodologia de aplicação de doze fatores, que inclui princípios como integração contínua/implantação contínua (CI/CD), descartabilidade, vinculação de porta e assim por diante.
  • Automation. Os aplicativos nativos da nuvem usam infraestrutura como código (IaC) para automatizar o provisionamento e a implantação da plataforma.

cloud-native-foundational-pillars.png

Para proporcionar agilidade, uma aplicação nativa em nuvem é composta por um conjunto de microsserviços. Cada microsserviço:

  • Implementa uma parte da funcionalidade completa.
  • Executa em processo próprio e fica isolado dos demais, frequentemente em um contêiner dedicado.
  • É construído por uma equipe separada.
  • Comunica-se com os outros, mas está fracamente acoplado.
  • Cada equipe escolhe as linguagens e tecnologias de sua preferência para implementar 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.

monolithic-vs-microservices1.png

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 por marcos de versões principais.
  • Como cada microsserviço é executado em um ou mais contêineres, você sabe que o ambiente será o mesmo em todos os ambientes de teste e produção.
  • Você pode usar um sistema de orquestração de contêineres, como o Kubernetes, para implantar instâncias extras rapidamente e responder à demanda adicional.

3. Desafios apresentados por aplicativos cloud-native.

Um aplicativo nativo da nuvem composto por 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 seja documentado cuidadosamente, pode ser difícil para os desenvolvedores entenderem quais componentes 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 acople fortemente um microsserviço a outro. Você também precisa que a comunicação permaneça 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. Você deve garantir que, em raras ocasiões em que um microsserviço esteja indisponível, o aplicativo lide com falhas de maneira robusta e mantenha 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 não pode usar o mesmo servidor de banco de dados que os demais. Você deve considerar como consultará dados de vários microsserviços e como implementará transações.
  • Segredos. Se seu aplicativo lidar com qualquer tipo de dado confidencial, cada microsserviço deverá autenticar cada solicitação recebida antes de retornar uma resposta. Freqüentemente, segredos como chaves de criptografia assimétricas e simétricas são usados ​​para proteger dados e identificar positivamente usuários e microsserviços que fazem chamadas. Você deve considerar como esses segredos são armazenados e trocados em seu aplicativo nativo da nuvem.
  • Integração do desenvolvedor. Novos desenvolvedores devem ser capazes de compreender a arquitetura do aplicativo e como trabalhar com ele rapidamente. Você deve garantir que os novos desenvolvedores possam se atualizar sem muito conhecimento sobre vários domínios ou configuração local.

Recentemente, o design de aplicativos nativos da nuvem vem ganhando popularidade, mas desafios como os desta seção desencorajam algumas equipes de adotar esse padrão. O .NET, por exemplo, possui todos os recursos necessários para resolver esses problemas, mas as soluções podem exigir investimentos significativos em treinamento e código personalizado.

Se você gostou do conteúdo, deixe um comentário ou uma reação para apoiar o projeto! Compartilhe com alguém e ajude a divulgar!

Até a próxima!

[ ]´s Degas.