Alcancia de chanchitoCon la globalización y el aumento de la competitividad del mercado local y global es común que empresas multinacionales compren a otras empresas y, por tanto, logren una mayor cuota de mercado. Por razones de riesgos y costos no siempre es posible o viable re-escribir los sistemas que estas empresas ya tienen. Este es el clásico escenario para la integración de sistemas.

CEP (Procesamiento Complejo de Eventos) no es una técnica para la integración de sistemas, al menos no de la manera tradicional. CEP es otro paradigma que se basa en el modelo de sistemas guiado por eventos.

Suponga que tiene un sistema de aviación. Será necesario evaluar el pronóstico del tiempo para muchas partes del mundo a medida que el tiempo pasa y el avión avanza en su ruta. Esto requiere que siempre exista una evaluación de las condiciones climáticas y a partir del resultado de eso (todo en tiempo real) se deben tomar nuevas acciones. Este es el lugar ideal para el uso de una técnica de CEP.

¿Para qué sirve CEP?

Las aplicaciones para CEP son muchas; entre ellas quisiera destacar:

  • Detección de Fraude
  • Logística y Operación de Vuelos
  • Gestión de SLAs
  • Análisis en tiempo real de páginas web
  • Automatización de la cadena de suministro
  • Monitorización de pacientes médicos
  • Mercados financieros de compra/venta

Entre tantas otras aplicaciones, si desea saber más aplicaciones para CEP visite este sitio. Pero, como esta técnica es un patrón, se puede aplicar en otras situaciones, una vez que entienda bien qué es y cómo se puede implementar.

¿Qué es el CEP?

CEP es una técnica para hacer frente al procesamiento de eventos complejos. Imagine múltiples fuentes de eventos (sitios web, colas JMS, archivos txt, etc ...) en gran cantidad; un evento es un mensaje pensando en MOM (Message Oriented Middleware). La idea es que puedas tomar decisiones en tiempo real basado en los datos de los eventos que llegan.

El mercado financiero utiliza CEP; las previsiones son que el año 2010 el uso crecerá un 50%. Por lo general, en ese contexto, el CEP se utiliza, por ejemplo, para situaciones del estilo "la acciones de la empresa X crecen 2% en los últimos 30 minutos, entonces compre 5.000 acciones de la empresa X".

Y esto debe hacerse en tiempo real, con lo cual CEP se adapta perfecto. Y con la ayuda de Drools podemos externalizar la regla  en un conjunto de reglas con un español estructurado (DSL). Con la combinación de las dos tecnologías podremos tener un sistema que responde a los cambios (en forma de eventos) de manera eficiente y parametrizable!

¿Y si uso una base de datos?

No va a funcionar. Estoy hablando de un volumen de datos muy violento e incluso si usted pone todo en una base de datos, tendrías el tiempo de carga, y tendría que hacer la investigación, sin tener en cuenta que con la variación tan frecuente en ese tipo de dominio iría a ser complicado aplicar refactorings sobre esa base. Por no mencionar que los datos podrían no estar en sus manos, entonces sólo el tiempo de carga podría terminar con su ventana de procesamiento, luego para este tipo de problemas se necesita mucho más que una base de datos.

PD: Nada en contra de la refactorización o la base de datos, pero no se ajustan a este escenario.

¿La programación con eventos es nueva?

No es así. Ha existido durante muchos años, pero siempre se utiliza de forma *tradicional* con una base de datos donde almacena los datos y luego hace consultas y a partir de los resultados de esas consultas se toman acciones, pero como he dicho antes esto no es en tiempo real y no funciona en algunos escenarios descritos anteriormente.

Una visión general

Procesamiento de eventos complejos

CEP Básico

En la figura de arriba vemos un mecanismo CEP "visto desde afuera". Aquí hay 3 bolsas de valores ficticias que están generando eventos a cada subida y caída de las acciones de las empresas. Los eventos pueden ser mensajes que generan en varios formatos. Supongamos que el evento A es un mensaje en XML publicado vía Webservice. El evento B podría ser un mensaje que se publicó en un WebServices REST con JSON. El evento C podría ser un archivo TXT que se envía por correo electrónico.

Difícilmente en este contexto el archivo sería enviado en formato TXT, pero sólo quiero ilustrar que los eventos pueden ser de fuentes, formatos, protocolos y plataformas diferentes. Por lo tanto, en el diseño del motor CEP (la caja amarilla), al llegar el evento A y analizar los datos genera otro evento que se llama Evento D para la aplicación de finanzas con órdenes de vender el 5% de las acciones de la empresa X. Esa aplicación finalmente habla con la bolsa de valores y realiza la operación.

Ahora que entendés el contexto general, podemos dar nombres...

Procesamiento complejo de eventos

Arquitectura completa con nombres de productos

En la figura anterior podemos ver el mismo diseño que antes sólo que ahora explotado y con los nombres de los componentes de la solución. Bueno aquí se puede ver que Drools que es el motor de Reglas que irá a tomar decisiones sobre los datos de los eventos así él puede rutear (encaminar) los datos al sistema de acciones u otros sistemas. Aquí también aparece el ESB que se utiliza como un gran HUB de mediación. Este accede a los eventos a través de diversos protocolos, como http, ftp, jms, etc ... Todo entra y sale a través del CEP. Conectado al ESB tenemos además de Drools a Esper que es un framework Java que implementa la técnica de CEP.

Más adelante mostraremos cómo funciona Esper y cómo podemos usarlo en conjunto con otras tecnologías como Drools.

Evolucionado hasta el punto de BAM

BAM significa supervisión de actividades de negocio. Podemos tener BAM a través de CEP; usamos CEP como técnica para generar interfaces que muestran al usuario lo que está sucediendo con los datos en tiempo real y da el poder para que él monitoree eso y también pueda efectuar tareas con los datos. La ventaja de utilizar BAM es que la empresa gana la capacidad de saber lo que está pasando en tiempo real, siendo así ella puede tomar la decisión con más velocidad y precisión. ¡Y todo esto se puede lograr mediante el uso de CEP!

Juntando Todo

Cuando juntamos la técnica de CEP a través de una arquitectura similar a la mostrada en la última imagen y desarrollando un conjunto de interfaces y operaciones para para realizar BAM podemos decir que tenemos una arquitectura EDA (Event-Driven Arquitecture, o Arquitectura Guiada por Eventos). Al desarrollar utilizando bajo acoplamiento entre servicios vamos a llegar al punto de lograr SOA. Pueden leer más sobre SOA y EDA en Event Stream Processing y en EDA.

Basado en Respondendo a Mudancas rapidamente com CEP

 

Inspiración.

"Si tú tienes una manzana y yo tengo una manzana e intercambiamos las manzanas, entonces tanto tú como yo seguiremos teniendo una manzana cada uno. Pero si tú tienes una idea y yo tengo una idea, e intercambiamos las ideas, entonces ambos tendremos dos ideas"

Bernard Shaw