2. Plan
Contexte et motivations
scénario
Implantation
Installationdes outils
Présentation de l’implantation du scénario
Application
3. La notion d’événement
Quelque chose qui s’est produit à un certain
instant
Achat d’un article
Fermeture d’une porte
Accident de la circulation
Changement climatique
Notification d’un capteur
etc...
4. Communication à base
d’événements
Style de
communication basé
sur la production et la
réception
d’événements
(publish/subscribe)
Producteurs
composants applicatifs
produisant des
événements (publish)
Consommateurs
composants applicatifs
intéressés en la
réception de certains
événements
(subscribe)
5. Scénario: ville intelligente
On désire permettre aux
habitants d’une ville de se
déplacer en restant informés
sur la façon dont la ville
évolue.
Plus précisément, donner la
possibilité aux habitants
d’être notifiés de certaines
situations intéressantes et
utiles à leur existence:
offres d’article en solde
état du trafic routier
zones à faible degré de
violence
etc…
6. Scénario: ville intelligente (2)
Le type d’information que chacun veut recevoir dépend
de ses préférences et ses besoins pendant des périodes
spécifiques…
Je souhaite recevoir des informations
sur le trafic chaque soir entre 17h et
19h, en semaine
Pour le weekend, les offres de cinéma
et des rassemblements artistiques.
Quand je me déplace, j’aimerai savoir
le degré de violence des quartiers que
je traverse.
7. La notion de type d’événement
Représente une classe d’événements de même
caractéristiques
Ex: TraficEvent (long timestamp, String roadName, String
state )
Un événement est donc une instance d’un type
d’événement
t(52344945, "Av. J O", "fluide" )
8. Type d’Evénement simple,
complexe,
Evénement simple
représente une situation atomique directement signalée
par un producteur.
Evénement complexe ou composite
Événement qui est une abstraction d’autres événements,
appelés membres
Tsunami: abstraction de plusieurs événements naturels…
Crash d’un avion: abstraction de plusieurs pannes du système
de contrôle
Bug de l’an 2000: abstraction du crash de plusieurs systèmes
informatiques, dus au passage à l’année 2000
Il est crée en combinant des événements de base, en
utilisant des opérateurs de composition spécifiques tel que
l’agrégation, conjonction, disjonction, séquence, etc…
9. Composition d’événements dans la
ville
Une infrastructure à base
d’événements, devant
interconnecter dans un style
producteurs/consommateurs
(publish/subscribe) les habitants
et les sources de données:
Sources de données
(producteurs): génèrent les flux
d’événements
Service Météo => données
météorologiques
Service Routier => info trafic,
incidents, etc…
Service Sécurité => infos sur les
actes de vandalisme dans les rues
Service Calendrier => jours fériés,
dates importantes, etc…
Service Annonces => mises en
vente, publicités, artistique,
cinéma, etc…
Les habitants (consommateurs):
spécifient la nature des
informations qu’ils désirent
recevoir.
10. Solutions existantes
Esper [1], Stream [2], StreamBase [3],
StreamInSight [4]
Principales fonctionnalités offertes
Agrégation: avg, count, sum
Corrélation : followed by, and, or, not
A => (B or C)
A and (not B)
Filtrage: Type et attributs
ActionEvent (user="toto", action="exit")
11. Tutoriel Esper
Un système centralisé d’analyse de flux
d’événements
Langages cibles
Java: Esper
.NET: NEsper
Open source, téléchargeable gratuitement
JDK 1.5 ou version supérieure
Langage proche du sql, l’EPL
Permet de spécifier des requêtes complexes
Modèle d’analyse en continue des requêtes
Site principal: http://esper.codehaus.org/
12. Types d’événements sous
Esper
3 représentations:
java.lang.Object: POJO avec getters et setters…
java.util.Map: paires clé-valeur
org.w3c.dom.Node: xml DOM
Des adaptateurs permettant la prise en
compte des flux CSV, JMS, HTTP
13. Exemple: classe Java
public class SellEvent {
private String item;
private String description;
private double price;
public SellEvent() {
}
/*
* ainsi que les getteurs et setteurs…
*/
}
14. Production des événements
Avertissement au préalable du type d’événement:
EPServiceProvider cep=EPServiceProviderManager.getProvider();
cep.getEPAdministrator().
getConfiguration().addEventType("SellEvent",
SellEvent.class.getName());
Production proprement dite:
SellEvent event=new SellEvent();
event.setItem("iPhone 4 S");
event.setDescription("version 16 Go");
event.setPrice(400);
event.setTimestamp(System.currentTimeMillis());
cep.getEPRuntime().send(event);
15. Formulation d’une requête
Détection des articles en solde: le prix a chuté
de 50% par rapport au prix initial au cours du
même mois…
select a.item as item, a.price as oldprice, b.price as
price, a.description as description
from pattern [
every-distinct(a.item) a=SellEvent ->
every b=SellEvent(item=a.item, price< (a.price*0.5))
].win:time(1 month)
16. Définition d’un consommateur
Association requête-consommateur
cepStatement = CEPManager.getInstance().getCepAdm().createEPL(query);
cepStatement.addListener(new SoldeListener());
Code du consommateur
public class SoldeListener implements UpdateListener {
public void update(EventBean[] ebs, EventBean[] ebs1) {
EventBean o = ebs[0];
double price = (Double) o.get("price");
double oldprice = (Double) o.get("oldprice");
String item = (String) o.get("item");
String descr = (String) o.get("description");
// traitement…
}
}
17. Implantation et exécution du
scénario
Le projet démo:
Un exécutable java
Producteurs d’événements simples
Création automatique d’un consommateur pour
chaque requête fournie dans le fichier
custom_query.txt
18. Dans le fichier custom_query.txt
Requête 1: soldes…
requête 2: détection de l’absence de vandalisme dans la ville de Grenoble
lors de la dernière minute
@Name('custom2')
select * from pattern
[every ( timer:interval(1 min) and not PoliceEvent(city='grenoble'))]
requête 3: détection des offres de loisir (artistique, cinéma) dans la ville de
Grenoble les weekends et les jours fériés
@Name ('custom3')
select e.type, e.city, e.title, e.description
from pattern [ every (
( CalendarEvent(state='férié chomé') or timer:at (*,*,*,*,*/6,*) )
-> e=PubEvent (type in ('Cinema', 'Artistique') )
)
].win:time(1 day)|e.type, e.city, e.title, e.description
20. Conclusion
Nous avons présenté la notion d’analyse des flux
d’événements, et à travers un scénario, nous
avons pu expérimenter ces notions en utilisant
Esper [1].
Dans la prochaine présentation, nous nous
attaquerons à la problématique qui consiste à
distribuer le processus d’analyse sur plusieurs
machines.
Nous illustrerons les principaux défis, et nous
présenterons une approche pour la distribution
TAF
Spécifier un service composition distribuée des flux
d’événements
Implémentation et validation ?