Otimize o Desenvolvimento de Microservices com Dapr e Amazon EKS

Microserviços e contêineres estão revolucionando a forma como aplicações modernas são construídas, implantadas e gerenciadas na nuvem. No entanto, desenvolver e operar microserviços pode introduzir uma complexidade significativa, muitas vezes exigindo que os desenvolvedores gastem um tempo valioso em preocupações transversais como descoberta de serviços, gerenciamento de estado e observabilidade.

Dapr, ou Runtime de Aplicações Distribuídas, é um runtime de código aberto para a construção de microserviços em ambientes de nuvem e de borda. Ele fornece blocos de construção independentes de plataforma, como descoberta de serviços, gerenciamento de estado, mensagens pub/sub e observabilidade prontamente disponíveis. Dapr alcançou o nível de maturidade graduado da CNCF (Cloud Native Computing Foundation) e é atualmente utilizado por muitas empresas.

Quando combinado com o Amazon Elastic Kubernetes Service (Amazon EKS), um serviço gerenciado de Kubernetes da AWS, Dapr pode acelerar a adoção de microserviços e contêineres, permitindo que os desenvolvedores se concentrem em escrever lógica de negócios sem se preocupar com a infraestrutura. O Amazon EKS torna a gestão de clusters Kubernetes fácil, permitindo escalabilidade sem esforço à medida que as cargas de trabalho mudam.

Neste post do blog, exploraremos como o Dapr simplifica o desenvolvimento de microserviços no Amazon EKS. Começaremos mergulhando em dois blocos de construção essenciais: invocação de serviços e gerenciamento de estado.

Invocação de Serviço

Uma comunicação contínua e confiável entre microsserviços é crucial. No entanto, os desenvolvedores frequentemente enfrentam desafios complexos como descoberta de serviço, padronização de APIs, segurança de canais de comunicação, tratamento gracioso de falhas e implementação de observabilidade.

Com a invocação de serviço do Dapr, esses problemas se tornam coisa do passado. Seus serviços podem se comunicar facilmente uns com os outros utilizando protocolos padrão da indústria como gRPC e HTTP/HTTPS. A invocação de serviço lida com todo o trabalho pesado, desde o registro e descoberta de serviço até as tentativas de requisição, criptografia, controle de acesso e rastreamento distribuído.

Gestão de Estado

O bloco de construção de gestão de estado do Dapr simplifica a forma como os desenvolvedores trabalham com o estado em suas aplicações. Ele fornece uma API consistente para armazenar e recuperar dados de estado, independentemente da loja de estado subjacente (por exemplo, Redis, AWS DynamoDB, Azure Cosmos DB).

Essa abstração permite aos desenvolvedores construir aplicações com estado sem se preocupar com as complexidades de gerenciar e dimensionar lojas de estado.

Pré-requisitos

Para seguir esta postagem, você deve ter o seguinte:

Arquitetura de Aplicativo

No diagrama abaixo, temos dois microsserviços: um aplicativo Python e um aplicativo Node.js. O aplicativo Python gera dados de pedidos e invoca o endpoint /neworder exposto pelo aplicativo Node.js. O aplicativo Node.js escreve os dados de pedidos recebidos em um armazenamento de estado (neste caso, Amazon ElastiCache) e retorna um ID de pedido para o aplicativo Python como resposta.

Ao aproveitar o bloco de construção de invocação de serviço do Dapr, o aplicativo Python pode se comunicar perfeitamente com o aplicativo Node.js sem se preocupar com descoberta de serviço, padronização de API, segurança de canal de comunicação, tratamento de falhas ou observabilidade. Ele implementa mTLS para fornecer comunicação segura entre serviços.

O Dapr lida com essas preocupações transversais, permitindo que os desenvolvedores se concentrem em escrever a lógica de negócios central.

Além disso, o bloco de construção de gerenciamento de estado do Dapr simplifica a interação do aplicativo Node.js com o armazenamento de estado (Amazon ElastiCache). O Dapr fornece uma API consistente para armazenar e recuperar dados de estado, abstraindo as complexidades de gerenciar e escalar o armazenamento de estado subjacente. Essa abstração permite que os desenvolvedores construam aplicações com estado sem se preocupar com as intricacias do gerenciamento do armazenamento de estado.

O cluster Amazon EKS hospeda um namespace chamado dapr-system, que contém os componentes do plano de controle do Dapr. O dapr-sidecar-injector injeta automaticamente um runtime do Dapr nos pods de microsserviços habilitados para Dapr.

Passos de Invocação de Serviço

  1. O serviço gerador de pedidos (aplicativo Python) invoca o método do aplicativo Node, /neworder. Essa solicitação é enviada para o sidecar local do Dapr, que está executando no mesmo pod que o aplicativo Python.
  2. O Dapr resolve o aplicativo de destino usando o provedor de DNS do cluster Amazon EKS e envia a solicitação para o sidecar do aplicativo Node.
  3. O sidecar do aplicativo Node então envia a solicitação para o microsserviço do aplicativo Node.
  4. O aplicativo Node então grava o ID do pedido recebido do aplicativo Python no Amazon ElasticCache.
  5. O aplicativo Node envia a resposta para seu sidecar local do Dapr.
  6. O sidecar do aplicativo Node encaminha a resposta para o sidecar do Dapr do aplicativo Python.
  7. O sidecar do aplicativo Python retorna a resposta para o aplicativo Python, que havia iniciado a solicitação para o método do aplicativo Node /neworder.

