Otimize o Desenvolvimento de Microserviços com Dapr e Amazon EKS

Microservices e containers estão revolucionando a forma como as aplicações modernas são construídas, implantadas e gerenciadas na nuvem. No entanto, desenvolver e operar microservices pode introduzir complexidades significativas, frequentemente exigindo que os desenvolvedores dediquem tempo valioso a questões transversais como descoberta de serviço, gerenciamento de estado e observabilidade.

O Dapr, ou Distributed Application Runtime, é um tempo de execução de código aberto para construir microservices em ambientes de nuvem e de borda. Ele fornece blocos de construção independentes de plataforma, como descoberta de serviço, gerenciamento de estado, mensagens pub/sub e observabilidade prontos para uso. O Dapr avançou para o nível de maturidade graduado do CNCF (Cloud Native Computing Foundation) e é atualmente utilizado por muitas empresas.

Ao ser combinado com o Amazon Elastic Kubernetes Service (Amazon EKS), um serviço gerenciado de Kubernetes da AWS, o Dapr pode acelerar a adoção de microservices e containers, permitindo que os desenvolvedores se concentrem em escrever a lógica de negócios sem se preocupar com a infraestrutura subjacente. O Amazon EKS facilita o gerenciamento de clusters de Kubernetes, possibilitando o dimensionamento sem esforço conforme as cargas de trabalho mudam.

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

Invocação de Serviço

Uma comunicação perfeita e confiável entre microsserviços é crucial. No entanto, os desenvolvedores frequentemente enfrentam dificuldades com tarefas complexas 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 entre si usando protocolos padrão da indústria como gRPC e HTTP/HTTPS. A invocação de serviço lida com todo o trabalho pesado, desde registro e descoberta de serviço até tentativas de solicitação, criptografia, controle de acesso e rastreamento distribuído.

Gerenciamento de Estado

O bloco de construção de gerenciamento 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 do armazenamento 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 armazenamentos de estado.

Pré-requisitos

Para seguir este post, 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 do pedido recebido 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 facilmente com o aplicativo Node.js sem se preocupar com descoberta de serviço, padronização de API, segurança do canal de comunicação, tratamento de falhas ou observabilidade. Ele implementa mTLS para fornecer comunicação segura de serviço para serviço.

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

Além disso, o bloco de construção de gerenciamento de estado do Dapr simplifica como o aplicativo Node.js interage com a loja de estado (Amazon ElastiCache). O Dapr fornece uma API consistente para armazenar e recuperar dados de estado, abstraindo as complexidades de gerenciar e dimensionar a loja de estado subjacente. Essa abstração permite aos desenvolvedores construir aplicativos com estado sem se preocupar com as complexidades do gerenciamento da loja 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 tempo de execução 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. Esta solicitação é enviada para o sidecar local do Dapr, que está em execução 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 escreve 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 aplicativo Python.
  7. O sidecar do aplicativo Python retorna a resposta para o aplicativo Python, que iniciou a solicitação para o método do aplicativo Node /neworder.

Passos de Implantação

Criar e Confirmar um Cluster EKS

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

Pré-requisitos

  • Instalar e configurar o AWS CLI
  • Instalar eksctl, kubectl e AWS IAM Authenticator

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

Shell

 

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

Shell

 

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

Shell

 

Instalar o DAPR no seu cluster EKS

1. Instalar o DAPR CLI:

Shell

 

2. Verificar a instalação:

Shell

 

3. Instalar o DAPR e validar:

Shell

 

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

Shell

 

Configurar o Amazon ElastiCache como seu Dapr StateStore

Criar o Amazon ElastiCache para armazenar o estado do microsserviço. Neste exemplo, estamos usando o ElastiCache serverless, que cria rapidamente um cache que se ajusta automaticamente para atender às demandas de tráfego da aplicação sem a necessidade de gerenciar servidores.

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

Executando um Aplicativo de Amostra

1. Clone o repositório Git do aplicativo de amostra:

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ó de microserviço, acesse o arquivo /quickstarts/tutorials/hello-kubernetes/deploy/node.yaml e você notará as seguintes anotações. Isso informa ao plano de controle do Dapr para injetar um sidecar e também atribui 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 passo abaixo.

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 Python do microsserviço, que tem uma lógica de negócios para gerar um novo ID de pedido a cada segundo e chamar 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 ambos os microsserviços estão implantados. O aplicativo Python está gerando pedidos e invocando /neworder como evidenciado nos logs abaixo.

Shell

 

SystemVerilog

 

Podemos ver que o aplicativo Node está recebendo as solicitações e escrevendo no estado do 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 último ID do pedido, 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 no primeiro passo.

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 de negócios principal e melhorem 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 de seus microsserviços. Fique atento para próximas postagens explorando as capacidades de Dapr e EKS em rastreamento distribuído e observabilidade, oferecendo insights mais profundos e boas práticas.

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