Microsserviços ASP.NET Core: aplicativos que serão responsáveis por uma única fatia "vertical" de uma arquitetura geral de aplicativo/serviço.

Por que os microsserviços do ASP.NET Core?

Há muitos opiniões e recomendações sobre o que são microsserviços, quando usar microsserviços em vez de um monólito e muito mais.

Este artigo não abordará essas questões em sua totalidade. Em vez disso, tentaremos apenas caminhar antes de voar.

Vamos considerar que estamos explorando arquitetura de microsserviçose queremos aproveitar a persistência poliglota para usar um banco de dados NoSQL (Couchbase) para um caso de uso específico. Para o nosso projeto, vamos analisar um Banco de dados por serviço e usar o Docker (docker-compose) para gerenciar o banco de dados para o ASP.NET Core Microservices prova de conceito.

Os bancos de dados de documentos NoSQL, como o Couchbase, são bons para uma variedade cada vez maior de casos de uso incluindo gerenciamento de perfil, gerenciamento de conteúdo, personalização e muito mais.

Esta postagem do blog usará o Couchbase Server, mas você também pode aplicar os conceitos básicos aqui aos outros bancos de dados em sua arquitetura de microsserviços.

Estou usando ASP.NET Core porque é uma estrutura de código aberto e multiplataforma. Além disso, Visual Studio (embora não seja obrigatório) nos fornecerá algumas ferramentas úteis para trabalhar com o Docker e o docker-compose. Mas, novamente, você pode aplicar os conceitos básicos aqui a qualquer estrutura da Web ou linguagem de programação de sua escolha.

Etapa 1: Criar uma nova solução

Usarei o Visual Studio para esta postagem do blog, mas você pode obter o mesmo efeito (talvez com um pouco mais de trabalho) no Visual Studio Code ou na linha de comando antiga.

