Optimiza el desarrollo de microservicios con Dapr y Amazon EKS

Los microservicios y los contenedores están revolucionando la forma en que se construyen, implementan y gestionan las aplicaciones modernas en la nube. Sin embargo, desarrollar y operar microservicios puede introducir una complejidad significativa, a menudo requiriendo que los desarrolladores pasen tiempo valioso en preocupaciones transversales como el descubrimiento de servicios, la gestión de estados y la observabilidad.

Dapr, o Distributed Application Runtime, es un tiempo de ejecución de código abierto para construir microservicios en entornos de nube y borde. Proporciona bloques de construcción independientes de la plataforma como el descubrimiento de servicios, la gestión de estados, la mensajería pub/sub y la observabilidad listos para usar. Dapr ha alcanzado el nivel de madurez graduado de CNCF (Cloud Native Computing Foundation) y actualmente es utilizado por muchas empresas.

Al combinarse con Amazon Elastic Kubernetes Service (Amazon EKS), un servicio de Kubernetes administrado de AWS, Dapr puede acelerar la adopción de microservicios y contenedores, permitiendo a los desarrolladores centrarse en escribir la lógica empresarial sin preocuparse por la infraestructura subyacente. Amazon EKS facilita la gestión de los clústeres de Kubernetes, permitiendo escalar sin esfuerzo a medida que cambian las cargas de trabajo.

En esta publicación de blog, exploraremos cómo Dapr simplifica el desarrollo de microservicios en Amazon EKS. Comenzaremos sumergiéndonos en dos bloques de construcción esenciales: invocación de servicios y gestión de estados .

Invocación de Servicios

La comunicación fluida y confiable entre microservicios es crucial. Sin embargo, los desarrolladores a menudo luchan con tareas complejas como el descubrimiento de servicios, la estandarización de APIs, la seguridad de los canales de comunicación, el manejo de fallos de manera elegante e implementar observabilidad.

Con la invocación de servicios de Dapr, estos problemas se convierten en cosa del pasado. Sus servicios pueden comunicarse fácilmente entre sí utilizando protocolos estándar de la industria como gRPC y HTTP/HTTPS. La invocación de servicios se encarga de toda la carga pesada, desde el registro y descubrimiento de servicios hasta los reintentos de solicitud, cifrado, control de acceso y trazabilidad distribuida.

Gestión del Estado

El bloque de construcción de gestión de estado de Dapr simplifica la forma en que los desarrolladores trabajan con el estado en sus aplicaciones. Proporciona una API consistente para almacenar y recuperar datos de estado, independientemente del almacén de estado subyacente (por ejemplo, Redis, AWS DynamoDB, Azure Cosmos DB).

Esta abstracción permite a los desarrolladores construir aplicaciones con estado sin preocuparse por las complejidades de gestionar y escalar almacenes de estado.

Prerrequisitos

Para seguir esta publicación, debes tener lo siguiente:

Arquitectura de la aplicación

En el diagrama a continuación, tenemos dos microservicios: una aplicación de Python y una aplicación de Node.js. La aplicación de Python genera datos de pedidos e invoca el endpoint /neworder expuesto por la aplicación de Node.js. La aplicación de Node.js escribe los datos de pedido entrantes en un almacén de estado (en este caso, Amazon ElastiCache) y devuelve un ID de pedido a la aplicación de Python como respuesta.

Al aprovechar el bloque de construcción de invocación de servicio de Dapr, la aplicación de Python puede comunicarse sin problemas con la aplicación de Node.js sin preocuparse por el descubrimiento de servicios, la estandarización de la API, la seguridad del canal de comunicación, el manejo de fallos o la observabilidad. Implementa mTLS para proporcionar comunicación segura de servicio a servicio.

Dapr maneja estas preocupaciones transversales, permitiendo a los desarrolladores centrarse en escribir la lógica empresarial central.

Además, el bloque de construcción de gestión de estado de Dapr simplifica cómo interactúa la aplicación Node.js con la tienda de estado (Amazon ElastiCache). Dapr proporciona una API consistente para almacenar y recuperar datos de estado, abstrayendo las complejidades de gestionar y escalar la tienda de estado subyacente. Esta abstracción permite a los desarrolladores construir aplicaciones con estado sin preocuparse por las complejidades de la gestión de la tienda de estado.

El clúster de Amazon EKS aloja un espacio de nombres llamado dapr-system, que contiene los componentes del plano de control de Dapr. El dapr-sidecar-injector inyecta automáticamente un tiempo de ejecución de Dapr en las cápsulas de los microservicios habilitados para Dapr.

Pasos de Invocación de Servicio

  1. El servicio generador de pedidos (aplicación Python) invoca el método de la aplicación Node, /neworder. Esta solicitud se envía al sidecar de Dapr local, que se está ejecutando en la misma cápsula que la aplicación Python. 
  2. Dapr resuelve la aplicación objetivo utilizando el proveedor de DNS del clúster de Amazon EKS y envía la solicitud al sidecar de la aplicación Node.
  3. El sidecar de la aplicación Node luego envía la solicitud al microservicio de la aplicación Node.
  4. La aplicación Node luego escribe el ID del pedido recibido de la aplicación Python en Amazon ElasticCache.
  5. La aplicación Node envía la respuesta a su sidecar de Dapr local.
  6. El sidecar de la aplicación Node reenvía la respuesta al sidecar de Dapr de la aplicación Python. 
  7. El sidecar de la aplicación Python devuelve la respuesta a la aplicación Python, que había iniciado la solicitud al método /neworder de la aplicación Node. 

