Crea tus aplicaciones orientadas a eventos utilizando Red Hat Developer Sandbox

pexels-kevin-ku-577585
Foto de Kevin Ku en Pexels

Primero, ¿Qué es EDA?

La Arquitectura Orientada a Eventos (EDA) es una forma de diseñar aplicaciones y servicios para responder a la información en tiempo real basada en el envío y recepción de información sobre eventos individuales. EDA se basa en la comunicación asíncrona no bloqueante entre los productores de eventos y los consumidores de eventos, que son capaces de liberar el consumo de recursos mientras esperan el retorno de la respuesta. Los eventos mejoran el desacoplamiento de los servicios de contexto delimitado (DDD), ahora bien definidos, técnicamente y en tiempo de ejecución, convirtiéndose en la primera consideración arquitectónica para los sistemas distribuidos nativos de nube y de los contenedores. Al disponer de más patrones de comunicación, múltiples consumidores pueden recibir eventos, reduciendo simultáneamente la latencia y aumentando el rendimiento.

¿Cómo puedo iniciar a desarrollar aplicaciones de este estilo?

Si es un desarrollador y quiere comenzar a montar aplicaciones de este tipo en Kubernetes utilizando infraestructura y herramientas que se ejecutarían en entornos de producción sin necesidad de preocuparte por el hardware de producción y sobre todo sin el riesgo de romper algo debes tomar en cuenta las opciones que te brinda Red Hat.

Ya que ha anunciado el lanzamiento de herramientas que permiten a los desarrolladores utilizar un entorno de basado en Red Hat Openshift para que puedas probar sus nuevos servicios administrados.

Algunos de los servicios que ofrece Red Hat son:

  • Red Hat Openshift Developer Sandbox.(Donde se desplegarán sus microservicios) Un entorno de desarrollo basado en OpenShift que ofrece a las organizaciones la posibilidad de crear prototipos de aplicaciones basadas en Kubernetes rápidamente, este sandbox de OpenShift es un entorno privado en un clúster compartido y multitenant ya configurado con un conjunto de herramientas para desarrolladores, de modo que la preparación se realiza antes de que los desarrolladores «entren» en el entorno, es decir, está configurado con todo lo que necesitan.
  • Red Hat CodeReady Workspaces.(Donde desarrollará sus microservicios) Red Hat Openshift Developer Sandbox viene preconfigurado con CodeReady Workspaces, la versión Red Hat de Eclipse Che. Donde puede crear rápidamente un entorno de desarrollo con todo lo que necesita, todo ejecutando dentro en OpenShift. CodeReady Workspaces incluye un conjunto curado de devfiles y plug-ins soportados por Red Hat.
  • Red Hat Openshift Streams for Apache Kafka.(Donde se intercambian los eventos) OpenShift Streams para Apache Kafka es un servicio de nube gestionado para el streaming de datos, con este servicio Red Hat busca que se reduzca el costo operativo y la complejidad de la entrega de aplicaciones en tiempo real, orientados a eventos y para entornos multinube, Basicamente es Apache Kafka listo para los desarrolladores.

El OpenShift Developer Sandbox facilita el inicio y la puesta en marcha con sus herramientas integradas para desarrolladores, que están diseñadas para proporcionar un entorno seguro para la construcción de nuevas aplicaciones y servicios, la creación de contenedores a partir de código fuente o archivos Docker y mucho más.

Ahora probemos.

Pero antes si no tienes una cuenta.

  • Visite el sitio de Red Hat Developers y genere su cuenta para poder utilizar estos servicios, si ya es cliente de Red Hat también puede utilizar el ID para acceder al portal de clientes.

Inicie aprovisionando su Developer Sandbox.

  • Inicie sesión con tu cuenta, para poder ejecutar el Sandbox.
  • Ya con una sesión valida el portal le mostrará la siguiente información, de clic sobre el botón «Start using your Sandbox»
  • Esto lo llevará a iniciar sesión dentro de Red Hat Openshift, utilice la opción «DevSandBox» y en caso de ser necesario utilice los datos de su cuenta.
  • Como resultado final deberá observar la consola de Red Hat Openshift, lista para su uso.
  • Todo listo para ejecutar sus aplicaciones, pero antes necesitamos crear nuestro ambiente de Apache Kafka.