Crie um novo projeto ASP.NET Core. Chamei o meu de HelloMicroservice (e o O código-fonte completo está disponível no GitHub para sua referência.

New project in Visual Studio

Para meu microsserviço ASP.NET Core, também tomei essas decisões no Visual Studio:

  • Aplicativo Web MVC (gera algum HTML básico para fins de exibição, mas você poderia usar um projeto de API com a mesma facilidade)
  • ASP.NET Core 3 (o ASP.NET Core mais recente no momento em que este artigo foi escrito)
  • Configurar para HTTPS (não é estritamente necessário, mas é uma boa ideia)
  • Habilitar o suporte ao Docker

Visual Studio new project wizard

Neste ponto, você deve ter um projeto ASP.NET Core muito básico. Em seguida, adicionaremos alguma orquestração e um banco de dados.

Etapa 2: Adicionar suporte ao docker-compose

Clique com o botão direito do mouse no projetoe clique em "Add" (Adicionar) e depois em "Container Orchestrator Support" (Suporte ao Orquestrador de Contêineres).

Add Container O

Lembre-se de que o único objetivo deste projeto é iniciar o desenvolvimento de uma prova de conceito para microsserviços ASP.NET Core. É mais fácil lidar com o Docker-compose do que com o Kubernetes para o desenvolvimento de máquinas locais. É por isso que estou escolhendo a opção "Docker Compose", mesmo que, eventualmente, eu queira implantação para o Kubernetes.

Docker Compose

Também escolhi o Linux, porque é nele que espero implantar mais tarde.

Depois de concluir essa etapa, um item "docker-compose" será adicionado à sua solução.

Docker Compose in Visual Studio

Se você der uma olhada no arquivo docker-compose.yml, verá que ele tem um definido nele: hellomicroservice. Observe também que o "Docker Compose" agora aparece na barra de ferramentas do Visual Studio.

Docker Compose button

Nesse ponto, você pode pressionar CTRL+F5 para executar. O Visual Studio usará o Docker Compose para criar uma imagem de seu projeto e executá-la no Docker. Seu navegador deve abrir automaticamente e você verá a tela padrão de "Bem-vindo"

ASP.NET Welcome

Estamos progredindo. A próxima coisa que precisamos fazer é executar um banco de dados com o docker-compose e fazer com que nosso aplicativo ASP.NET Core se comunique com o banco de dados. Quando essas próximas etapas forem concluídas, teremos o shell mínimo básico do ASP.NET Core Microservices.

Etapa 3: Adicionar orquestração de banco de dados ao docker-compose

O Couchbase faz imagens de contêineres oficiais disponíveis no Docker Hub. Para usar essas imagens, vamos adicionar outro serviço em serviços: no arquivo docker-compose.yml:

Os princípios básicos do que você precisa são:

  • couchbase: Isso inicia uma definição de serviço chamada "couchbase" (você pode dar outro nome, se quiser)
  • imagem: couchbase:enterprise-6.0.3 A imagem a ser usada para esse serviço. É sempre uma boa ideia ser explícito e usar uma tag como essa, caso contrário, o padrão pode ser a imagem "mais recente", o que não é necessariamente o que você deseja.
  • portos: Isso define quais números de porta devem ser expostos externo do Docker. Estou expondo apenas 8091, porque esse é o número da porta da interface do usuário do Couchbase (consulte também: Requisitos de rede e firewall)

O volumes: não é estritamente necessário. No entanto, o uso de um volume significa que, mesmo quando a imagem do couchbase parar de ser executada, os arquivos de dados em /opt/couchbase/var será salvo no computador host (o sistema de arquivos do seu computador) e poderá ser montado novamente na próxima vez que você executar a imagem. Isso significa que todos os dados que você colocar no couchbase ainda estarão lá na próxima vez que você executar a imagem.

Se você pressionar CTRL+F5 para executar o aplicativo, o Docker Compose iniciará a orquestração, incluindo ambos o serviço de atendimento ao cliente e a imagem do couchbase. Elas não têm nada a ver uma com a outra (ainda), a não ser o fato de estarem sendo executadas lado a lado dentro do Docker. Se você abrir uma linha de comando e executar docker psvocê verá algo parecido com isto:

(Reduzi bastante o texto acima para que as informações relevantes coubessem na largura desta postagem do blog).

Etapa 4: Alterações de configuração

Como usei o estoque couchbase:enterprise-6.0.3 Imagem do Docker, ainda preciso abrir a interface do usuário do Couchbase (http://localhost:8091) e configurar o cluster manualmente. Consulte as "próximas etapas" no final para ver algumas opções de automatização.

Set up Couchbase Cluster

Há muitos documentação para orientá-lo nesse processoPortanto, não vou repetir isso aqui. Observarei que estou usando as credenciais "Administrador" e "senha". Também usei criou um balde chamado hellomicroservice.

Depois de criar o bucket, a próxima etapa é fazer com que o aplicativo ASP.NET Core se comunique com o banco de dados. Abra o docker-compose.yml e atualize a variável hellomicroservices: definição para:

Vamos detalhar cada uma dessas partes:

  • ambiente: Isso diz ao docker-compose para criar variáveis de ambiente.
  • Servidores do Couchbase__0 O nome de uma variável de ambiente. A nomenclatura aqui é importante. Isso corresponderá ao appsettings.json posteriormente.
  • http://couchbase:8091/ A URL de que o ASP.NET Core precisará para se conectar ao serviço couchbase. Se você nomeou o serviço com algo diferente de "couchbase", use esse nome aqui também.
  • depende_de É assim que o docker-compose saberá em que ordem iniciar os serviços.
  • comando Um comando a ser executado quando o serviço for iniciado.

Neste exemplo, estou usando wait-for-it.shO script de inicialização do Couchbase Server, um script que aguardará a disponibilidade do host/porta fornecido. Na imagem padrão do Docker do Couchbase Server, levará alguns segundos para que o Couchbase Server seja realmente iniciado, portanto, esse script aguardará até que isso aconteça para prosseguir.

Usando o wait-for-it é opcionalmas quando você está no meio do desenvolvimento, isso pode lhe poupar algumas dores de cabeça. (Observe que não incluí o wait-for-it.sh no meu arquivo exemplo de repositório do GitHub).

Por fim, para fazer com que o projeto ASP.NET Core se comunique com o Couchbase, usei o comando Extensão de injeção de dependência do NuGet:

A configuração será extraída do arquivo appsettings.json por padrão. NO ENTANTOLembre-se de que uma variável de ambiente de Servidores do Couchbase__0 é definido em docker-compose.yml. O ASP.NET Core examinará as variáveis de ambiente e substituirá as configurações de aplicativos usando esses valores. Portanto, não importa realmente o que valor está em appsettings.json (ou appsettings.Development.json) para "Servers":

No entanto, o nome de usuário/senha ainda são lidos nas configurações de aplicativos.

Etapa 5: Usando o banco de dados

Por fim, vamos nos certificar de que o aplicativo ASP.NET Core seja capaz de se comunicar com o banco de dados. Eu adicionei um Inserir e Obter para o HomeController Índice método:

Algumas alterações correspondentes à exibição em Index.cshtml:

Agora, temos os fundamentos do ASP.NET Core Microservices instalados. Pressione CTRL+F5 para executar o serviço. Quando o navegador abrir, você verá algo parecido com isto:

ASP.NET Core Microservices in action

Se, em vez disso, você vir uma mensagem de erro, verifique se configurou o Couchbase Server corretamente, se criou um bucket com o nome correto, se usou as credenciais de login corretas em appsettings.json e se o docker-compose.yml corresponde aos exemplos acima.

Próximas etapas

Agora você pode desenvolver seus microsserviços ASP.NET Core. Como desenvolvedor, a imagem do Docker do seu aplicativo ASP.NET Core será sua entrega. Dependendo de onde/como sua organização planeja implantar, as próximas etapas variam muito.

Isso é apenas o começo, mas aqui estão mais algumas coisas que você deve explorar:

Volumes. Feche completamente o Visual Studio. Após alguns segundos, as imagens do Docker desaparecerão (tente docker ps novamente para verificar isso). Agora, abra o Visual Studio e pressione CTRL+F5 novamente. Como usamos um volume, os dados que você armazenou no Couchbase ainda devem estar lá. Se é isso que você deseja para o desenvolvimento, está tudo certo.

Automação. Se preferir que os dados sejam apagados e regenerados todas as vezes, você precisará criar uma imagem personalizada do Docker. Você também pode dar uma olhada no excelente projeto couchbasefakeitque inclui várias ferramentas, variáveis, scripts, etc., para inicializar o Couchbase Server e preenchê-lo com índices e dados falsos. Você pode ver um exemplo disso em um A ideia que Brant Burnett compartilhou comigo.

Kubernetes. Se você planeja implantar o Couchbase Server (ou mesmo qualquer banco de dados) em contêineres, provavelmente vai querer dar uma olhada no Kubernetes e no Operadores de Kubernetesque facilitam muito o gerenciamento de bancos de dados em clusters do Kubernetes. Muitos fornecedores de bancos de dados criaram operadores Kubernetes, e o Couchbase foi o primeiro fornecedor de NoSQL a lançar um Operador autônomo de Kubernetes.

Agradecimentos especiais

Esta postagem do blog não teria sido possível sem a enorme ajuda da Comunidade Couchbase.

Agradecimentos a Brant Burnett por compartilhar comigo o processo de desenvolvimento de microsserviços de sua empresa.

Agradeço a Calvin Allen por ter trabalhado nesse processo comigo em minha Transmissão de codificação ao vivo na Twitch e para apresentando-me ao wait-for-it.

Autor

Postado por Matthew Groves

Matthew D. Groves é um cara que adora programar. Não importa se é C#, jQuery ou PHP: ele enviará solicitações de pull para qualquer coisa. Ele tem programado profissionalmente desde que escreveu um aplicativo de ponto de venda QuickBASIC para a pizzaria de seus pais nos anos 90. Atualmente, ele trabalha como gerente sênior de marketing de produtos da Couchbase. Seu tempo livre é passado com a família, assistindo aos Reds e participando da comunidade de desenvolvedores. Ele é autor de AOP in .NET, Pro Microservices in .NET, autor da Pluralsight e Microsoft MVP.

Deixar uma resposta