Confluent & Flowable: The perfect match

15 de septiembre de 2020

¿Cómo adaptar tu negocio en tiempos de crisis? ¿Cómo se puede ajustar la tarificación? ¿Cómo evolucionar el modelo de negocio en la nueva normalidad? Muchos de nuestros clientes se están haciendo este tipo de preguntas, por eso desde mimacom hemos planteado una solución para ayudarlos. En este caso vamos a utilizar el ejemplo de la compañía BnV Insurance, especializada en seguros de coches, para reflejar estos problemas y cómo podemos evolucionar su negocio hacia las nuevas tendencias del mercado.

Introducción

Si utilizamos como punto de partida nuestro ejemplo, BnV insurance company ofrece a sus clientes la clásica contratación de pólizas de seguros con pagos anuales. La compañía quiere ofrecer una oferta más atractiva a sus clientes, y por ello decide apostar por ofertar pólizas de seguros con la modalidad de pago por uso.

Para conseguir este objetivo, vamos a diseñar una arquitectura basada en eventos que nos permita procesar datos en tiempo real, así como integrarse en nuestros procesos de negocio. Por otro lado, asumiremos que para que un cliente pueda disfrutar de una póliza, en la modalidad de pago por uso, deberá instalarse un sensor en su vehículo que envíe datos como geolocalización, velocidad, información del motor, etc.

¿Cómo conseguimos un procesamiento en tiempo real?

Como pieza central de nuestra arquitectura de eventos, hemos elegido Confluent Cloud ya que se trata de la versión enterprise de Kafka. Al tratarse de una plataforma SaaS, no nos tendremos que ocupar de problemas como es escalado de los nodos o recuperación de errores y solo nos ocuparemos en la implementación de nuestro caso de negocio. Además de ello, utilizaremos KSQL en la capa de streaming de datos.

Confluent

Confluent enriquece la solución de Kafka añadiendo piezas que facilitan la implementación de los casos de uso con una visión empresarial.

Kafka

Primero, para la ingesta de datos, se ofrecen una serie de conectores que nos facilitan la introducción de los datos de distintos orígenes. Para el procesamiento en streaming de los datos, Confluent se apoyará en KSQL y Kafka Streams. Además nos permite también el análisis de los datos en streaming y aplicar cierta lógica de negocio a los datos que estamos transformando. Por ultimo, nos permite integrarnos con otros sistemas a través de los conectores y otras implementaciones de Kafka Streams.

¿Cómo integramos los datos en tiempo real con nuestros procesos de negocio?

Para desarrollar nuestros casos de uso hemos elegido Flowable, ya que por un lado, nos permite modelar los procesos de una manera low-code, y por otro lado nos ofrece el runtime para ejecutar estos procesos.

Además nos va a permitir reaccionar muy rápidamente a los cambios de negocio. En nuestro caso, la evolución de pasar de una modalidad de pago anual a una modalidad de pago por uso tendrá un impacto mínimo desde el punto de vista del desarrollo y de la arquitectura definida.

Una de las características de Flowable es el soporte a las arquitecturas orientadas a eventos. Esto nos va a permitir configurar nuestros flujos para que, por un lado, puedan enviar eventos a Confluent en cualquier momento y, por otro lado, tenga la capacidad de estar suscrito a topics y reaccionar al recibir un evento

¿Cómo lo hacemos realidad?

A continuación describiremos la solución técnica y los conceptos necesarios para entenderla.

En primer lugar, vamos a tener Flowable como orquestador de nuestros casos de negocio y recogeremos la información a través de formularios. Mediante KSQL enriqueceremos los datos y calcularemos la prima de este cliente.

Flow

Utilizando Flowable Design vamos a modelar nuestro caso de uso para la contratación y gestión de una póliza de seguro. El Caso, basado en el estándar CMMN, que hemos definido para nuestro ejemplo de contratación y gestión de una póliza está formado por tres etapas:

De esta forma vamos a conseguir que sea muy sencillo cambiar de una modalidad de pago a otra en fase de ejecución.

Flowable Case

Además tendremos nuestro proceso de negocio definido por un conjunto de tareas que va a ejecutar en la fase de Onboarding. Para ello bastará con definir un Proceso de Negocio del estándar BPMN.

Flowable Process

  1. User Task que se encarga de recoger los datos de los formularios.
  2. Task donde se van a enviar los datos a Confluent con los datos anteriores y recibirá el precio final de la oferta
  3. En el tercer paso se presentará la oferta final al usuario. En este caso se ha elegido presentar a través de un formulario, pero se podría combinar con el envío de un email, mensaje de chat como WhatsApp, WeChat, etc.
  4. Por último, se realizará un registro de auditoría.

El proceso de configuración del uso de Confluent a través de Flowable Design es bastante sencillo, gracias al interfaz web que nos ofrece.

En la tarea “Get Pricing”, tarea de envío y recepción de eventos, tenemos que definir el evento que queremos enviar, el topic al que se estará suscrito para recibir los eventos y el topic donde enviará los datos.

Definimos el evento que queremos enviar:

Event Structure

Mapeamos los datos de nuestras variables del formulario a nuestro evento.

Event payload

Definición del topic por donde vamos a enviar el evento.

Event topic

¿Cómo configuramos la plataforma de eventos?

Lo primero que necesitamos para crear nuestra plataforma de eventos es crear una cuenta en Confluent Cloud. Después de esto podemos pasar a crear el entorno con los respectivos clusters, regiones, etc.

