Académique Documents
Professionnel Documents
Culture Documents
Motivations
© 2005-2006, S. Krakowiak 2
! Architectures d!intergiciel pour les objets répartis De manière plus précise : toute expression de la spécification du système
fait intervenir plusieurs éléments (exemple : préserver un invariant global,
mettre des interfaces en correspondance, etc.)
Caractéristiques des systèmes répartis (2) Caractéristiques des systèmes répartis (3)
! Difficultés
! Propriétés souhaitées " Propriété d!asynchronisme du système de communication (pas de borne
" Le système doit pouvoir fonctionner (au moins de façon dégradée) même supérieure stricte pour le temps de transmission d!un message
en cas de défaillance de certains de ses éléments # Conséquence : difficulté pour détecter les défaillances
" Le système doit pouvoir résister à des perturbations du système de " Dynamisme (la composition du système change en permanence)
communication (perte de messages, déconnexion temporaire,
performances dégradées) # Conséquences : difficulté pour définir un état global
" Le système doit pouvoir résister à des attaques contre sa sécurité (violation # Difficulté pour administrer le système
de la confidentialité, de l!intégrité, usage indu de ressources, déni de " Grande taille (nombre de composants, d!utilisateurs, dispersion
service) géographique)
" Le système doit pouvoir facilement s!adapter pour réagir à des # Conséquence : la capacité de croissance (scalability) est une
changements d!environnement ou de conditions d!utilisation propriété importante, mais difficile à réaliser
" Le système doit préserver ses performances lorsque sa taille croît (nombre
d'éléments, nombre d!utilisateurs, étendue géographique)
Malgré ces difficultés, des grands systèmes répartis existent et sont largement
utilisés
le DNS (Domain Name System)
le World Wide Web
contrat conformité
! Partie “opérationnelle”
" Interface Definition Language (IDL)
client fournisseur # Pas de standard, mais s!appuie sur un langage existant
$ IDL CORBA sur C++
$ Java et C# définissent leur propre IDL
! Objets répartis
! L!intergiciel a quatre fonctions principales " Java RMI, CORBA, DCOM, .NET
" Fournir une interface ou API (Applications Programming Interface) de haut
niveau aux applications ! Composants répartis
" Java Beans, Enterprise Java Beans, CCM
" Masquer l!hétérogénéité des systèmes matériels et logiciels sous-jacents
" Rendre la répartition aussi invisible (“transparente”) que possible ! Message-Oriented Middleware (MOM)
" Fournir des services répartis d!usage courant " Message Queues, Publish-Subscribe
La construction de systèmes et applications répartis nécessite de résoudre des ! Principe directeur : séparation des préoccupations
problèmes communs
" Isoler les aspects indépendants (ou faiblement corrélés) et les traiter séparément
" Examiner un problème à la fois
! Architecture logicielle
" Éliminer les interférences
" Unités d!organisation, relations
" Permettre aux aspects d!évoluer indépendamment
! Désignation et liaison
! Mise en œuvre
! Sécurité " Encapsulation : séparer interface et réalisation (contrat commun)
! Tolérance aux fautes " Abstraction : décomposition en niveaux, cacher les détails non pertinents à un
" Non traité dans ce cours ; traité dans le cours SR niveau donné
" Séparation entre politiques et mécanismes
! Qualité de service
# Ne pas réimplémenter les mécanismes quand on change de politique
" En particulier performances, passage à l!échelle
# Ne pas “sur-spécifier” les mécanismes
! Administration " Isolation et expression indépendante des aspects extra-fonctionnels (hors
interface)
Ces aspects forment le fil directeur de la suite du cours
! Contexte
! Proxy " Applications constituées d!un ensemble d!objets répartis ; un client accède à des services
" Patron de conception : représentant pour accès à distance fournis par un objet pouvant être distant (le “servant”)
! Factory ! Problème
" Patron de conception : création d!objet " Définir un mécanisme d!accès qui évite au client
# Le codage “en dur” de l!emplacement du servant dans son code
! Wrapper [Adapter] # Une connaissance détaillée des protocoles de communication
" Patron de conception : transformation d!interface " Propriétés souhaitables
! Interceptor # Accès efficace et sûr
# Programmation simple pour le client ; idéalement, pas de différence entre accès local et
" Patron d!architecture : adaptation de service distant
! Observer " Contraintes
" Patron de base pour l!asynchronisme # Environnement réparti (pas d!espace unique d!adressage)
! Solutions
" Utiliser un représentant local du servant sur le site client (isole le client du servant et du
Ces patrons sont d!un usage courant dans la construction d!intergiciel système de communication)
" Garder la même interface pour le représentant et le servant
Nombreux exemples dans toute la suite " Définir une structure uniforme de représentant pour faciliter sa génération automatique
! Contexte
Client Proxy Servant " Application = ensemble d!objets en environnement réparti
! Problème
" Créer dynamiquement des instances multiples d!une classe d!objets
service request
" Propriétés souhaitables
pre-processing # Les instances doivent être paramétrables
# L!évolution doit être facile (pas de décisions “en dur”)
Interface I Interface I
" Contraintes
service request
# Environnement réparti (pas d!espace d!adressage unique)
! Solutions
result " Abstract Factory : définit une interface et une organisation génériques pour la
création d!objets ; la création effective est déléguée à des fabriques concrètes qui
implémentent les méthodes de création
post-processing usually:
" Abstract Factory peut être implémentée par Factory Methods (méthode de création
Remote call
redéfinie dans une sous-classe)
result
" Pour plus de de souplesse, on peut utiliser Factory Factory (le mécanisme de
création lui-même est paramétré)
Factory Factory
! Idée : réduire le coût de la gestion de ressources
" Technique : réutiliser des exemplaires existants Politique de
create gestion du
Client Factory pool
with
parameters
request for creation
optional
create
Object
Possible delegation from
return abstract to concrete créer :
object reference factory si pool non vide détruire :
"""""sortir une instance du pool placer l!instance
"""""nettoyer/initialiser dans le pool
request for removal
sinon
optional
"""""créer une nouvelle instance
! Contexte
! Gestion de la mémoire " Des clients demandent des services ; des servants fournissent des services ; les
" Pool de zones (plusieurs tailles possibles) services sont définis par des interfaces
" Évite le coût du ramasse-miettes ! Problème
" Évite les copies inutiles (chaînage de zones) " Réutiliser un servant existant en modifiant son interface et/ou certaines de ses
fonctions pour satisfaire les besoins d!un client (ou d!une classe de clients)
! Gestion des activités " Propriétés souhaitables : doit être efficace ; doit être adaptable car les besoins
" Pool de threads peuvent changer de façon imprévisible ; doit être réutilisable (générique)
" Évite le coût de la création " Contraintes :
! Solutions
! Gestion de la communication " Le Wrapper isole le servant en interceptant les appels de méthodes vers
" Pool de connexions l!interface de celui-ci. Chaque appel est précédé par un prologue et suivi par un
épilogue dans le Wrapper
! Gestion des composants " Les paramètres et résultats peuvent être convertis
" Voir plus loin (réalisation des conteneurs)
! Contexte
Client Wrapper Servant " Fourniture de services (cadre général)
# Client-serveur, pair à pair, hiérarchique
# Uni- ou bi-directionnel, synchrone ou asynchrone
service request
! Problème
pre-processing " Transformer le service (ajouter de nouvelles fonctions), par différents moyens
Interface I2 Interface I1 # Interposer une nouvelle couche de traitement (cf. Wrapper)
# Changer (conditionnellement) la destination de l!appel
service request " Contraintes
# Les programmes cleient et serveur ne doivent pas être modifiés
# Les services peuvent être ajoutés ou supprimés dynamiquement
result
! Solutions
post-processing " Créer des objets d!interposition (statiquement ou dynamiquement). Ces objets
# interceptent les appels (et/ou les retours) et insèrent des traitements
result
spécifiques, éventuellement fondés sur une analyse du contenu
# peuvent rediriger l!appel vers une cible différente
# peuvent utiliser des appels en retour
Supporting
Client Infrastructure
! Wrapper vs. Proxy
" Wrapper et Proxy ont une structure similaire
create # Proxy préserve l!interface ; Wrapper transforme l!interface
Servant
# Proxy utilise (pas toujours) l!accès à distance; Wrapper est en général
Interceptor
create local
! Wrapper vs. Interceptor
service request
" Wrapper et Interceptor ont une fonction similaire
Interface I # Wrapper transforme l!interface
Interface I # Interceptor transforme la fonction (peut même complètement
use service détourner l!appel de la cible initiale)
! Proxy vs. Interceptor
callback " Proxy est une forme simplifiée d!Interceptor
result # on peut rajouter un intercepteur à un proxy (smart proxy)
! Définition
! Génération automatique " Un canevas est un “squelette” de programme qui peut être réutilisé (et
" À partir d!une description déclarative adapté) pour une famille d!applications
" Il met en œuvre un modèle (pas toujours explicite)
IDL1
" Dans les langages à objets : un canevas comprend
IDL proxy wrapper
# Un ensemble de classes (souvent abstraites) devant être adaptées
IDL2 (par ex. par surcharge) à des environnements et contraintes
spécifiques
! Optimisation # Un ensemble de règles d!usage pour ces classes
" Éliminer les indirections, source d!inefficacité à l!exécution
! Patrons et canevas
# Court-circuit des chaînes d!indirection
" Ce sont deux techniques de réutilisation
# Injection de code (insertion du code engendré dans le code de
l!application) " Les patrons réutilisent un schéma de conception ; les canevas
# Génération de code de bas niveau (ex. bytecode Java) réutilisent du code
# Techniques réversibles (pour adaptation) " Un canevas implémente en général plusieurs patrons
! Exemples i i i
i
" Structures multi-niveaux
# Décomposition “verticale” ou “horizontale”
" Canevas pour insertion de composants
API de rappel
interface application gestion de API micronoyau
utilisateur données
Micronoyau
! Architecture d!un canevas pour composants (middle ! Motivation : réutilisation de mécanismes génériques
" Un canevas de base réalise les entités définies par un modèle abstrait
tier) # Critères : générique, modulaire, composable, adaptable
composants d!application " Des “personnalités” utilisent les APIs du canevas de base (y compris appels en retour) pour
réaliser des mises en œuvres concrètes du modèle
interface de rappel interface de rappel " Avantages : réutilisation, unité conceptuelle, facilité de (re)configuration
" Difficulté : efficacité
! Exemples
application gestion
cliente de données
Java
Unix Autre OS CORBA EJB CCM
RMI
Noyau
framework API micronoyau ORB générique
à composants
! Schéma de base
! Exemples
" Application = ensemble d!objets répartis sur un réseau, communiquant
" Java Remote Method Invocation (RMI) : appel d!objets distants en Java -
entre eux (1 objet intégralement sur un site)
Sun
" Common Object Request Broker Architecture (CORBA) : support pour
communication l!exécution d!objets répartis hétérogènes - OMG
" DCOM, COM+ : Distributed Common Object Model - Microsoft
Couplage fort
! Schéma d!interaction !""Synchrones
RMI, CORBA,
" Communication COM, …
" Synchronisation
! Désignation et localisation des objets
" Identification et référence
!""Asynchrones Couplage faible
! Liaison Événements
" Établissement de la chaîne d!accès
! Cycle de vie
" Création, conservation, destruction des objets Queues de
! Mise en œuvre (réalisation, services) messages
!""Semi-synchrones
Schémas asynchrones A
Système de
B
communication A B A B
Exécution parallèle de l!émetteur
et du récepteur
Couplage faible receive
block
Système de send m1
A communication B deliver m1 wait wait callback
send m2
wait
receive
événement
deliver m2
! Appel synchrone
réaction " L!émetteur (client) est bloqué en attendant le
retour
" Couplage fort
" Événement-réaction " Messages asynchrones
événements et messages peuvent être ou non mémorisés
Avec appel en retour (callback)
A B
<description, référence>
requête
3. recherche 2. enregistrement
! Inversion du contrôle
" Situation où B “contrôle” A callback
" La requête de service pour A est déclenchée
description
depuis l!extérieur 1. création
5. accès
référence
callback Représentation
4. liaison concrète du service
point d!accès
local
Bref rappel sur RPC (1/2) Bref rappel sur RPC (2/2)
P(x, y, …)
! L'appel de procédure à distance (RPC), un outil pour
construire des applications client-serveur application level P(x, y, …)
processus p processus p
receive parameters
P(x, y, …) pack parameters unpack parameters
send parameters
client call procedure server
wait middleware level
procedure stub receive results
stub
P(x, y, …) pack results
P(x, y, …) unpack results send results
send receive
network
receive send
Serveur
! Pourquoi les objets répartis Client Serveur
de noms
" Avantages d!un modèle à objets pour la programmation
" L!encapsulation se prête bien à la répartition (objet = unité naturelle
de répartition) Servant create(servant)
" Réutilisation de l!existant (par wrappers) register(servant, name)
! Différences avec RPC target = lookup(name)
" Création dynamique d!objets
# Donc liaison dynamique target.method(params)
" Intégration de services
# Persistance, duplication, transactions, etc.
Connaissances requises :
le client et le serveur connaissent le serveur de noms
le client et le serveur s!accordent sur le nom name
le client connaît l!interface du servant
En partant de la fin…
Pour réaliser l!appel réparti, il faut avoir établi une chaîne d!accès ! Désignation
entre le client et le servant " Associer des noms à des objets
" Retrouver un objet à partir de son nom
! Liaison
client servant
" Créer une chaîne d!accès à un objet (à partir d!un nom)
! Lier un nom
nom de socket server
" À partir du nom, construire une chaîne d!accès à l!objet Liaison socket
" Rappel : en réparti, résolution # liaison ! socket
# Exemple : une référence (adresse IP, n° de porte) ne suffit pas pour
accéder à l!objet
Serveur
! La liaison est établie en 2 phases Client
de noms
Serveur
! Exemple stub-image.bind()
" La connexion par sockets peut être décrite en ces termes target.method(params) export …1 … 2
# accept = export
# connect = bind stub skeleton
session
Stub Skeleton
… trouver serveur
ORB Binder hello Skeleton
de noms ns
CltDelegate SrvDelegate export export
GIOP ProtocolGraph ns.rebind("myhello", hello)
ORB Binder GIOPProtocolGraph GIOPSrv
Adapter
GIOP Clt GIOP Srv
TcpIp Protocol
Name Server Stub Factory SrvDelegate TCPIPSrv
"myhello" export
TCP-IP Clt Connection Factory TCP-IP Srv
Adapter
CltDelegate
Connexion Connexion {key, host, port} key host, port
trouver serveur
Stub Skeleton
de noms ns
invoke("sayHello", null)
spécifique
bind invoke("sayHello", null)
obj = ns.resolve("myhello")
GIOPProtocolGraph générique
obj.sayHello() Clt Delegate Srv Delegate
stub skeleton
GIOPClt GIOPSrv stream ={ref, marshaller, reply} adapter
bind send(stream) Adapter
send(unmarshaller, reply)
Name Server {key, host, port} TCP-IPCt TCP-IPSrv
"myhello" GIOP IIOP IIOP GIOP
send(mess)
send(mess, reply)
CltDelegate TCP/IP TCP/IP
{key, host, port} write(mess) send(mess)
socket socket
read(mess)
© 2005-2006, S. Krakowiak 71 © 2005-2006, S. Krakowiak 72
Un canevas commun pour la Un canevas commun pour la construction d!ORB (2)
construction d!ORB (1)
! Contexte
! Définitions " Des objets “observés”, dont l!état (visible) évolue au cours du temps
" Méthodes et outils permettant à un ensemble d!entités de coopérer à une " Des objets “observateurs”
tâche commune
! Problème
" Modèle de coordination, définit :
" Permettre aux observateurs d!être informés de l!évolution des objets observés
# les entités coopérantes (processus, activités, “agents”, …) " Propriétés souhaitables
# le support (médium) de coordination : véhicule de l!interaction # Requérir un effort minimal de la part des observateurs
# les règles de coordination : primitives, patrons d!interaction # Garantir l!indépendance mutuelle des observateurs
# Permettre l!évolution dynamique (arrivée-départ des observateurs et observés)
! Domaine d!application
" Contraintes
" Couplage faible (évolution indépendante des entités)
# Passage à l!échelle
" Structure très dynamique (les entités peuvent rejoindre/quitter le système à
tout instant) ! Solution
" Les observateurs enregistrent leur intérêt auprès des observés
" Hétérogénéité (système, environnement, administration)
" Les observés notifient aux observateurs enregistrés les événements pertinents, de manière
" Condition requise : capacité de croissance asynchrone
Publish/Subscribe Publish/Subscribe