Principes des Architectures Middleware version 2.0 Technologie des réseaux - rappel Les principaux types de Middleware Principes des middlewares orientés objet Les copies de sites Web commerciaux sont reproduites à la seule fin d illustrer les concepts théoriques, ils ne représentent ni une publicité, ni une quelconque recommandation. @ Vincent Englebert, FUNDP 1
releases 2.0: MOM a été étendu avec les slides du chapitre modèle de communication @ Vincent Englebert, FUNDP 2
Technologie des Réseaux - Rappel Layer Description Examples Application Presentation Session Transport Network Data link Physical Protocols that are designed to meet the communication requirements of specific applications, often defining the interface to a service. Protocols at this level transmit data in a network representation that is independent of the representations used in individual computers, which may differ. Encryption is also performed in this layer, if required. At this level reliability and adaptation are performed, such as detection of failures and automatic recovery. This is the lowest level at which messages (rather than packets) are handled. Messages are addressed to communication ports attached to processes, Protocols in this layer may be connection-oriented or connectionless. Transfers data packets between computers in a specific network. In a WAN or an internetwork this involves the generation of a route passing through routers. In a single LAN no routing is required. Responsible for transmission of packets between nodes that are directly connected by a physical link. In a WAN transmission is between pairs of routers or between routers and hosts. In a LAN it is between any pair of hosts. The circuits and hardware that drive the network. It transmits sequences of binary data by analogue signalling, using amplitude or frequency modulation of electrical signals (on cable circuits), light signals (on fibre optic circuits) or other electromagnetic signals (on radio and microwave circuits). HTTP, FTP, SMTP, CORBA IIOP Secure Sockets (SSL),CORBA Data Rep. TCP, UDP IP, ATM virtual circuits Ethernet MAC, ATM cell transfer, PPP Ethernet base- band signalling, ISDN @ Vincent Englebert, FUNDP 3
Présentation d'un système distribué Component 1 Component n Middleware Component Network Operating System 1 Component n Middleware Hardware Component Network 1 Component Operating n System MiddlewareHardware ComponentNetwork 1 Component Operating n System MiddlewareHardware Network Operating System Hardware Host 1 Host 2 Host n-1 Host n Réseau @ Vincent Englebert, FUNDP 6 Middleware= Application Présentation Session Transport Réseau Données Physique @ Vincent Englebert, FUNDP 4
La couche transport 2 types de couche transport connection-oriented connection-less @ Vincent Englebert, FUNDP 5
Connection-oriented / TCP Basé sur l'existence d'une connexion Ouvrir/créer la connexion entre deux hôtes Utiliser la connexion (écrire/lire) fermer/détruire la connexion transmission correcte transmission ralentie TCP (Transmission Control Protocol) Exemples http, ftp, telnet, smtp, Application Présentation Application Présentation anglais:connection français:connexion Session requête Session Transport OutputStream InputStream Transport Réseau Données résultat Réseau Données Physique Physique @ Vincent Englebert, FUNDP 6
import java.io.*; import java.net.*; public class Client { protected static final int PORT=45678; socket public static void main(string[] args){ Socket s=null; if (args.length!=1){ System.err.println("Usage: java Client <hote>"); System.exit(1); try { // Creates a stream socket and connects it to the specified port number // at the specified IP address. s=new Socket(args[0],PORT); //s.connect( ); DataInputStream canallecture= new DataInputStream(s.getInputStream()); PrintStream canalecriture=new PrintStream(s.getOutputStream()); DataInputStream console=new DataInputStream(System.in); System.out.println("connexion etablie: "+s.getinetaddress()+ " port: "+ s.getport()); String ligne; while (true){ System.out.print("?"); System.out.flush(); ligne=console.readline(); canalecriture.println(ligne); ligne=canallecture.readline(); if (ligne==null){ System.out.println("connexion terminee"); System.exit(0); System.out.println("!"+ligne); catch (Exception e){ e.printstacktrace(); finally { try { if (s!=null){ s.close(); catch (Exception e){ e.printstacktrace(); @ Vincent Englebert, FUNDP 7
import java.io.*; import java.net.*; socket public class Serveur { protected static final int PORT=45678; protected ServerSocket ecoute; public Serveur(){ try { // Creates a server socket on a specified port. ecoute=new ServerSocket(PORT); System.out.println("Serveur en ecoute sur le port "+PORT); while (true){ // Listens for a connection to be made to this // socket and accepts it. The method blocks until // a connection is made. Socket client=ecoute.accept(); System.out.println(«nouveau client»); Connexion c=new Connexion(client); catch (Exception e){ e.printstacktrace(); public static void main(string[] args){ new Serveur(); @ Vincent Englebert, FUNDP 8
import java.io.*; import java.net.*; class Connexion extends Thread { static int nombre=0; protected Socket client; protected BufferedReader in; protected PrintStream out; socket public Connexion(Socket client_soc){ nombre=nombre+1; System.out.println(nombre+" connexions"); client=client_soc; try { in= new BufferedReader(new InputStreamReader(client.getInputStream())); out=new PrintStream(client.getOutputStream()); this.start(); catch (Exception e){ try { client.close(); catch (Exception e1){ e1.printstacktrace(); e.printstacktrace(); public void run(){ String ligne; try { while (true){ ligne=in.readline(); if (ligne.touppercase().compareto("fin")==0) break; out.println(ligne.touppercase()); catch( IOException e){ System.out.println("connexion:"+e.toString()); finally { try { client.close(); catch (IOException e){ e.printstacktrace(); @ Vincent Englebert, FUNDP 9
Connection-less / UDP connection-less envoyer un message de longueur déterminée (datagramme) à un hôte absence de certains tests d'intégrité Omission failures: messages can be dropped occasionally. Ordering: the order of the messages is not ensured. The message can be partially delivered if the buffer allocated on the receiver side is not large enough. rapide & simple UDP (User Datagram Protocol) Exemples rwho, NFS, DNS, Packet lengths can be up to 2^16 bytes (with IP headers). Usually, the size is more or less 8Kb. Application Présentation The sender is blocked until the message is taken by the Transport layer The receiver is blocked while the message is not received. It is possible to limit this waiting time with a timeout. Session Transport Réseau Données Physique @ Vincent Englebert, FUNDP 10
Émetteur datagram import java.net.*; public class emetteur { static final int PORT=1333; public static void main(string arg[]){ try { // Constructs a datagram socket and binds it // to any available port on the local host machine. DatagramSocket socket= new DatagramSocket(); // prepare the data buffer byte[] data=new byte[256]; for (int i=0;i<255;i++) data[i]=(byte)i; System.out.println("Envoi de 256 bytes sur le port "+PORT+"..."); // Constructs a datagram packet for sending packets // of length length to the specified port number on // the specified host DatagramPacket packet=new DatagramPacket(data,data.length, InetAddress.getLocalHost(),PORT); // Sends a datagram packet from this socket. The DatagramPacket // includes information indicating the data to be sent, its // length, the IP address of the remote host, and the port number // on the remote host. socket.send(packet); System.out.println("Paquet envoyé!"); socket.close(); catch (Exception e){ e.printstacktrace(); @ Vincent Englebert, FUNDP 11
Récepteur datagram import java.net.*; public class recepteur { static final int PORT=1333; static final int SIZE_BUFFER=65536; static public void main(string arg[]){ System.out.println("Récepteur à l'écoute sur port "+PORT); try { // Constructs a datagram socket and binds it // to the specified port on the local host machine. DatagramSocket socket=new DatagramSocket(PORT); byte buffer[]= new byte[size_buffer]; // Constructs a DatagramPacket for receiving packets // of length length, specifying an offset into the buffer. DatagramPacket packet=new DatagramPacket(buffer,buffer.length); // Receives a datagram packet from this socket. socket.receive(packet); InetAddress fromaddress=packet.getaddress(); int fromport=packet.getport(); int length=packet.getlength(); byte[] data=packet.getdata(); socket.close(); System.out.println("reçu "+length+" bytes de "+fromaddress +":"+fromport); for (int i=0;i<length;i++){ System.out.print(data[i]+","); catch (Exception e){ e.printstacktrace(); @ Vincent Englebert, FUNDP 12
Remarks The use of those protocols generally obliges the user to manage the faults himself UDP order loss replication messages can be truncated TCP the connection can be broken this information is known only when a process tries to write/read a data the processes using the connection cannot distinguish between network failure and failure of the process at the other end of the connection; the process does not know if the message it has just sent has been received or not. define its own convention to exchange data ASCII EBCDIC UTF-8, 16, 32 (Universal Transfer Format) UNICODE @ Vincent Englebert, FUNDP 13
Exercices Écrivez un serveur de fichiers concevez un protocole qui permet de «uploader» un fichier «downloader» un fichier obtenir la liste des fichiers définissez une syntaxe concrète pour ce protocole implémentez le serveur de sorte à admettre un client à la fois implémentez le serveur de sorte à servir plusieurs clients en même temps quel problème peut il survenir? Écrivez le même serveur avec le protocole UDP. quelles sont les conséquences? faites quelques comparaisons de performance. Modifiez l architecture afin que lorsqu un client demande de uploader un fichier, celui-ci se contente de donner les informations nécessaires afin que le serveur se mue en «client» et downloade le fichier depuis le client. Au niveau de l architecture, comment pourriez vous procéder afin que votre serveur soit indépendant du protocole utilisé (UDP-TCP)? Tentez d écrire un composant exploitant l un de ces protocoles: http://en.wikipedia.org/wiki/list_of_well-known_ports_%28computing%29 @ Vincent Englebert, FUNDP 14
Les Principaux Types de Middleware TCP & UDP sont des protocoles trop élémentaires manque de transparence mise-en-œuvre compliquée Problèmes Les requêtes utilisent des objets dont la structure est large et complexe (tableau, référence, hash-table) la sémantique n'est pas homogène (Object Java / Record COBOL) Vérification de types Transactions Persistance Activation Synchronisation Sécurité Gestion de la localisation des composants Néanmoins, des systèmes distribués ont été (et sont encore) développés avec ces technologies. les protocoles P2P par exemple @ Vincent Englebert, FUNDP 15
Le middleware est une couche entre l'applicatif (le composant) et l'os-réseau Il permet de rendre la distribution des composants transparente aux programmeurs et aux utilisateurs Il résout l'hétérogénéité en termes de Matériel Systèmes d'exploitation Réseaux Langages de programmation Fournit un (ou des) environnement pour la conception des systèmes distribués et leur administration suivi des événements suivi des transactions gestion des utilisateurs migration de composants backup power off/on du système debugging @ Vincent Englebert, FUNDP 16
Middlewares Transactionnels Fournit un service de transactions distribuées utilisé par les composants de type BD (relationnel, OO, ) permet de répliquer des BDs BD (Dupont.age=24) Begin-distributed-transaction BD-Namur(Dupont.age:=24) BD-Charleroi(Dupont.age:=24) End-distributed-transaction & Commit Les middlewares transactionnels permettent de faire coopérer des applications conçues dans des environnements hétérogènes au dessus de bases de données de technologies différentes en garantissant le bon déroulement des transactions (cfr le chapitre sur les transactions). Exemples IBM CICS ----BEA--- Oracle Tuxedo Encina MTS - Microsoft Transaction Server @ Vincent Englebert, FUNDP 17
octobre 2004 - http://www-306.ibm.com/software/htp/cics/tserver/v23/ @ Vincent Englebert, FUNDP 18
http://www.bea.com/content/news_events/white_papers/bea_tuxedo81_ds.pdf @ Vincent Englebert, FUNDP 19
http://www.bea.com/content/news_events/white_papers/bea_tuxedo81_ds.pdf @ Vincent Englebert, FUNDP 20
Middleware de Messagerie Message Oriented Middleware (MOM) Transfert asynchrone de messages Découplage des émetteurs/récepteurs Messages queues (persistence) Tolérance aux pannes 3 2 1 Sécurité Multicasting Publish/Subscribe 2 3 1 Notification d événements Push. L émetteur prend l initiative. Pull. Le récepteur prend l initiative @ Vincent Englebert, FUNDP 21
Systèmes de queuing queries 8 7 6 5 answers application C:Callback 2 3 4 Put(in Q) Get(out Q) Poll(out Q) Notify(in Callback n) Le système de queuing permet d'enregistrer des requêtes afin de les mettre à la disposition d'une application lorsque celle-ci est disposée à les traiter. Le client récupère les résultats lorsqu'ils deviennent présents dans le système de queuing. Exemples Bourse avec créneaux disjoints Workflow (transfert de tâches entre départements) Put ajouter un message à une file d'attente Get attendre après l'occurrence d'un message dans une file d'attente et l'enlever Poll vérifie la présence d'un message dans une file d'attente et l'enlève si oui, mais ne bloque jamais Notify installe un "callback" auprès du gestionnaire de la file d'attente. le gestionnaire avertir le "callback" lorsqu'un message arrive dans la file d'attente @ Vincent Englebert, FUNDP 22
@ Vincent Englebert, FUNDP 23 @tanenbaul
Le routage des messages peut se faire: sur base de l'adresse du récepteur (bourse New York) sur base du type de contenu (quotation) sur base du contenu (intel>100) Un émetteur peut envoyer un message sans connaître le destinataire, il peut éventuellement le placer dans le contenu, ce sera alors une règle de routage qui filtrera les messages vers le bon destinataire. on peut placer beaucoup d'intelligence dans le MOM, par exemple des transformations automatiques "transformer toutes les unités de poids contenues dans tel type de message en Kg" cela surcharge les nœuds du MOM rend le système difficile à maintenir, manque d'outils d'administration. La transmission de messages de grosse taille peut saturer le système à l instar des Emails @ Vincent Englebert, FUNDP 24
Exemples JMS de SUN/Java Event/Notification service de l'omg MSMQ de Microsoft BEA--- Oracle WebLogic Integration Tibco ActiveEnterprise WebMethods Enterprise WebSphere MQ (aka. MQSeries) NaradaBrokering (http://www.naradabrokering.org/) Middleware Business JBI Apache Camel EAI coûts de développement moindres moins d'efforts de maintenance découplage Emetteur/Récepteur utilisation d'adaptateurs et de connecteurs. Plusieurs 100.000 @ Vincent Englebert, FUNDP 25
http://www.microsoft.com/ntserver/techresources/appserv/msmq/msmqfeat.asp @ Vincent Englebert, FUNDP 26
http://www.microsoft.com/ntserver/techresources/appserv/msmq/msmqfeat.asp @ Vincent Englebert, FUNDP 27
http://www.microsoft.com/ntserver/techresources/appserv/msmq/msmqfeat.asp @ Vincent Englebert, FUNDP 28
http://www.tibco.com/resources/software/enterprise_backbone/message_service.pdf http://www-306.ibm.com/software/integration/wmq/ @ Vincent Englebert, FUNDP 29
Middlewares Orientés Objets Généralisation des appels de procédure locaux aux appels distants Fonctionnel RPC Objet Corba, RMI, COM,.NET, ICE Java Cobol C++ Interface Description Language Java Cobol C++ @ Vincent Englebert, FUNDP 30
Time 2000 Corba Components RMI JINI EJB... MS's.NET Web Services Sun's Java MS's DCOM OMG's CORBA MS's COM 1990 OSF's DCE ATT's C++ 1980 Sun's RPC Smalltalk 1970 Simula-67 @ Vincent Englebert, FUNDP 31
Application Serveur Tourne(in dg) Démarre() Stop() Compteur(out cpt) Avance(in kmh) Tourne(in dg) Démarre() Stop() Compteur(out cpt) Avance(in kmh) Stub/Proxy @ Vincent Englebert, FUNDP 32
Tourne(in dg) Démarre() Stop() Compteur(out cpt) Avance(in kmh) Tourne(in dg) Démarre() Stop() Compteur(out cpt) Avance(in kmh) Gérer les appels de méthode Envoyer les arguments Recevoir les résultats Gérer les références distantes Activer le composant Attendre et activer les appels Recevoir les args et les passer Renvoyer les résultats BUS Middleware Couche Transport (TCP/UDP) @ Vincent Englebert, FUNDP 33
Server et threads @tanenbaum @ Vincent Englebert, FUNDP 34
Adaptateur d'objets Chaque adaptateur va gérer un ensemble d'objets distribués selon des politiques différentes priorités parallélisme persistance load balancing Exemple Adaptateur A va devoir se contenter d'un seul thread pour exécuter toutes les requêtes envoyées à ses objets Les objets gérés par l'adaptateur B sont persistants, ils peuvent être dé/chargés sur disque. Les objets gérés par l'adaptateur C sont créés à la volée et détruits aussitôt @tanenbaum @ Vincent Englebert, FUNDP 35
Politiques de gestion de threads workers per-connection threads per-object threads I/O remote objects remote objects I/O remote objects a. Thread-per-request b. Thread-per-connection c. Thread-per-object @ Vincent Englebert, FUNDP 36
@ Vincent Englebert, FUNDP 38