Académique Documents
Professionnel Documents
Culture Documents
Cours en Entier
Cours en Entier
Cours en Entier
Les protocoles
Les intergiciels (middleware)
14 février 2018
Inspiré de cours de G. Padiou, Ph. Mauran et S. Krakowiak. Certains dessins en sont issus.
Intergiciels 1 / 15 Intergiciels 2 / 15
X
2 Les protocoles
B
Réseau Y
3 Les intergiciels (middleware) A
Communication
bi-point entre
Z
2 machines
I – Introduction 3 / 15 I – Introduction 4 / 15
La communication à distance La communication à distance
Les protocoles Les protocoles
Les intergiciels (middleware) Les intergiciels (middleware)
I – Introduction 5 / 15 I – Introduction 6 / 15
Service
Un service est une description / interface / spécification.
1 La communication à distance entre applications
2 Communication par socket Serveur
3 Appel de procédure et appel de méthode à distance Un serveur est une réalisation / implantation / concrétisation d’un
4 Intergiciel asynchrone : communication par messages service
5 Tolérance aux fautes
Besoins
6 Mémoire virtuelle répartie, systèmes de fichiers répartis
Trouver les services existants
Pour un service donné, trouver les serveurs qui le réalisent
Dialoguer avec un serveur donné (= protocole)
I – Introduction 7 / 15 I – Introduction 8 / 15
La communication à distance La communication à distance
Les protocoles Les protocoles
Les intergiciels (middleware) Les intergiciels (middleware)
Je veux manger
Quels sont les services offerts dans un village ⇒ boulangerie,
bistrot. . . 1 La communication à distance
Où trouver une boulangerie ? ⇒ place Dupuy
Comment acheter une baguette ⇒ protocole d’interaction
2 Les protocoles
Service de nommage internet (DNS)
Service de conversion de noms symboliques en adresses IP 3 Les intergiciels (middleware)
numériques
À l’N7, serveurs sur les machines 147.127.80.123,
147.127.176.22, 147.127.16.11
I – Introduction 9 / 15 I – Introduction 10 / 15
I – Introduction 11 / 15 I – Introduction 12 / 15
La communication à distance La communication à distance
Les protocoles Les protocoles
Les intergiciels (middleware) Les intergiciels (middleware)
Définition
1 La communication à distance Couche logicielle entre système d’exploitation et applications
Service implantant un modèle d’interaction entre processus
API normalisée associée au service de communication implanté
2 Les protocoles
Quelques points communs
Besoin d’une interface avec la couche « transport »
3 Les intergiciels (middleware)
Besoin de certains services de base : service de nommage
Nécessité de traiter l’hétérogénéïté entre les processus
I – Introduction 13 / 15 I – Introduction 14 / 15
La communication à distance
Les protocoles
Les intergiciels (middleware)
I – Introduction 15 / 15
Présentation générale Présentation générale
Structure client/serveur Structure client/serveur Objectifs
Programmation (API C) Programmation (API C) Éléments de base
Programmation (API Java) Programmation (API Java)
Plan
1 Présentation générale
Deuxième partie Objectifs
Éléments de base
2 Structure client/serveur
Communication par flots 3 Programmation (API C)
Interface socket Exemples
API principale
Divers
4 Programmation (API Java)
Mode connecté
Mode non connecté
Idée
P1 P2 Un site a un nom global : adresse IP par exemple ;
Un port est un « point d’accès » à un site ;
Pipe « réparti » Site unique Nom global d’un processus : (adresse site, numéro de port)
Désignation ? (communication par mémoire commune)
Protocole ?
1 1
Interface ?
2 2
P2
Fiabilité ?
P1 P2 P1
Hétérogénéité ? 3 3
Réseau
Site S1 Site S2 4 4
Réseau
Site S1 Site S2
Ports
II – Interface socket 5 / 48 II – Interface socket 6 / 48
Processus 1
adr 1 adr 3 Processus 3
Socket → descripteur de fichier sock 1 (@IP, port)
sock 1
Protocole / domaine d’adresses → famille d’adresses sock 2
sock 3
Adresse → (adresse IP, numéro de port) sock 2
1 Présentation générale
Objectifs
Client
Éléments de base
initie la communication
2 Structure client/serveur
doit connaître le serveur
3 Programmation (API C)
Exemples Serveur
API principale informe le système de sa disponibilité
Divers répond aux différents clients
4 Programmation (API Java) clients pas connus a priori
Mode connecté
Mode non connecté
Client Serveur
créer un socket créer un socket
Client Serveur se connecter au serveur attribuer une adresse
créer un socket créer un socket dialoguer avec le serveur informer le système
répéter attribuer une adresse par le socket connecté répéter
émettre une requête répéter terminer la connexion attendre une demande
vers une adresse attendre une requête de connexion
attendre la réponse traiter la requête dialoguer avec le client
jusqu’à réponse positive émettre la réponse par le socket ainsi créé
ou abandon jusqu’à fin du service jusqu’à fin du service
1 Présentation générale
socket création
Objectifs
bind nommage : liaison d’un socket à une adresse
Éléments de base
connect connexion : établissement d’une association
2 Structure client/serveur listen prêt à attendre des connexions
accept attente de connexion : acceptation d’association
3 Programmation (API C)
close fermeture
Exemples
shutdown fermeture (obsolète)
API principale
Divers
read/write
4 Programmation (API Java) recv/send
Mode connecté recvfrom/sendto
Mode non connecté
Site S1
socket()
Site S2
Client Serveur bind()
listen()
ccl = socket()
c ;
csv=socket();
ps accept()
bind(csv,ps);
connect(ccl,<S
t( ,ps>) listen(csv,5); bloque jusqu’à une
2
pc ps
socket()
demande de connexion
cx=accept(csv); connexion
write(ccl,...);
cl connect()
pc ps
read(cx,...); write()
pc ps requête read()
write(cx,...);
read(ccl,...);
. write()
close(cx); read()
close(ccl); réponse
int sserv = socket (AF_INET, SOCK_DGRAM, 0); socket crée un socket en spécifiant le famille de protocole utilisée.
bzero (&adrserv, sizeof(adrserv));
adrserv.sin_family = AF_INET; int socket(int domain, int type, int protocol)
adrserv.sin_addr.s_addr = htonl (INADDR_ANY);
adrserv.sin_port = htons (4522); où
bind (sserv, (struct sockaddr*)&adrserv, sizeof(adrserv)); domain = AF_INET, AF_INET6, AF_UNIX, AF_X25. . .
while (1) {
bzero (&adrcli, sizeof (adrcli));
type = SOCK_STREAM, SOCK_DGRAM
int adrclilen = sizeof (adrcli); protocol = 0
recvfrom (sserv, requete, sizeof(requete), 0, Retour : un « descripteur » de fichier ou −1
(struct sockaddr *)&adrcli, &adrclilen);
sendto (sserv, "world", 6, 0,
(struct sockaddr *)&adrcli, adrclilen);
}
II – Interface socket 23 / 48 II – Interface socket 24 / 48
Présentation générale Présentation générale
Exemples Exemples
Structure client/serveur Structure client/serveur
API principale API principale
Programmation (API C) Programmation (API C)
Divers Divers
Programmation (API Java) Programmation (API Java)
Note : comportement inattendu s’il reste des octets à lire int fcntl(int fd, int cmd, ...)
(écritures en attente perdues).
Par exemple : fcntl(sd, F_SETFL, O_NONBLOCK)
shutdown permet une fermeture unilatérale :
pour mettre en non bloquant.
int shutdown(int sock, int how);
1 Présentation générale
Objectifs
Éléments de base java.net.InetAddress pour manipuler des adresses IP
2 Structure client/serveur Mode connecté : java.net.Socket et
java.net.SocketServer
3 Programmation (API C)
Mode datagramme : java.net.DatagramSocket et
Exemples
java.net.DatagramPacket
API principale
Divers Note : les interfaces présentées sont incomplètes (exceptions
supprimées).
4 Programmation (API Java)
Mode connecté
Mode non connecté
Plan
Introduction Introduction
L’appel procédural à distance L’appel procédural à distance
Transparence Transparence
L’appel de méthode à distance L’appel de méthode à distance
Mise en œuvre Mise en œuvre
Communication par appel procédural à distance Communication par appel procédural à distance
alias Remote Procedure Call (RPC)
Introduction Introduction
L’appel procédural à distance L’appel procédural à distance
Transparence Transparence
L’appel de méthode à distance L’appel de méthode à distance
Mise en œuvre Mise en œuvre
Re
qu
message
ête
résultat
Proc(x,y,...) Proc(x,y,...)
Introduction Introduction
L’appel procédural à distance L’appel procédural à distance
Transparence Transparence
L’appel de méthode à distance L’appel de méthode à distance
Mise en œuvre Mise en œuvre
Introduction Introduction
L’appel procédural à distance L’appel procédural à distance
Transparence Transparence
L’appel de méthode à distance L’appel de méthode à distance
Mise en œuvre Mise en œuvre
Protocole
Talon d'appel Squelette d'acceptation
Définition d’un protocole de transaction
X = talon_proc(A,1,B) {
de transaction de messages de messages
ma = new Message();
Sérialisation/Désérialisation ma.entete(S,C,np);
des paramètres ma.sérialiser(A,1,B) ;
Trans.appel_envoyer(ma); Trans.accepter(ma,mr) {
Génération de talon d’appel Message.identifier(ma,S,C,np);
Message.désérialiser(ma,X,Y,Z);
(stub) et d’acceptation
R = S.proc[np](X,Y,Z);
(skeleton) mr=new Message();
Assistance par génération mr.entete(C);
mr.serialiser(R);
automatique de code return mr ;
Trans.réponse_recevoir(mres);
return mres.désérialiser(); }
}
Langage de description d’interface (IDL)
Introduction Introduction
L’appel procédural à distance L’appel procédural à distance
Transparence Transparence
L’appel de méthode à distance L’appel de méthode à distance
Mise en œuvre Mise en œuvre
Les langages IDL (Interface Definition Language) Description et codage des données indépendantes du matériel
Langage commun de description d’interface Structures de données arbitraires (structures, tableaux,
séquences)
Purement déclaratif : types de données, interfaces
RPC convertit les données machine en XDR avant de les
Base pour la génération des talons et squelettes
envoyer sur le réseau (sérialisation)
RPC convertit les données XDR en données machine après
struct arg { int a1; int a2; };
program MONSERVICE { lecture sur le réseau (désérialisation)
version MAVERSION { Génération automatique des routines de sérialisation et de
int PROC1 (arg) = 1; désérialisation à partir d’une description proche du langage C
int PROC2 (int, int) = 2;
ou codage manuel de ces routines à partir d’une librairie pour
} = 1;
} = 0x30000050; les types élémentaires
Introduction Introduction
L’appel procédural à distance L’appel procédural à distance
Transparence Transparence
L’appel de méthode à distance L’appel de méthode à distance
Mise en œuvre Mise en œuvre
Introduction Introduction
L’appel procédural à distance L’appel procédural à distance
Transparence Transparence
L’appel de méthode à distance L’appel de méthode à distance
Mise en œuvre Mise en œuvre
Et variantes Plan
Principe et propriétés
Processus Deux espaces d’exécution
Principe et propriétés
Un seul espace Deux points de contrôle
d’exécution A oa Couplage plus faible
B ob
Point de contrôle unique Protocole de communication entre processus.
ob.m(); m(){...}
Fort couplage Processus client Processus serveur
Fiabilité
A oa B ob
Sécurité ob.m(); Réseau m(){...}
Service S A oa B ob
procx(...); procx(...) {
ob.m(); m(){...}
...
};
C oc
Modèle
m'(){ };
Modèle d'exécution modulaire d'exécution à objets
Sérialisation Sérialisation
Proxy
P1 P2
Objet local « remplaçant » l’objet distant = objet ayant la même pA sA A
interface que l’objet distant, et sachant appeler l’objet distant.
externe donné. pC sC C pC sC C pC sC C
Avoir appelé une méthode (à distance) qui transmet/renvoie S3
S2 : création du proxy pB
un (autre) objet accessible à distance : création implicite des S1: Appel de pA.foo(B,4,pC) S1 −> S2 : Envoi de la requête (A, foo, B, 4, C)
création du proxy pC
appel de A.foo(pB,4,pC)
proxys.
La description d’une classe d’objet accessible à distance La description d’une classe d’objet accessible à distance
s
ment
AgendaImpl
public void ajouter(RendezVous rdv) { table.add(rdv); }
imple
.
.
. AgendaImpl_Stub AgendaImpl_Skel
public void importer(String nom, Agenda orig)
throws RemoteException { Serveur
RendezVous[] rr = orig.lister(nom);
⇒ Cas statique : utilisation du générateur rmic (obsolète)
for (RendezVous r : rr) this.table.add(r);
}
}
III – Appel à distance 51 / 66 III – Appel à distance 52 / 66
Sémantique et propriétés Sémantique et propriétés
L’appel procédural à distance L’appel procédural à distance
Sérialisation Sérialisation
L’appel de méthode à distance L’appel de méthode à distance
RMI de Java RMI de Java
import java.rmi.registry.*;
Cas où le serveur de noms est créé en tant que thread interne
public class Client {
// args[0] contient le site support du service de nommage
import java.rmi.registry.*; public static void main(String args[]) throws Exception {
Registry dns = LocateRegistry.getRegistry(args[0],1099);
public class Serveur { Agenda proxy = (Agenda)dns.lookup("Travail");
public static void main(String args[]) throws Exception { RendezVous rdv = new RendezVous("chef", new Date(...),
Agenda aa = new Agenda(); Duration.ofMinutes(30), "F303");
Registry dns = LocateRegistry.createRegistry(1099); proxy.ajouter(rdv);
dns.bind("Travail",aa); RendezVous[] tous = proxy.lister("chef");
} for (RendezVous r : tous) System.out.println(r.date);
} }
}
Plan
1 Introduction
Quatrième partie La communication par message
Exemple
Les principes
API standard pour Java : JMS (Java Message Service) A distributed streaming platform
Quelques MOM :
Distribution, stockage et traitement de flux de données
Open Message Queue (intégré dans GlassFish, implantation de
référence) Points forts : haut débit, latence faible, tolérant aux fautes
ActiveMQ de Apache → traitement de gros flux de données temps réel
Joram de l’INRIA (intégré dans Jonas)
OpenJMS Les données
Autres standards : Un flux est identifié par un sujet (topic)
HLA (High-Level Architecture) pour interconnecter des
simulateurs Un flux est constitué d’enregistrements (record )
XMPP (eXtensible Messaging and Presence Protocol) Un enregistrement contient une clef, une valeur et une date
AMQP (Advanced Message Queuing Protocol) (timestamp)
Microsoft Message Queuing (MSMQ)
Producer : publication
d’enregistrements
Consumer : abonnement à
des topics et obtention
d’enregistrements
Streams : transformation de
flux, un ou des flux en Un topic est multi-producteurs, multi-consommateurs
entrée, un ou des flux en Un topic est décomposé en partitions → parallélisation
sortie
Chaque partition contient une séquence ordonnée et immuable
Connector : vision flux de d’enregistrements, strictement croissante
BD source : https://kafka.apache.org
Immuable : pas d’effacement à la consommation (mais
possibilité de délai de rétention avec oubli)
IV – Intergiciels à message 23 / 39 IV – Intergiciels à message 24 / 39
Introduction Fonctionnalités Introduction Fonctionnalités
Les intergiciels à messages Standardisation et produits Les intergiciels à messages Standardisation et produits
Le standard JMS (Java Message Service) Kafka : un MOM évolué Le standard JMS (Java Message Service) Kafka : un MOM évolué
1 Introduction
La communication par message
Kafka est . . . Exemple
Les principes
un intergiciel à messages, unifiant queue et abonnement, avec
objectif de performance (de Kafka et des applications 2 Les intergiciels à messages
l’utilisant) → parallélisation Fonctionnalités
un système de stockage d’informations incrémentales, fiable Standardisation et produits
(réplication) et performant Kafka : un MOM évolué
un système de traitement de flux 3 Le standard JMS (Java Message Service)
Les concepts et principes
Les principales classes
Un exemple de publication/abonnement
ConnectionFactory ConnectionFactory
Topic
Connection Connection Connection Connection
/
topic
Queue a b
x y
import org.objectweb.joram.client.jms.tcp.TcpConnectionFactory;
public class CreateDestination {
import javax.jms.* ; public static void main(String args[]) throws Exception {
public class MonMsgListener implements MessageListener { // Creating the JMS administered objects:
public void onMessage(Message m) { javax.jms.ConnectionFactory connFactory
try { = TcpConnectionFactory.create("localhost", 16010);
if (m instanceof TextMessage) {
TextMessage msg = (TextMessage) m ; Destination destination = Topic.create(0);
System.out.println(msg.getText()) ; // Destination destination = Queue.create(0);
}
} catch (JMSException je) {...} // Binding objects in JNDI
} javax.naming.Context jndiCtx = new InitialContext();
} jndiCtx.bind("MaConnFactory", connFactory);
jndiCtx.bind("MonTopic", destination);
}
}
IV – Intergiciels à message 37 / 39 IV – Intergiciels à message 38 / 39
Conclusion
IV – Intergiciels à message 39 / 39
Vocabulaire
Sûreté de fonctionnement Sûreté de fonctionnement
Les moyens
Serveurs à haute disponibilité Serveurs à haute disponibilité
Principes
Tolérance aux fautes pour les données Tolérance aux fautes pour les données
Traitement des erreurs
Plan
1 Sûreté de fonctionnement
Vocabulaire
Cinquième partie Les moyens
Principes
Traitement des erreurs
2 Serveurs à haute disponibilité
Tolérance aux fautes Redondance froide
Redondance passive
Redondance active
Groupes et synchronisme virtuel
3 Tolérance aux fautes pour les données
Techniques logicielles
Techniques matérielles
Vocabulaire Vocabulaire
Sûreté de fonctionnement Sûreté de fonctionnement
Les moyens Les moyens
Serveurs à haute disponibilité Serveurs à haute disponibilité
Principes Principes
Tolérance aux fautes pour les données Tolérance aux fautes pour les données
Traitement des erreurs Traitement des erreurs
Fiabilité
Availability, disponibilité : capacité à être prêt à délivrer un MTTF (mean time to failure) : temps moyen jusqu’à la
service prochaine panne
Reliability, fiabilité : continuité de service MTTR (mean time to repair) : temps moyen de réparation
Safety, sécurité/sûreté : absence d’effets catastrophiques sur MTBF (mean time between failure) = MTTF + MTTR
l’environnement
Security, sécurité : préservation de la confidentialité et de Disponibilité
l’intégrité des informations Disponibilité moyenne = fraction du temps où le système est
Repairability, maintenabilité : capacité à restaurer un service disponible
correct après une défaillance Pannes franches : dispo moyenne = MTTF/(MTTF+MTTR)
99.99% (4 nines) indisponible 50 min / an
99.999% (5 nines) indisponible 5 min / an
V – Tolérance aux fautes 3 / 44 V – Tolérance aux fautes 4 / 44
Vocabulaire Vocabulaire
Sûreté de fonctionnement Sûreté de fonctionnement
Les moyens Les moyens
Serveurs à haute disponibilité Serveurs à haute disponibilité
Principes Principes
Tolérance aux fautes pour les données Tolérance aux fautes pour les données
Traitement des erreurs Traitement des erreurs
Vocabulaire Vocabulaire
Sûreté de fonctionnement Sûreté de fonctionnement
Les moyens Les moyens
Serveurs à haute disponibilité Serveurs à haute disponibilité
Principes Principes
Tolérance aux fautes pour les données Tolérance aux fautes pour les données
Traitement des erreurs Traitement des erreurs
Le bon fonctionnement de A dépend du bon fonctionnement faute physique : accidentelle, matérielle, opération, permanente
de B faute transitoire : accidentelle, matérielle, opération, temporaire
Une défaillance de B constitue une faute pour A faute intermittente : accidentelle, matérielle ou humaine,
Cette faute peut à son tour provoquer une erreur interne de conception, temporaire
A, causant une défaillance de A faute de conception : accidentelle, humaine, conception, permanente
faute d’interaction : accidentelle, humaine, opération, temporaire
attaques, intrusions : intentionnelle, humaine, conception ou
opération
V – Tolérance aux fautes 7 / 44 V – Tolérance aux fautes 8 / 44
Vocabulaire Vocabulaire
Sûreté de fonctionnement Sûreté de fonctionnement
Les moyens Les moyens
Serveurs à haute disponibilité Serveurs à haute disponibilité
Principes Principes
Tolérance aux fautes pour les données Tolérance aux fautes pour les données
Traitement des erreurs Traitement des erreurs
Vocabulaire Vocabulaire
Sûreté de fonctionnement Sûreté de fonctionnement
Les moyens Les moyens
Serveurs à haute disponibilité Serveurs à haute disponibilité
Principes Principes
Tolérance aux fautes pour les données Tolérance aux fautes pour les données
Traitement des erreurs Traitement des erreurs
Construction
Prévention des fautes : comment empêcher par construction,
l’occurrence ou l’introduction de fautes Écrire un programme sans (trop de) bugs = prévention
(méthodologie de développement) + élimination (vérification
Tolérance aux fautes : comment fournir un service conforme à
de types, preuves, tests. . . )
la spécification, en dépit de fautes
S’adapter à un environnement hostile = prévision (à quoi
Validation faut-il s’attendre ?) + tolérance (que faut-il faire ?)
Empêcher le piratage = prévision (quelles attaques ?) +
Élimination des fautes : comment réduire, par vérification et
prévention (cryptographie. . . )
tests, la présence de fautes
Prévision des fautes : comment estimer, par évaluation, la
présence et l’apparition de fautes
Vocabulaire Vocabulaire
Sûreté de fonctionnement Sûreté de fonctionnement
Les moyens Les moyens
Serveurs à haute disponibilité Serveurs à haute disponibilité
Principes Principes
Tolérance aux fautes pour les données Tolérance aux fautes pour les données
Traitement des erreurs Traitement des erreurs
Compensation Plan
Exemple : vote majoritaire
1 Sûreté de fonctionnement
Vocabulaire
Les moyens
Principes
Traitement des erreurs
2 Serveurs à haute disponibilité
Redondance froide
Redondance passive
Redondance active
Groupes et synchronisme virtuel
3 Tolérance aux fautes pour les données
Résiste à la défaillance d’un composant de traitement et d’un Techniques logicielles
voteur par étape Techniques matérielles
(dessin : S. Krakowiak)
V – Tolérance aux fautes 19 / 44 V – Tolérance aux fautes 20 / 44
Redondance froide Redondance froide
Sûreté de fonctionnement Sûreté de fonctionnement
Redondance passive Redondance passive
Serveurs à haute disponibilité Serveurs à haute disponibilité
Redondance active Redondance active
Tolérance aux fautes pour les données Tolérance aux fautes pour les données
Groupes et synchronisme virtuel Groupes et synchronisme virtuel
Le serveur 1 traite la requête 2 avant la 1, alors que les serveurs 2 I = requêtes des clients, O = réponses aux clients
et 3 traitent 1 puis 2 ⇒ état incohérent si les traitements Évolution asynchrone des réplicas (chacun à son rythme)
modifient l’état des serveurs (traitements non commutatifs) Même ordre de traitement des requêtes + déterminisme ⇒
même séquence de sorties pour tous les réplicas
Défaillance détectée par divergence des états ou des sorties
V – Tolérance aux fautes 27 / 44 V – Tolérance aux fautes 28 / 44
Redondance froide Redondance froide
Sûreté de fonctionnement Sûreté de fonctionnement
Redondance passive Redondance passive
Serveurs à haute disponibilité Serveurs à haute disponibilité
Redondance active Redondance active
Tolérance aux fautes pour les données Tolérance aux fautes pour les données
Groupes et synchronisme virtuel Groupes et synchronisme virtuel
Groupe
diffuser(p,m) : le processus p Le service d’appartenance (membership) vise à fournir à tout
Processus
diffuse le message m au groupe instant à chaque membre du groupe une vue de la composition
délivrer(p,m) : le message m est courante du groupe.
délivré à p Partition primaire : la suite des vues fournies aux membres est
diffuser changement
changement-de-vue(p,id,V) : une délivrer de vue totalement ordonnée. Il n’y a pas de partition, ou de manière
nouvelle vue V (= ensemble de équivalente, un unique primaire.
processus) identifiée par id est service de groupe
Partition multiple : la suite des vues fournies aux membres est
délivrée au processus p envoyer recevoir partiellement ordonnées. Il peut y avoir simultanément
La diffusion se fait toujours dans la vue système de communication plusieurs vues disjointes.
courante
P1
Diffusion causale
P2 L’ordre de délivrance respecte la causalité de l’ordre (causal)
P3 d’émission.
c2 c2
P1
P4
m m
Non uniforme (mais fiable) Uniforme c1 c1
P2
Nécessaire si un processus défaillant peut (avant sa défaillance)
G1
exécuter des actions irréversibles, notamment vis-à-vis de
G2
l’extérieur.
V – Tolérance aux fautes 35 / 44 V – Tolérance aux fautes 36 / 44
Redondance froide Redondance froide
Sûreté de fonctionnement Sûreté de fonctionnement
Redondance passive Redondance passive
Serveurs à haute disponibilité Serveurs à haute disponibilité
Redondance active Redondance active
Tolérance aux fautes pour les données Tolérance aux fautes pour les données
Groupes et synchronisme virtuel Groupes et synchronisme virtuel
m1
fiable atomique
m2
Ordre causal ? m3
Arrêt/Reprise ?
fiable causale atomique causale m5
état
m1 m1
m2 m2
m3 m3
m4
crash
m4 crash
S4
m5 m5
Réplication des données : plusieurs exemplaires d’une même Plusieurs disques sur lesquels on partitionne et duplique les
donnée sur différents sites données
⇒ meilleure performance (accès parallèle)
Abordé à peine cours suivant ⇒ meilleure disponibilité (redondance)
e
Développé dans cours Systèmes et algorithmes répartis en 3 Multiples configurations selon besoins
année
(non développé)
Plan
1 Introduction
Sixième partie Exemples
Principe
Introduction Introduction
Exemples Exemples
Système de fichiers réparti Système de fichiers réparti
Principe Principe
Mémoire virtuelle répartie Mémoire virtuelle répartie
Introduction Introduction
Exemples Exemples
Système de fichiers réparti Système de fichiers réparti
Principe Principe
Mémoire virtuelle répartie Mémoire virtuelle répartie
Niveau
Matériel (multiprocesseurs)
Principe : fournir des objets partagés par couplage dans les
Système d’exploitation (pagination)
espaces d’adressage de structures d’exécution (couplage
virtuel) réparties Langages ou librairies utilisateurs
Partage par copie locale (efficacité)
Unité de partage
Programmation simple (accès local)
Octets / Pages / Objets
Le système charge éventuellement les données à la demande
Le système assure la cohérence des données partagées Cohérence
Propagation des mises à jour
Différents degrés de cohérence acceptables
Client module
3 Mémoire virtuelle répartie
Principe et objectifs
Mise en œuvre
UNIX UNIX
NFS NFS
file file Volume
client server
Other
disk0s3
Volume
(source : Coulouris – Dollimore) local sh cat
Fonction Fonction
Noms symboliques ↔ noms internes (Unique File IDentifiers Passage d’un nom interne global (UFID à un descripteur)
UFID) Accès au fichier (attributs)
Protection : contrôle d’accès
API RPC Service Fichier
Génération de noms internes (UFID) : byte[] Read(UFID uid, int pos ,int n) lire n octets au + en pos
Engendrés par le serveur pour les clients Write(UFID uid,int pos ,byte[] z,int n) écrire n octets en pos
Unicité, non réutilisation, protection UFID Create() créer un fichier
Delete(UFID uid) supprimer l’UID du fichier
API RPC Service Répertoire GetAttributes(UFID uid, Attributs a) lire les attributs du fichier
Attributs SetAttributes(UFID uid) mettre à jour les attributs
UFID Lookup(UFID rép, String nom) résolution du nom
AddName(UFID rép, String nom, UFID uid) insérer le nom
UnName(UFID rép, String nom) supprimer le nom Opérations idempotentes (sauf create) : RPC at-least-once
String[] GetNames(UFID rép, String motif) recherche par motif Serveur sans état : redémarrage sans reconstruction de l’état
précédent
VI – Mémoire virtuelle 17 / 35 VI – Mémoire virtuelle 18 / 35
Introduction Introduction
Principe et objectifs Principe et objectifs
Système de fichiers réparti Système de fichiers réparti
Mise en œuvre Mise en œuvre
Mémoire virtuelle répartie Mémoire virtuelle répartie
1 Introduction
Exemples
Principe Principe : fournir des objets partagés par couplage dans les
espaces d’adressage de structures d’exécution (couplage
2 Système de fichiers réparti virtuel) réparties
Les principes et objectifs Partage par copie locale (efficacité)
NFS – Network File System Programmation simple (accès local)
Sémantique de la concurrence
Le système charge éventuellement les données à la demande
3 Mémoire virtuelle répartie Le système assure la cohérence des données partagées
Principe et objectifs
Mise en œuvre
Init : x = 0 ∧ y = 0 Init : x = 0 ∧ y = 0
Processus P1 Processus P3 et P4
Processus P2 Processus P1 Processus P2
(1) x ← x + 1 if (x > y) print("1 0");
if (x >= y) printf("OK"); x ← x + 1 y ← y + 1
(2) y ← y + 1 if (y > x) print("0 1");
Intuitivement, P2 affiche OK. En pratique, pas nécessairement. Les processus 3 et 4 peuvent-ils afficher des résultats différents ?
Introduction Introduction
Principe et objectifs Principe et objectifs
Système de fichiers réparti Système de fichiers réparti
Mise en œuvre Mise en œuvre
Mémoire virtuelle répartie Mémoire virtuelle répartie
Réplication optimiste
Autoriser l’accès à une copie sans synchronisation a priori avec
Copies permanentes
les autres copies
Ensemble de copies définies a priori. Configuration statique
Modifications propagées en arrière plan
Conflits supposés peu nombreux, et résolus quand ils sont ⇒ Architecture statique de tolérance aux fautes
détectés
Copies à la demande
Réplication pessimiste Création dynamique de copies selon les besoins
Garantit l’absence de conflits ⇒ Adaptation à la charge
Mécanisme bloquant de prévention
Introduction Introduction
Principe et objectifs Principe et objectifs
Système de fichiers réparti Système de fichiers réparti
Mise en œuvre Mise en œuvre
Mémoire virtuelle répartie Mémoire virtuelle répartie
Introduction
Principe et objectifs
Système de fichiers réparti
Mise en œuvre
Mémoire virtuelle répartie
Conclusion
Intérêt de la réplication
Favorise les accès locaux : performance
Tolérance aux pannes (copies multiples)
Répartition de charge
Mode déconnecté envisageable en cohérence à terme
Limites
Diverses formes de cohérence, aucune simple ET performante
Cohérences faibles ⇒ comportements surprenants
Diverses implantations, toutes complexes
Difficiles de faire cohabiter plusieurs formes de cohérence
selon la nature des données
VI – Mémoire virtuelle 35 / 35
Communication à distance
interconnexion d’applications
Abstraire les protocoles de communication
⇒ Intergiciel : service implantant un modèle d’interaction entre
Conclusion processus / logiciel
Modèle / mécanisme
1 Intergiciel de base : communication par socket
2 Intergiciel client-serveur : appel de procédure et appel de
méthode à distance
3 Intergiciel asynchrone : communication par messages