Aprovisione su ambiente de Red Hat Openshift Streams for Apache Kafka (aka RHOSAK)

  • Esto nos llevará a la consola de Servicios administrados de Red Hat, en donde podrá ejecutar la creación de sus instancias de Apache Kafka.
  • Para crear una nueva instancia de kafka de clic sobre el botón «Creat Kafka instance», al ser una ambiente de Sandbox usted podrá hacer uso con ciertas restricciones tómelas en consideración
  • Después de esperar algunos minutos nuestra instancia será creada.
  • De clic sobre los tres puntos al final obtener más detalle sobre su instancia de Apache Kafka, también puede ver los datos de conexión que más adelante utilizaremos.
  • El siguiente paso consiste en generar un tópico que usaremos en nuestra aplicación.
  • Generé un tópico puede personalizar la configuración de acuerdo a sus necesidades para este caso utilizaremos lo siguiente:
    • Topic Name: sales-data
    • Partitions: 3
    • Message Retention:
      • Retention time: A day
      • Retention size: unlimited
  • Por ultimo haga clic en «Finish»
  • 1
  • 2
  • 3
  • 4
  • Ya tenemos todo listo para poder utilizar nuestro ambiente de Openshift y RHOSAK, ahora el siguiente paso es probar con una aplicación

Desarrolle y Modifique su aplicación con Red Hat CodeReady Workspaces

  • Visita el sitio Red Hat Developers y da clic sobre el botón «Launch your Che Developer Sandbox for Red Hat Openshift»
  • Después haga clic en el botón «Start using your sandbox»
  • Esto lo llevará a iniciar sesión dentro de Red Hat Openshift, utilice la opción «DevSandBox» y utilice los datos de su cuenta.
  • Esto lo llevará a la página principal de Red Hat CodeReady Workspaces.
  • Dentro de CodeReady Workspaces ya existen espacios disponibles dependiendo la tecnología que requiera usar para trabajar con aplicaciones construidas con Quarkus, Springboot, Apache Camel, entre otras, tome en consideración que solo puede tener un espacio de trabajo activo a la vez con su cuenta de desarrollador.
  • Para este ejemplo vamos a utilizar un espacio de trabajo usando Quarkus, seleccione la opción correspondiente y espere a que su espacio de trabajo este disponible.
  • Cuando su espacio de trabajo este listo verá la siguiente pantalla.
  • De clic sobre «Git Clone» y utilice la siguiente dirección del repositorio https://github.com/mikeintoch/rhosak-demo.git, seleccione la carpeta projects y dentro del explorador de proyectos habrá una nueva carpeta llamada rhosak-demo
  • Vamos a conectar con Red Hat Openshift para lo cual usaremos una terminal dentro de CodeReady Workspaces
  • En su consola de Openshift Sandbox vaya al menú superior derecho y seleccione «Copy Login Command»
  • Utilice sus datos de cuenta para iniciar sesión y luego copie el texto bajo «Log in with this token» dentro de la terminal de CodeReady Workspaces para conectarse a Openshift.
  • Obtenga la información de conexión de Kafka, en la consola de RHOSAK, seleccione «View Connection Information»
  • Guarde la información dentro del campo «Bootstrap server«
  • RHOSAK utiliza diferentes métodos de autenticación SASL/PLAIN y SASL/OAUTHBEARER para este ejemplo utilizaremos la primera SASL/PLAIN para lo cual necesitamos crear un client ID y un Client Secret
  • De clic sobre el botón «Create service account», Guarde la información que dará como resultado.
  • Abra el archivo application.properties del proyecto rhosak-producer y copie la información antes guardada donde corresponda.
#
# Quarkus
#
quarkus.banner.enabled = true
quarkus.log.file.enable = true

#
# Camel
#
camel.context.name = camel-quarkus-kafka-producer

# Source CSV File
source.csv=https://raw.githubusercontent.com/mikeintoch/sales-kafka-demo/main/sales_data_sample.csv

# CSV dataformat settings
camel.beans.customCSV = #class:org.apache.camel.model.dataformat.CsvDataFormat
camel.beans.customCSV.allow-missing-column-names = true
camel.beans.customCSV.use-maps = true

#Kafka Configuration
camel.component.kafka.brokers=<YOUR_KAFKA_SERVER>
camel.component.kafka.security-protocol=SASL_SSL
camel.component.kafka.sasl-mechanism =PLAIN
camel.component.kafka.sasl-jaas-config=org.apache.kafka.common.security.plain.PlainLoginModule required username='<USERNAME>' password='<PASSWORD>';
kafka.topic=<YOUR_TOPIC_NAME>
  • Ejecute el mismo procedimiento en el archivo application.properties del proyecto rhosak-consumer
#
# Quarkus
#
quarkus.banner.enabled = true
quarkus.log.file.enable = true
%dev.quarkus.http.port=8181

#
# Camel
#
camel.context.name = camel-quarkus-kafka-consumer

#Kafka Configuration
camel.component.kafka.brokers=<YOUR_KAFKA_SERVER>
camel.component.kafka.security-protocol=SASL_SSL
camel.component.kafka.sasl-mechanism =PLAIN
camel.component.kafka.sasl-jaas-config=org.apache.kafka.common.security.plain.PlainLoginModule required username='<USERNAME>' password='<PASSWORD>';
kafka.topic=<YOUR_TOPIC_NAME>
  • Despligue las aplicaciónes en el Sandbox de Openshift, dentro de la terminal ejecute los siguiente comandos