Passos de Implantação

Crie e Confirme um Cluster EKS

Para configurar um Amazon EKS (Elastic Kubernetes Service), você precisará seguir várias etapas. Aqui está uma visão geral do processo:

Pré-requisitos

  • Instale e configure a AWS CLI
  • Instale eksctl, kubectl e AWS IAM Authenticator

1. Crie um cluster EKS. Use eksctl para criar um cluster básico com um comando como:

Shell

 

2. Configure o kubectl. Atualize seu kubeconfig para conectar-se ao novo cluster:

Shell

 

3. Verifique o cluster. Verifique se seus nós estão prontos:

Shell

 

Instale o DAPR no seu cluster EKS

1. Instale o DAPR CLI:

Shell

 

2. Verifique a instalação:

Shell

 

3. Instale o DAPR e valide:

Shell

 

Os componentes do Dapr statestore e pubsub são criados no namespace padrão. Você pode verificar isso usando o comando abaixo:

Shell

 

Configure o Amazon ElastiCache como seu Dapr StateStore

Crie o Amazon ElastiCache para armazenar o estado do microserviço. Neste exemplo, estamos usando o ElastiCache sem servidor, que rapidamente cria um cache que escala automaticamente para atender à demanda de tráfego da aplicação, sem servidores para gerenciar.

Configure o grupo de segurança do ElastiCache para permitir conexões do seu cluster EKS. Para facilitar, mantenha-o na mesma VPC que seu cluster EKS. Tome nota do endpoint de cache, que precisaremos para os próximos passos.

Executando uma Aplicação de Exemplo

1. Clone o repositório Git da aplicação de exemplo:

Shell

 

2. Crie redis-state.yaml e forneça um endpoint do Amazon ElasticCache para redisHost:

YAML

 

Aplique a configuração yaml para o componente de armazenamento de estado usando kubectl.

Shell

 

3. Implante microserviços com o sidecar.

Para o aplicativo de nó do microserviço, acesse o arquivo /quickstarts/tutorials/hello-kubernetes/deploy/node.yaml e você notará as seguintes anotações. Elas dizem ao plano de controle do Dapr para injetar um sidecar e também atribuem um nome à aplicação Dapr.

YAML

 

Adicione uma anotação service.beta.kubernetes.io/aws-load-balancer-scheme: “internet-facing” em node.yaml para criar um AWS ELB.

YAML

 

Implante o aplicativo de nó usando kubectl. Acesse o diretório /quickstarts/tutorials/hello-kubernetes/deploy e execute o comando abaixo.

Shell

 

Obtenha o AWS NLB, que aparece sob o IP externo, na saída do comando abaixo.

Shell

 

Acesse o diretório /quickstarts/tutorials/hello-kubernetes, que possui o arquivo sample.json para executar o próximo passo.

Shell

 

Você pode verificar a saída acessando o endpoint /order usando o balanceador de carga em um navegador.

Plain Text

 

Você verá a saída como {“OrderId”:“42”}

Em seguida, implante o segundo aplicativo microserviço em Python, que possui uma lógica de negócios para gerar um novo ID de pedido a cada segundo e invocar o método do aplicativo Node /neworder.

Navegue até o diretório /quickstarts/tutorials/hello-kubernetes/deploy e execute o comando abaixo.

Shell

 

4. Validando e testando a implantação do seu aplicativo.

Agora que temos ambos os microserviços implantados. O aplicativo Python está gerando pedidos e invocando /neworder, como é evidente pelos logs abaixo.

Shell

 

SystemVerilog

 

Podemos ver que o aplicativo Node está recebendo as solicitações e escrevendo no armazenamento de estado Amazon ElasticCache em nosso exemplo.

Shell

 

SystemVerilog

 

Para confirmar se os dados estão persistidos no Amazon ElasticCache, acessamos o endpoint /order abaixo. Ele retorna o ID do pedido mais recente, que foi gerado pelo aplicativo Python.

Plain Text

 

Você verá uma saída com o pedido mais recente como {“OrderId”:“370”}.

Limpeza

Execute o comando abaixo para excluir as implantações do aplicativo Node e do aplicativo Python, juntamente com o componente de armazenamento de estado.

Navegue até o diretório /quickstarts/tutorials/hello-kubernetes/deploy para executar o comando abaixo.

YAML

 

Você pode desmontar seu cluster EKS usando o comando eksctl e excluir o Amazon ElastiCache.

Navegue até o diretório que possui o arquivo cluster.yaml usado para criar o cluster na primeira etapa.

Shell

 

Conclusão

Dapr e Amazon EKS formam uma poderosa aliança para o desenvolvimento de microsserviços. Dapr simplifica preocupações transversais, enquanto o EKS gerencia a infraestrutura do Kubernetes, permitindo que os desenvolvedores foquem na lógica central do negócio e aumentem a produtividade.

Essa combinação acelera a criação de aplicações escaláveis, resilientes e observáveis, reduzindo significativamente a sobrecarga operacional. É uma base ideal para a jornada dos seus microsserviços. Fique atento para futuras postagens explorando as capacidades de Dapr e EKS em rastreamento distribuído e observabilidade, oferecendo insights mais profundos e melhores práticas.

Source:
https://dzone.com/articles/streamline-microservices-development-with-dapr-amazon-eks