Académique Documents
Professionnel Documents
Culture Documents
Distribuées
2ème Année GI
1
Points abordés
Concepts généraux des architectures logicielles
– Les niveaux d’abstraction d’une application
– Les modèles architecturaux classiques
– La communication
– Les modèles de développement
Projection vers des middlewares
– Sockets
Démo/TP
– RMI
Démo/TP
2
Les trois niveaux
d’abstraction
3
Les niveaux d’abstraction
Système d’information
(application logic layer) Présentation
– La couche gestion des ressources
Applicative
(ressource management layer)
Ressources
4
La couche présentation (1/2)
6
La couche application
8
La couche gestion de ressources
10
Des couches conceptuelles
vers les tiers
Les trois couches présentation, application, et ressources sont des
couches conceptuelles pour séparer les fonctionnalités d’un système
Dans les systèmes réels, ces couches peuvent être distribuées et
combinées de différentes manières
On parle alors de tiers
Selon l’organisation considérée pour ces tiers, on obtient les
modèles architecturaux:
– 1-tier
– 2-tier
– 3-tier
– N-tier
11
L’architecture 1-tier
12
Il était une fois…
l’architecture 1-tier
Historiquement, au début
– Gros serveurs et calculateurs déconnectés Client
– Une interface réduite à un invite de
commande Présentation
– Problématique principale: utiliser
efficacement la CPU
Systèmes monolithiques Application
Les trois couches sont dans le même
tier Ressources
Le système vu comme une boîte noire Architecture
Pas d’interaction avec d’autres 1-tier
13
systèmes ni d’API
Avantages
14
Inconvénients
15
L’architecture 2-tier
16
L’architecture 2-tier
Emergence due à l’apparition du PC
Coexistence de machines moins puissantes (PC et stations de
travail) avec de grosses machines (calculateurs et serveurs)
Pour les designers:
– Besoin de garder ensemble les couches gourmandes en ressources
– La couche présentation est mise avec le client
Avantages principaux:
– Liés intrinsèquement à la distribution
– Rendre possible la définition de plusieurs présentations pour la même
application sans la rendre plus complexe
– La couche présentation est déplacée dans le PC libérant de la puissance
de calcul pour les deux autres couches
17
L’architecture 2-tier
Client
L’architecture 2-tier devient Présentation
Système d’information
très populaire. On parle
alors d’architecture Client-
Serveur Application
Serveur
Le tier client correspond à la
couche présentation Ressources
19
Développements associés à
l’architecture Client-Serveur
21
Inconvénients
22
Architecture 3-tier
23
L’architecture 3-tier
Une séparation claire entre les
différentes couches abstraites:
Client
– La couche présentation réside
chez le client Présentation
Système d’information
– La couche application réside
dans le tier du milieu
Middleware
L’infrastructure qui supporte le
développement de la logique Application
business est appelée middleware
– La couche gestion de ressources
réside dans un troisième tier Ressources
24
Comparaison avec l’architecture 2-tier
26
Développements liés à l’utilisation des
middlewares (1/2)
28
Inconvénients
29
L’architecture N-tier
30
L’architecture N-tier
31
Une architecture N-tier Client
Explorateur
Web
Système d’information
Moteur
HTML, HTML
– Un tier Web comprenant le
serveur Web et le code qui
prépare les pages HTML Middleware
Couche
Les tiers Application et Gestion de Application
données gardent la même
sémantique
Couche
Ressources
32
La distribution
En passant de l’architecture 1-tier vers la 2-tier, 3-tier, et
N-tier, on assiste a une constante addition de tiers.
Avec chaque tier,
– l’architecture gagne en
Flexibilité
Fonctionnalité
Distribution
– Perd en performance par rapport à l’augmentation du coût
des communications entre les différents tiers
– Introduit plus de complexité pour la gestion et la maintenance
Il faut que le gain en flexibilité et en scalabilité compense la
33
perte de performance due à la communication
Communication
dans les systèmes
d’information
34
La communication dans les systèmes
d’information
35
Interactions
Synchrones
36
Interaction synchrone
Requête
blocage
Réponse
37
Avantages (1/2)
39
Inconvénients
41
Les interactions asynchrones
42
Les interactions asynchrones
Au lieu de faire une requête et attendre la réponse
– Envoyer la requête
– Vérifier plus tard si une réponse a été retournée
Le processus Le processus
appelant invoqué
Le processus
put fetch
reste actif
Tampons
fetch put
43
Avantages
45
Applications Procédurales Centralisées
46
L’orienté objet
E.g. Java, C++, Eiffel
Vision plus proche du monde réel
L’univers est constitué principalement d’objets
– Attributs
– Méthodes
L’orienté objet est plus une vision relative à l’organisation de
l’implantation
– La distribution et le déploiement ne sont pas pris en compte
Concepts nouveaux:
– Attributs (caractéristiques d’un objets)
– Méthodes (actions possibles sur un objet)
– API
47
L’orienté composant
E.g. RMI, Corba, ejb
Au-delà de l’orienté objet
On s’intéresse maintenant à la structure en terme de
– Décomposition du code exécutable stand-alone (composants)
– Déploiement au niveau des environnements d’exécution
Objectifs principaux, au sein d’une entité:
– Réutilisation
– Composition
– Facilitation de développement
Nouveaux Concepts:
– Interface
– Connexions
– Middleware
48
L’orienté service
E.g. Services Web
Au-delà de l’orienté-composant
Le web et les applications inter-entités
Objectifs principaux
– Développer le e-business
– Publier-rechercher des services sur le web
– Composition dynamique de services
Nouveaux concepts
– Registres de publications
– Standards de
Description
Communication
Publication
49
Paradigmes de communication
pour les middlewares
MOM
– Orienté messages
RPC
– Orienté procédures
RMI
– Orienté méthodes
50
Ce qu’il faut retenir
51
Retour sur les thèmes abordés
53
L’évolution de la programmation
54
Un middleware MOM:
La communication
par Sockets en Java
Fonctionnement
Deux composants élémentaires
– Serveur
– Client
Deux phases
– Établissement de la connexion
– Interaction à base d’échange de messages
Mode synchrone connecté
L’envoi de message est réalisé par une écriture sur un flux
La réception de message est réalisée par une lecture sur un
flux
56
Architecture
Sockets
Machine 1 d’échange Machine 2
Client Serveur
… … … …
Socket
d’échange Socket
d’écoute
Envoi de messages entre Machine1:Port1 et Machine2:Port2
Port 1
Port 2
Le package
Les constructeurs
– public ServerSocket()
Créée un objet socket d’écoute non liée
– public ServerSocket(int p) throws IOException
Crée un objet socket à l’écoute du port p. Une valeur 0 implique une
allocation automatique d’un port libre.
Les getters
– public InetAddress getInetAddress()
Permet de récupérer l’objet adresse IP
– public int getLocalPort()
Permet de récupérer le port d’écoute
La classe ServerSocket (2/2)
Les méthodes
– public Socket accept() throws IOException
Acceptation de la connection d’un client
Opération bloquante
Par défaut, le temps d’attente est infini
– public void setSoTimeout(int timeout) throws SocketException
L’argument est en milliseconds
Définit un délai de garde. 0 implique un temps de garde infini
À l’expiration, l’exception java.io.InterruptedIOException est levée
– public void close()
Ferme la socket d’écoute
La classe Socket (1/3)
Utilisée pour la programmation des sockets connectées côté client et serveur.
Création
– Côté Serveur: résultat de l’appel de la méthode accept
– Côté Client: par l’appel des constructeurs
public Socket(String host, int port) throws UnknownHostException, IOException
– Ouvre une socket sur une machine et un port côté serveur. Le choix côté client n’est
pas spécifié.
public Socket(InetAddress address, int port) throws IOException
– Utilise l’objet InetAddress au lieu d’une chaine de caractères
public Socket(String host, int port, InetAddress localAddr, int localPort) throws
UnknownHostException, IOException
– Spécifie une adresse et un port côté Client
public Socket(InetAddress addr, int port, InetAddress localAddr, int localPort) throws
IOException
La classe Socket (2/3)
Les getters
– public InetAddress getInetAddress()
L’adresse IP distante
– public InetAddress getLocalAddress()
L’adresse IP locale
– public int getPort()
Le port distant
– public int getLocalPort()
Le port local
La classe Socket (3/3)
Méthodes
– public OutputStream getOutputStream() throws IOException
Ouvre un flux d’écriture sur la socket
Permet de construire un objet PrintWriter
– public InputStream getInputStream() throws IOException
Ouvre un flux de lecture sur la socket
Permet de construire un objet BufferedReader
L’opération de lecture est bloquante
– public void close()
Ferme la socket et libère les ressources
Ecriture du code: côté serveur
Créer une socket d’écoute
– ServerSocket SS= new ServerSocket(NumeroPort);
Récupérer la socket d’échange
– Socket S=SS.accept();
Ouvrir un flux de lecture sur la socket
– BufferedReader BR = new BufferedReader(new
InputStreamReader(S.getInputStream()));
Ouvrir un flux d’écriture sur la socket
– PrintWriter PW = new PrintWriter(S.getOutputStream());
Réaliser les traitements
Communication à travers les flux de lecture et d’écriture
– BR.readLine();
– PW.println(message);
Ecriture du code: côté Client
70
Interfaces, objets et méthodes
distantes
71
Fonctionnement de l’invocation
distante dans RMI
RMI traite un objet distant de manière différente par rapport à
un objet local
– RMI utilise un stub (côté client) pour chaque objet distant:
Le stub joue le rôle d’un représentant local (ou proxy) pour l’objet distant
Le client invoque la méthode sur le stub local
Le stub transporte l’appel de méthode vers l’objet distant
Le stub d’un objet distant implémente la même interface
distante que l’objet distant
– Permet d’intercepter tous les appels sur ces méthodes
– Seules les méthodes déclarées dans l’interface peuvent être
invoquées à distance
72
Etapes de création des
applications RMI
73
Design et implémentation
Définir l’architecture de l’application
– Quels objets sont locaux et lesquels sont distants
– Définir les interfaces distantes pour les objets distants
Spécifier les méthodes invocables à distance par les clients (types des paramètres et
type de retour)
Implémentation des objets distants:
– Les objets distants
Doivent implémenter une ou plusieurs interfaces distantes
Peuvent implémenter d’autres interfaces et méthodes qui ne peuvent être appelées
que localement
Implémentation des clients:
– Les clients qui utilisent les objets distants peuvent être implémentés à
n’importe quel moment après la définition des interfaces
74
Compilation des sources
76
Lancement de l’application
Exécution:
– Du Serveur
– Du client
77
Récapitulons…
Côté serveur:
– Définition de l’interface d’accès distant
– Implémentation de la classe de ou des objets distants
– Implémentation du serveur qui crée l’objet distant et
l’enregistre sur le registre de nommage RMI (RMI registry)
Côté client: implémentation comprenant
– L’obtention d’une référence sur l’objet distant à travers le
registre de nommage RMI
– La réalisation des appels de méthodes distantes en utilisant
cette référence
DEMO
Un exemple simple:
L’objet Hello
package hello;
import java.rmi.*;
import java.rmi.server.*;
public class Hello extends UnicastRemoteObject implements HelloInt {
public Hello() throws RemoteException {
super();
}
public void SayIt()throws RemoteException {
System.out.println("bonjour");
}
}
Le serveur
90
Des architectures plus complexes
Client C1
Serveur S
Client C2
Serveur S1
Client C
Serveur S2
91