Pasos de Implementación

Crear y confirmar un clúster de EKS

Para configurar un clúster de Amazon EKS (Elastic Kubernetes Service), deberás seguir varios pasos. Aquí tienes una descripción general del proceso:

Requisitos previos

  • Instalar y configurar AWS CLI
  • Instalar eksctl, kubectl y AWS IAM Authenticator

1. Crear un clúster de EKS. Usa eksctl para crear un clúster básico con un comando como:

Shell

 

2. Configurar kubectl. Actualiza tu kubeconfig para conectarte al nuevo clúster:

Shell

 

3. Verificar el clúster. Verifica si tus nodos están listos:

Shell

 

Instalar DAPR en tu clúster de EKS

1. Instalar DAPR CLI:

Shell

 

2. Verificar la instalación:

Shell

 

3. Instalar DAPR y validar:

Shell

 

Los componentes de Dapr statestore y pubsub se crean en el espacio de nombres predeterminado. Puedes verificarlo usando el siguiente comando:

Shell

 

Configurar Amazon ElastiCache como tu Dapr StateStore

Crea Amazon ElastiCache para almacenar el estado del microservicio. En este ejemplo, estamos utilizando ElastiCache serverless, que crea rápidamente una caché que escala automáticamente para satisfacer las demandas de tráfico de la aplicación sin necesidad de servidores que gestionar.

Configure el grupo de seguridad de ElastiCache para permitir conexiones desde su clúster EKS. Por simplicidad, manténgalo en la misma VPC que su clúster EKS. Tome nota del punto de conexión de la caché, que necesitaremos para los pasos siguientes.

Ejecutando una Aplicación de Ejemplo

1. Clona el repositorio Git de la aplicación de ejemplo:

Shell

 

2. Crea redis-state.yaml y proporciona un punto de conexión de Amazon ElasticCache para redisHost:

YAML

 

Aplica la configuración yaml para el componente de almacenamiento de estado utilizando kubectl.

Shell

 

3. Implementa microservicios con el sidecar.

Para la aplicación de nodo de microservicio, navega hasta el archivo /quickstarts/tutorials/hello-kubernetes/deploy/node.yaml y notarás las siguientes anotaciones. Indica al plano de control de Dapr que inyecte un sidecar y también asigna un nombre a la aplicación de Dapr.

YAML

 

Agrega una anotación service.beta.kubernetes.io/aws-load-balancer-scheme: “internet-facing” en node.yaml para crear un AWS ELB.

YAML

 

Implementa la aplicación de nodo utilizando kubectl. Navega al directorio /quickstarts/tutorials/hello-kubernetes/deploy y ejecuta el siguiente comando.

Shell

 

Obtén el AWS NLB, que aparece bajo IP Externa, en la salida del siguiente comando.

Shell

 

Navega al directorio /quickstarts/tutorials/hello-kubernetes, que tiene el archivo sample.json para ejecutar el siguiente paso.

Shell

 

Puedes verificar la salida accediendo al endpoint /order utilizando el balanceador de carga en un navegador.

Plain Text

 

Verá la salida como {“OrderId”:“42”}

A continuación, implemente la segunda aplicación de microservicio Python, que tiene una lógica empresarial para generar un nuevo ID de orden cada segundo e invocar el método de la aplicación Node /neworder.

Navegue hasta el directorio /quickstarts/tutorials/hello-kubernetes/deploy y ejecute el siguiente comando.

Shell

 

4. Validación y prueba de implementación de su aplicación.

Ahora que tenemos ambos microservicios implementados. La aplicación Python está generando órdenes e invocando /neworder como se evidencia en los registros a continuación.

Shell

 

SystemVerilog

 

Podemos ver que la aplicación Node está recibiendo las solicitudes y escribiendo en la tienda de estado Amazon ElasticCache en nuestro ejemplo. 

Shell

 

SystemVerilog

 

Para confirmar si los datos están persistidos en Amazon ElasticCache, accedemos al punto final /order a continuación. Devuelve el ID de orden más reciente, que fue generado por la aplicación Python.

Plain Text

 

Verá una salida con la orden más reciente como {“OrderId”:“370”}

Limpieza

Ejecute el siguiente comando para eliminar las implementaciones de la aplicación Node y la aplicación Python junto con el componente de la tienda de estado. 

Navegue hasta el directorio /quickstarts/tutorials/hello-kubernetes/deploy para ejecutar el siguiente comando.

YAML

 

Puede desmontar su clúster EKS utilizando el comando eksctl y eliminar Amazon ElastiCache.

Navegue al directorio que tiene el archivo cluster.yaml utilizado para crear el clúster en el primer paso.

Shell

 

Conclusión

Dapr y Amazon EKS forman una poderosa alianza para el desarrollo de microservicios. Dapr simplifica las preocupaciones transversales, mientras que EKS gestiona la infraestructura de Kubernetes, permitiendo a los desarrolladores centrarse en la lógica empresarial principal y aumentar la productividad.

Esta combinación acelera la creación de aplicaciones escalables, resilientes y observables, reduciendo significativamente la sobrecarga operativa. Es una base ideal para tu viaje con microservicios. Estén atentos a próximas publicaciones que explorarán las capacidades de Dapr y EKS en el rastreo distribuido y observabilidad, ofreciendo una visión más profunda y las mejores prácticas.

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