Vous êtes sur la page 1sur 45

Applications Réparties

Message Oriented Middleware

Atef Ben Ismail

INSAT 2009-2010
Pourquoi MOM?

 Le modèle client-serveur ne répond pas à tous les besoins


• Le schéma de base est synchrone
• La communication est essentiellement 1 vers 1 (ou n vers 1)
• Les entités (clients, serveurs) sont désignées explicitement
• L’organisation de l’application est peu dynamique
 On souhaite
• Communication asynchrone
• Communication possible n vers p
• Possibilité de désignation non explicite des entités
• Organisation dynamique des applications (facilité d’évolution, adjonction et retrait
d’entités participantes)

2 Application Réparties INSAT 2010


Exemple : administration d’un réseau
(surveillance/supervision des équipements)
 Problème
• Surveillance de l’état de machines, systèmes et applications dans un environnement
distribué
• Flot permanent de données en provenance de sources hétérogènes sur le réseau
• Les éléments du système peuvent apparaître ou disparaître dynamiquement
• Connexion-déconnexion
• Évolution du système (ajout/suppression de nouvelle machine)
• Les administrateurs doivent pouvoir accéder à l'information quelle que soit leur
localisation

3 Application Réparties INSAT 2010


Solution (traditionnelle) client/serveur (1/2)

 Interrogation régulière des éléments à surveiller par l'application


d'administration et mise à jour d'une base de données centralisée.
• Utilisation d'une configuration complexe afin de connaître l'ensemble des éléments à
surveiller.
• Maintien de cette configuration lorsque des machines ou des applications rejoignent,
quittent ou se déplacent dans le système.
 Interrogation par les administrateurs de la base centrale.

4 Application Réparties INSAT 2010


Solution client/serveur (2/2)

adm adm

Interrogation
Réponse

Administration
d’un réseau

5 Application Réparties INSAT 2010


Solution «Messaging» (1/2)

 Les différents éléments administrés émettent des messages :


• changements d'état et de configuration
• alertes, statistiques
 Un ou plusieurs démons reçoivent ces notifications et maintiennent l'état
courant du système
• suivi des changements de configuration dynamiques
• émission de messages signalant les changements d'états significatifs ou les mises à jour
 Inversion des rôles des producteurs et des consommateurs de données

6 Application Réparties INSAT 2010


Solution «Messaging» (2/2)

adm
adm

Envoi d’évenements

Lecture de la base
d’informations au moment
souhaité Administration
d’un réseau

7 Application Réparties INSAT 2010


Communication par Messages (1/2)

Emetteur Récepteur

• Emetteur et récepteur connaissent seulement la


message destination

• Plusieurs émetteurs et récepteurs sur la même


Destination destination

• Persistance du message (reçu ou non reçu)

• Format du message libre

• Acheminement par un bus de message

8 Application Réparties INSAT 2010


Communication par Messages (2/2)
 Mode de synchronisation
• Communication asynchrone
• émission non bloquante
• réception bloquante (attente jusqu'à arrivée d'un message, ou retour d’erreur)
 Mode de désignation
• communication directe entre processus (acteurs, agents, . . .)
• communication indirecte entre processus via des objets intermédiaires (portes, boîtes
aux lettres, queues de message, etc.)
 Mode de transmission
• messages possiblement typés
 Interface de programmation
• primitives de base : envoyer - recevoir (send, receive)

9 Application Réparties INSAT 2010


Communication par Messages: exemple 1

 Réalisation d’un échange asynchrone

Problèmes : sécurité (n’importe qui peut envoyer un message sur la boite aux lettres)

10 Application Réparties INSAT 2010


Communication par Messages: exemple 2
 Réalisation d’une interaction de type « client-serveur »

Problèmes : absence de structuration, gestion des erreurs, sécurité

11 Application Réparties INSAT 2010


Format des messages

 Entête
• Information permettant l'identification et l'acheminement du message
• Id. unique, destination, priorité, durée de vie, etc.
 Attributs
• Couples (nom, valeur) utilisables par le système ou l'application pour sélectionner les
• messages (opération de filtrage)
 Données définies par l'application
