IBM & Turbonomic | Observando el desempeño de las aplicaciones ¡Participa del Webinar!

Escalar una arquitectura basada en eventos con un autoescalador basado en eventos

Resumen

Este patrón de código demuestra uno de los casos de uso de Kafka en una arquitectura de microservicios basada en eventos. El patrón de código le mostrará cómo autoescalar sus microservicios en Red Hat OpenShift utilizando KEDA (Kubernetes-based Event Driven Autoscaler). Los microservicios se escalarán en función del retraso del consumidor de un grupo de consumidores de Kafka.

Descripción

En este patrón de código, implementará un ejemplo de aplicación de entrega de alimentos que utiliza Kafka y Red Hat OpenShift. El ejemplo de aplicación está utilizando un tema Kafka para producir y consumir registros de pedidos. La aplicación tiene varios microservicios que consumen y procesan estos registros (mensajes). La arquitectura que se muestra más abajo explica las funciones de estos microservicios. Para escalar estos microservicios en función de los mensajes entrantes en lugar del Horizontal Pod Autoscaler (HPA) predeterminado que utiliza umbrales de CPU y memoria, se utilizará KEDA, un proyecto de código abierto.

Con el operador KEDA, puede escalar sus recursos de OpenShift con base en eventos. En el caso de Kafka, puede escalarlas en función del retraso del consumidor. El retraso del consumidor es la diferencia entre el mensaje generado más recientemente y el mensaje actual que se consume. Si el retraso del consumidor comienza a aumentar, esto suele significar que el consumidor no es capaz de seguir el ritmo de los mensajes entrantes en un tema de Kafka. Con KEDA, puede autoescalar el número de consumidores para que su grupo pueda consumir y procesar más mensajes con el fin de intentar mantener el ritmo de los mensajes entrantes. KEDA también admite más fuentes de eventos además de Kafka (como IBM MQ).

Este patrón de código también funciona con la plataforma Confluent for IBM Cloud Pak for Integration.

Flujo

Flowchart de todos los servicios relacionados funcionando dentro del proyecto

  1. El usuario inicia el simulador desde el frontend. El simulador envía solicitudes al servicio API para crear pedidos. El servicio API utiliza un método REST asíncrono. Las solicitudes obtienen un ID de correlación.
  2. El servicio API genera el mensaje para el tema Kafka.
  3. El consumidor del pedido toma el mensaje y lo procesa. Este servicio se encarga de validar la transacción. Este microservicio también puede generar mensajes para el tema Kafka.
  4. El consumidor de estado consume el mensaje cuando ve que la transacción ha sido creada y validada por el consumidor del pedido.
  5. El consumidor de estado actualiza la base de datos Redis con el resultado de la transacción. Este resultado se codifica con el ID de correlación. El microservicio de estado se encarga de actualizar el ID de correlación de las solicitudes REST con la respuesta. También es responsable de ayudar al servicio API para que obtenga las respuestas.
  6. Posteriormente, el frontend solicita una respuesta del servicio API utilizando el ID de correlación. El servicio API lo obtiene del microservicio de estado.
  7. El microservicio de restaurante está suscrito al tema de Kafka para que así los restaurantes sepan cuándo iniciar la preparación del pedido. También genera un mensaje para que el consumidor de entrega sepa cuándo debe recogerlo.
  8. El microservicio de entrega también está suscrito, así recibe una notificación cuando el pedido está listo para ser recogido. También genera un mensaje una vez que el pedido se completa para que el consumidor pueda actualizar la transacción en su base de datos.
  9. Los datos en tiempo real se suscriben al tema Kafka para que puedan asistir a los eventos en el gráfico del simulador. Los datos del pod proporcionan los datos del número de pods de los microservicios del consumidor a la imagen de la arquitectura del frontend.
  10. KEDA escalará el número de pods de los microservicios del consumidor cuando alcance un retraso del consumidor determinado que se configura en la implementación.

Instrucciones

Encuentre los pasos detallados para este patrón en el archivo Léame. Los pasos le mostrarán cómo:

  1. Clonar el repo.
  2. Crear y configurar el servicio Kafka.
  3. Desplegar los microservicios.
  4. Instalar KEDA.
  5. Desplegar KEDA ScaledObjects.
  6. Ejecutar la aplicación.