$ mvn clean package -Dquarkus.kubernetes.deploy=true -f $CHE_PROJECTS_ROOT/rhosak-demo/rhosak-consumer
$ mvn clean package -Dquarkus.kubernetes.deploy=true -f $CHE_PROJECTS_ROOT/rhosak-demo/rhosak-producer
  • Después de algunos minutos, serán desplegados en Openshift dos pods correspondientes a cada proyecto.
  • Por último verifique los logs de cada aplicación
$ oc get pods
NAME                       READY   STATUS      RESTARTS   AGE
rhosak-consumer-1-build    0/1     Completed   0          10m
rhosak-consumer-1-deploy   0/1     Completed   0          31m
rhosak-consumer-1-clkwj    1/1     Running     0          4m12s
rhosak-producer-1-bpg5w    1/1     Running     0          11m
rhosak-producer-1-build    0/1     Completed   0          18m
rhosak-producer-1-deploy   0/1     Completed   0          17m
  • Para la aplicación rhosak-producer, el cual se encarga de consumir la información de un archivo y enviarla a Apache Kafka.
$ oc logs -f rhosak-producer-1-bpg5w
...
2021-05-12 06:59:15,929 INFO  [route1] (Camel (camel-quarkus-kafka-producer) thread #83 - KafkaProducer[sales-data]) Information stored on RHOSAK
2021-05-12 06:59:15,930 INFO  [route1] (Camel (camel-quarkus-kafka-producer) thread #83 - KafkaProducer[sales-data]) {"productline":"Motorcycles","amount":3884.34,"orderNumber":"10134","dealSize":"Medium","orderDate":"Jul 1, 2003, 12:00:00 AM","customerName":"Lyon Souveniers","status":"Shipped"}
2021-05-12 06:59:15,944 INFO  [route1] (Camel (camel-quarkus-kafka-producer) thread #85 - KafkaProducer[sales-data]) Information stored on RHOSAK
2021-05-12 06:59:15,945 INFO  [route1] (Camel (camel-quarkus-kafka-producer) thread #85 - KafkaProducer[sales-data]) {"productline":"Motorcycles","amount":3746.7,"orderNumber":"10145","dealSize":"Medium","orderDate":"Aug 25, 2003, 12:00:00 AM","customerName":"Toys4GrownUps.com","status":"Shipped"}
2021-05-12 06:59:15,959 INFO  [route1] (Camel (camel-quarkus-kafka-producer) thread #87 -
...
  • Para la aplicación rhosak-consumer, la cual consume la información del tópico configurado.
oc logs -f rhosak-consumer-1-clkwj
...
021-05-12 06:59:16,037 INFO  [info:showBody=true] (Camel (camel-quarkus-kafka-consumer) thread #0 - KafkaConsumer[sales-data]) Exchange[ExchangePattern: InOnly, BodyType: com.google.gson.internal.LinkedTreeMap, Body: {productline=Motorcycles, amount=2168.54, orderNumber=10201, dealSize=Small, orderDate=Dec 1, 2003, 12:00:00 AM, customerName=Mini Wheels Co., status=Shipped}]
2021-05-12 07:00:55,843 INFO  [info:showBody=true] (Camel (camel-quarkus-kafka-consumer) thread #0 - KafkaConsumer[sales-data]) Exchange[ExchangePattern: InOnly, BodyType: com.google.gson.internal.LinkedTreeMap, Body: {productline=Motorcycles, amount=2871.0, orderNumber=10107, dealSize=Small, orderDate=Feb 24, 2003, 12:00:00 AM, customerName=Land of Toys Inc., status=Shipped}]
2021-05-12 07:00:55,860 INFO  [info:showBody=true] (Camel (camel-quarkus-kafka-consumer) thread #0 - KafkaConsumer[sales-data]) Exchange[ExchangePattern: InOnly, BodyType: com.google.gson.internal.LinkedTreeMap, Body: {productline=Motorcycles, amount=2765.9, orderNumber=10121, dealSize=Small, orderDate=May 7, 2003, 12:00:00 AM, customerName=Reims Collectables, status=Shipped}]
...
  • Con estos hemos ejecutado una aplicación que hace uso de todas las herramientas de developer de Red Hat, una gran alternativa si no tienes los suficientes recursos para ejecutar todo lo necesario en tu máquina local.

Comentarios Finales

Sin duda como desarrolladores nos enfrentamos cambios rápidos en el panorama tecnológico y debemos manternos al día pues las tendencias como Kubernetes crecen cada día con nuevas formas de hacer arquitecturas y sobre todo tenemos que pensar en hacerlo en distintos datacenters o nubes, sin duda estas herramientas permiten poder probar estas de manera tal que podamos adaptarnos rápidamente.

Enlaces de interés

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *