Complex Event Processing avec Esper

Dans un précédent article, Karim Ben Othman nous introduisait le concept de Complex Event Processing (CEP).

Afin de rendre cette notion plus concrète, je vais au travers de cet article, vous présenter un framework de CEP open source : Esper.

Je vous invite à découvrir pas à pas, comment nous pourrions implémenter, avec Esper, le cas d’utilisation suivant : la détection de bagages égarés à l’aéroport.

UseCase RFID Aeroport

Le schéma ci-dessus illustre le système mis en place.

Prenons le scénario suivant :
En partant du postulat que chaque bagage, une fois enregistré, porte une puce RFID que des antennes sont capables de localiser. Les antennes transmettent les messages à une application « centrale » avec les bagages qu’elles ont identifiés dans leur périmètre.
Pour détecter les problèmes nous considérons que le temps maximum d’un « voyage » sur le tapis est de n secondes, et, qu’au delà de ce délai, le bagage doit être considéré comme manquant.
La méthode consiste donc à vérifier qu’un même bagage est passé par les 4 antennes dans l’intervalle de temps attendu et donc, qu’il existe 4 évènements détectés pour un même bagage dans les n dernières secondes.

Esper : un framework open source dédié au CEP

Esper est un Framework open source dédié au CEP, disponible pour Java et depuis peu pour .Net également.  Dans le cadre de cet article, je prendrais pour exemple l’implémentation Java, mais les concepts abordés sont facilement transposables pour l’univers .Net.
Esper se présente sous la forme d’une librairie Java (Jar), qui peut donc facilement s’insérer dans une application Java standalone, un serveur d’application ou un conteneur web de type Tomcat.
EsperTech, la société derrière Esper fournit autour de ce Framework 2 autres solutions :

– Esper Enterprise Edition : ajoute un client lourd pour faire du monitoring sur une application intégrant Esper (suivi des évènements en temps réél, reporting, …), accès JMX

– Esper HA : pour les besoins en haute disponibilité, tolérance aux pannes  : gère le clustering avec un cache distribué, prévention de la saturation mémoire grâce à un mécanisme de débordement vers disque ou base de données.

Rentrons maintenant dans le vif du sujet, et découvrons comment fonctionne Esper.

Implémentation du use case

L’implémentation des règles de traitement des évènements se fait via un langage de requêtage, proche du SQL, appelé EPL (Event Processing Language), qui permet de requêter le contenu des évènements.
En effet, plutôt que de requêter sur des données historiques comme dans une base de données classique, avec Esper, les données sur lesquelles nous allons effectuer nos requêtes est un ensemble d’évènements se produisant sur une période de temps donnée.