• Texte
• Données structurées (XML)
• Binaire
• Objets (sérialisés)
...

12 Application Réparties INSAT 2010


Modes de désignation

 Désignation indirecte
• Les entités communiquent via un objet intermédiaire : destination
– Destination : structure de données réceptacle de messages
– Exemple : Queue (file) de messages
 Désignation de groupe
• groupe = ensemble de consommateurs identifiés par un nom unique
– gestion dynamique du groupe : arrivée/départ de membres
– différentes politiques de service dans le groupe : 1/N, N/N
 Désignation anonyme
• désignation associative : les destinataires d'un message sont identifiés par des
propriétés (attributs du message)
• Publish/Subscribe (Publication / Abonnement)

13 Application Réparties INSAT 2010


Principe de base des MOM (Bus logiciel à messages)

 Message Queueing
• Queues de messages persistantes
• Transmission des messages asynchrone (stockage des messages si nécessaire)
• Reprise après panne
• Un émetteur remet son message au système et peut continuer son exécution sans se
soucier de l’état du destinataire

14 Application Réparties INSAT 2010


MOM: 2 modes

Mode push
 Le serveur diffuse une information
 Le récepteur reçoit l’information
Publicité, spam

Mode pull
 Le serveur livre une information
 Le récepteur va chercher l’information
Consultation méteo

15 Application Réparties INSAT 2010


MOM: Réception synchrone (pull)

 Réception explicite des messages (retrait)


• les clients viennent périodiquement prendre leurs messages dans une boîte aux
lettres.
• le consommateur n’est pas nécessairement bloqué en l’absence de message
• point à point

16 Application Réparties INSAT 2010


MOM: : réception asynchrone (push)

 Réception des messages de manière implicite


• abonnement préalable du destinataire au service (on peut filtrer les messages par leurs
attributs)
• lors du dépôt d’un message, chaque destinataire est/sont informé(s) et exécute une
réaction prédéfinie (comportant la lecture du message)
• C’est en fait un modèle “événement-réaction” cf plus loin

17 Application Réparties INSAT 2010


MOM: Architectures

Serveur distribué
Serveur centralisé

Serveur distribué Bus

18 Application Réparties INSAT 2010


Administration

 Administration du MOM
• Configuration, déploiement
• Monitoring
 Administration du service de messagerie
• Service de désignation : identification des serveurs, émetteurs/récepteurs
• Service de messagerie : gestion des objets de communication : queues, topics, etc.
– Configuration, déploiement
– Monitoring, reconfiguration
• Clients : création/destruction, droits d’accès

19 Application Réparties INSAT 2010


Qualité de service

 Disponibilité et fiabilité
Persistance des messages et Garantie de délivrance
– Au plus une fois, au moins une fois, exactement une fois
 Performance et scalabilité
Nombre de sites, nombre de messages, taille des messages
– Réseau local (Intranet)
– Réseaux hétérogènes à grande échelle (Internet)
 Transaction

 Sécurité

 Répartition de charge

 Ordonnancement

20 Application Réparties INSAT 2010


Trois exemples de mise en œuvre des messages et
événements

 JMS (Java Message Service)


• Interface Java standard pour communication par message
• Ne définit pas d’implémentation
– Peut servir à interfacer un système existant
– IBM MQ Series, Novell, Oracle, Sybase, Tibco
– Des implémentations spécifiques peuvent être réalisées
– Supporte point à point et publish/subscribe
 Event Service de CORBA
• L’un des Object Services définis par l’OMG
• Définit un ensemble de classes permettant de réaliser un service d’événements
• Supporte les modes push et pull
 Jini (Sun)
• Service de coordination à base d’objets partagés (Java)
• Utilsé pour des environnements dynamiquement variables (découverte de ressources)

21 Application Réparties INSAT 2010


Annex: Java Message Service
L’interface Java Message Service (JMS)

 API Java d’accès uniforme aux systèmes de messagerie

Client Client Client

JMS JMS
Provider X Client Client Provider X

JVM JVM