Por último necesitamos dar de alta los topics que vayamos a utilizar en nuestra aplicación.

Más adelante veremos en detalle cómo realizar estos pasos.

¿Cómo procesamos los datos en tiempo real?

Desde Flowable se ha enviado los datos al topic raw-ensurance. Esta información nos ha llegado como un mensaje en formato JSON.

{
    "identificationNumber": "12.345.678Z",
    "insuranceNumber": "OnboardingDemo001",
    "metadata": {
        "timestamp": "2020-04-21T22:15:30.508Z"
    },
    "plate": "0988 SAE",
    "plateYear": "2010"
}

En Confluent lo que vamos a hacer es el proceso de enriquecimiento de los datos.

Primero cruzamos la información recibida con la información que tenemos almacenada de los vehículos en el stream VEHICLES_DATA_STREAM.

Además de enriquecer los datos recogidos por Flowable con los que podamos tener nuestra base de datos, hacemos un cálculo de la prima del seguro para este cliente y vehículo en concreto.

Price Calculator 2

En el siguiente paso, calculamos el precio de la póliza en base de los modificadores de la prima que hemos identificado y del precio base por las características del vehículo.

Volviendo a la configuración que hemos realizado en Flowable Design, para que podamos enviar y recibir eventos a Confluent Cloud, es necesario configurar correctamente nuestra aplicación.

Utilizaremos el proyecto de Spring- Kafka para trabajar con Confluent. Para ello, añadiremos la dependencia y configuraremos las properties correspondientes:

Maven

<dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka</artifactId>
</dependency>

Properties

application.kafka-enabled=true
spring.kafka.bootstrap-servers=
spring.kafka.properties.ssl.endpoint.identification.algorithm=https
spring.kafka.properties.sasl.mechanism=PLAIN
spring.kafka.properties.request.timeout.ms=20000
spring.kafka.properties.retry.backoff.ms=500
spring.kafka.properties.sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="USERNAME" password="PASSWORD";
spring.kafka.properties.security.protocol=SASL_SSL

¿Cómo evolucionamos nuestros procesos de negocio para aceptar pago por uso?

¿Cómo conectamos el coche con la plataforma de eventos?

Para evolucionar a un modelo de pago por uso necesitamos la instalación de sensores en el vehículo que nos envíen métricas de geolocalización, velocidad, datos de motor, etc. a Confluent. Además, estos sensores tendrían que estar asociado al cliente ya sea por medio de la póliza, DNI, etc.

Car Flow

El vehículo enviará la geolocalización, y en tiempo realizaremos streaming de los datos de los sensores. Seguidamente, gracias a KSQL podremos realizar un cálculo de la ruta desde un punto A hasta un punto B. Calcularemos el precio y por último, enviaremos un modelo con el coste acumulado a la aplicación desarrollada con Flowable, para presentar el coste del trayecto.

¿Cómo configuramos la plataforma de eventos?

Para calcular el coste de la ruta ejecutaremos una consulta KSQL como esta:

Calculate routes tables

Con esto estamos haciendo una agrupación, donde se calculará primero cuántos segundos ha estado conduciendo el usuario. A modo de ejemplo se utilizará la tarifa de menos de un céntimo por segundo. Esto podría sustituido por cualquier otro cálculo más complejo, ya que una de las funcionalidades de KSQL es, que además de usar el lenguaje SQL, nos permite añadir funciones personalizadas en java.

Después de comprobar que la consulta tiene el comportamiento esperado, el siguiente paso es consolidar como un stream.

El primer paso es crear un topic, en este caso se llamará ROUTE_PRICING

New Topic

Una vez creado el topic, vamos a nuestra aplicación KSQL, Price Calculator, donde crearemos la tabla.

Price Table

Automáticamente en nuestro flujo se ha actualizado con un nuevo paso con los datos de la query que se ha ejecutado.

Price Calculator 3

Con estos pasos hemos preparado la plataforma para que cada vez que se utilice el vehículo, se calculen las rutas, su coste y se escriban en un nuevo topic, donde Flowable estará suscrito y por tanto podrá mostrar al cliente, el cálculo, en tiempo real, del coste de la próxima mensualidad.

¿Cómo evolucionamos nuestra aplicación para recibir la información?

Una vez se ha producido el cálculo de la información en Confluent, tenemos que adaptar nuestro proceso en Flowable para que reciba esta información. Para ello, lo único que deberemos hacer desde nuestra aplicación, es configurar nuestros procesos para que reciban los datos de los nuevos topics que hemos creado anteriormente.

Esto supone un impacto pequeño en nuestra aplicación ya que, como hemos explicado anteriormente, podremos editar la configuración de los topics desde Flowable Design utilizando un modelo low-code.

Beneficios de la solución

La solución propuesta nos proporciona un menor “time to market” y una rápida adaptación a los cambios. Además, gracias a la unión de Confluent y Flowable, obtenemos beneficios como el gobierno del datos, la simplicidad de las operaciones y la automatización inteligente de los procesos de negocio.

Estas características nos va a proporcionar una arquitectura que nos permitirá ser más ágiles y poder evolucionar nuestro negocio acorde a las necesidades del mercado.

Sobre el autor: Victor Ibañez Aparicio

Le encanta cualquier tecnología con la que se pueda hacer Hello World, el deporte y sobretodo comer bien ;)

Comments
Únete a nosotros