MQ X MQ X MQ X MQ X

23 Application Réparties INSAT 2010


Architecture JMS

Client JMS Client JMS

Client JMS
Emetteur Récepteur

message

Destination

Serveur de messages

24 Application Réparties INSAT 2010


Architecture JMS
Client JMS Client JMS
Connection Connection

Session Session

Producer Consumer

message

Destination

Serveur de messages

25 Application Réparties INSAT 2010


Architecture JMS

 Une connexion est liée à un serveur de message

 Une session existe à l’intérieur d’une connexion

 Il peut y avoir plusieurs session par connexion

 La session gère le processus global de transmission

 Le consommateur/producteur existe seulement à l’intérieur d’une session

 Le consommateur/producteur connaît la destination

 Le message n’existe qu’à l’intérieur d’une session

26 Application Réparties INSAT 2010


2 types de destinations

Queue pour le point à point


 Chaque message n’a qu’un consommateur

 Pas de couplage temporel fort

Topic pour le publish/subscribe


 Similaire à un modèle d’événements

 Un message peut avoir plusieurs consommateurs par abonnement

 Abonnement et activité du consommateur requise

27 Application Réparties INSAT 2010


Point à Point et Publish/ Subscribe

Le consommateur envoie un reçu


Client1 Client2
Le message est détruit à la réception du reçu
Il peut y avoir plusieurs consommateurs en
send attente
acknowledges

consumes

queue
subscribes
publishes delivers Client2
Un client doit s’abonner au préalable Client1
Tous les abonnés reçoivent le message
publié
subscribes
delivers Client3

28 Application Réparties INSAT 2010


Le mode Point-à-Point (PTP)

receive

send

Emetteur Récepteur

queue

29 Application Réparties INSAT 2010


Le mode Point-à-Point (PTP)

QueueConnectionFactory

Queue
QueueConnection QueueConnection

QueueSession QueueSession

send + +
receive

QueueSender QueueReceiver

Emetteur Récepteur

30 Application Réparties INSAT 2010


Etapes du mode Point-à-Point

Emetteur Destinataire

Trouver la queue
Créer une connexion et une session

31 Application Réparties INSAT 2010


Etapes du mode Point-à-Point

Emetteur Destinataire

Trouver la queue
Créer une connexion et une session

Spécialiser une communication


d’envoi sur la queue

32 Application Réparties INSAT 2010


Etapes du mode Point-à-Point

Emetteur Destinataire

Trouver la queue
Créer une connexion et une session

Spécialiser une communication


D’envoi sur la queue
Spécialiser une communication de
Réception sur la queue

33 Application Réparties INSAT 2010


Etapes du mode Point-à-Point

Emetteur Destinataire

Trouver la queue
Créer une connexion et une session

Spécialiser une communication


D’envoi sur la queue
Spécialiser une communication de
Réception sur la queue
Envoyer un message sur la queue

34 Application Réparties INSAT 2010


Etapes du mode Point-à-Point

Emetteur Destinataire

Trouver la queue
Créer une connexion et une session

Spécialiser une communication


D’envoi sur la queue
Spécialiser une communication de
Réception sur la queue
Envoyer un message sur la queue

Demander la réception d’un message

35 Application Réparties INSAT 2010


Etapes du mode Point-à-Point

QueueConnectionFactory connectionFactory = (QueueConnectionFactory)


messaging.lookup("…");
Queue queue = (Queue) messaging.lookup("…");
QueueConnection connection =
connectionFactory.createQueueConnection();
QueueSession session = connection.createQueueSession(…);

36 Application Réparties INSAT 2010


Etapes du mode Point-à-Point

QueueConnectionFactory connectionFactory = (QueueConnectionFactory)


messaging.lookup("…");
Queue queue = (Queue) messaging.lookup("…");
QueueConnection connection =
connectionFactory.createQueueConnection();
QueueSession session = connection.createQueueSession(…);

String selector =
QueueSender sender =
session.createSender(queue); new String("(name = 'Bull') or (name = 'IBM'))");
QueueReceiver receiver =
session.createReceiver(queue, selector);

37 Application Réparties INSAT 2010


Etapes du mode Point-à-Point
QueueConnectionFactory connectionFactory = (QueueConnectionFactory)
messaging.lookup("…");
Queue queue = (Queue) messaging.lookup("…");
QueueConnection connection =
connectionFactory.createQueueConnection();
QueueSession session = connection.createQueueSession(…);

String selector =
QueueSender sender =
session.createSender(queue); new String("(name = 'Bull') or (name = 'IBM'))");
QueueReceiver receiver =
session.createReceiver(queue, selector);
TextMessage msg =
session.createTextMessage();
msg.setText("…");
sender.send(msg);

TextMessage msg = (TextMessage) receiver.receive();

38 Application Réparties INSAT 2010


Mode Publication / Souscription (Pub/Sub)

Emetteur Destinataire

Topic

A B

x y

publish + +

TopicSubscriber
TopicPublisher
Listener

onMessage

39 Application Réparties INSAT 2010


Mode Publication / Souscription (Pub/Sub)

Emetteur Destinataire
TopicConnectionFactory

Topic
TopicConnection TopicConnection
A B

TopicSession x y TopicSession

publish + +

TopicSubscriber
TopicPublisher
Listener

onMessage

40 Application Réparties INSAT 2010


Mode Publication / Souscription (Pub/Sub)

Emetteur Destinataire
Trouver la queue
Créer une connexion et une session

Créer un sujet

Publier un message Préparer un message à écouter

Se mettre à l’écoute d’un sujet

41 Application Réparties INSAT 2010


Mode Publication / Souscription (Pub/Sub)

Emetteur Destinataire
TopicConnectionFactory connectionFactory =
(TopicConnectionFactory) messaging.
messaging.lookup("…
lookup("…");
");
Topic topic = (Topic) messaging.
messaging.lookup("/A/x");
lookup("/A/x");
TopicConnection connection = connectionFactory.
connectionFactory.createTopicConnection();
createTopicConnection();
TopicSession session =
connection.
connection.createTopicSession(false, Session.
Session.CLIENT_ACKNOWLEDGE);
CLIENT_ACKNOWLEDGE);

42 Application Réparties INSAT 2010


Mode Publication / Souscription (Pub/Sub)

Emetteur Destinataire
TopicConnectionFactory connectionFactory =
(TopicConnectionFactory) messaging.
messaging.lookup("…
lookup("…");
");
Topic topic = (Topic) messaging.
messaging.lookup("/A/x");
lookup("/A/x");
TopicConnection connection = connectionFactory.
connectionFactory.createTopicConnection();
createTopicConnection();
TopicSession session =
connection.
connection.createTopicSession(false, Session.
Session.CLIENT_ACKNOWLEDGE);
CLIENT_ACKNOWLEDGE);
TopicPublisher publisher =
session.
session.createPublisher(topic);
createPublisher(topic);

publisher.publish(msg);

43 Application Réparties INSAT 2010


Mode Publication / Souscription (Pub/Sub)
Emetteur Destinataire
TopicConnectionFactory connectionFactory =
(TopicConnectionFactory) messaging.
messaging.lookup("…
lookup("…");
");
Topic topic = (Topic) messaging.
messaging.lookup("/A/x");
lookup("/A/x");
TopicConnection connection = connectionFactory.
connectionFactory.createTopicConnection();
createTopicConnection();
TopicSession session =
connection.
connection.createTopicSession(false, Session.
Session.CLIENT_ACKNOWLEDGE);
CLIENT_ACKNOWLEDGE);
TopicPublisher publisher = void onMessage(Message msg) throws
JMSException {
session.
session.createPublisher(topic);
createPublisher(topic);
// unpack and handle the message

publisher.publish(msg);
}
TopicSubscriber subscriber =
session.createSubscriber(topic);
Subscriber.setMessageListener(listener);

44 Application Réparties INSAT 2010


www.alcatel-lucent.com
INSAT 2009-2010

45 | A look Forward | January 2010

Vous aimerez peut-être aussi