Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Support de Cours Programmation Repartie

Télécharger au format pptx, pdf ou txt
Télécharger au format pptx, pdf ou txt
Vous êtes sur la page 1sur 42

Programmation repartie et algorithmique distribuée

Dr Beman KAMAGATE
E-mail : beman.kamagate@esatic.edu.ci
Tel : 0749137683
VH : 19 H
CM : 9 H
TD: 5 H
TP: 5 H
 CONTENU

Chapitre 1 : Introduction à la programmation repartie


et à l’ algorithme distribuée

Chapitre 2 : Communication entre application


repartie via la couche de transport TCP/UDP

Chapitre 3 : Algorithmique distribuée


Chapitre 4 : Algorithme MapReduce
Chapitre 1 :
Introduction à la programmation repartie
et à l’ algorithme distribuée
 Système réparti (distribué) : Un ensemble de nœuds de
calcul indépendants qui apparaît à un utilisateur comme un
système unique et cohérent:
 Les nœuds sont autonomes;
 Les utilisateurs ont l’impression d’utiliser un seul
système (notion de transparence);
 Les nœuds interconnectées peuvent communiquer
par un réseau de communication, par moyen d’envoi
de messages ou d’autres moyens.
 Pourquoi les Systèmes Repartis ?

 Aspects économiques (rapport prix/performance);


 Adaptation de la structure d’un système à celle des
applications (géographique ou fonctionnelle);
 Besoin d’intégration (applications existantes);
 Besoin de communication et de partage d’information;
 Réalisation de systèmes à haute disponibilité ;
 Partage de ressources (programmes, données,
services);
 Réalisation de systèmes à grande capacité
d’évolution.
 Application repartie
 Une application informatique est un programme
exécutable sur une machine ou plusieurs machines qui
représente la logique de traitement des données
manipulées.
• Elle s’exécute en mémoire vive au dessus d’un
système d’exploitation;
• Avant exécution, elle est stockée sur un support
persistant;
• L’application émet un résultat sou forme de données
soit affichées, soit enregistrées sur un disque.

 Un grand nombre d’applications ne s’exécutent pas


intégralement sur un seul nœud de calcul. Il s’agit
d’applications reparties (distribuées)
 Application repartie = traitements coopérants sur des
données reparties
 Système vs application

 Système : gestion des ressources communes et de


l’infrastructure, lié de manière étroite au matériel sous-
jacent .
 Application : réponse à un problème spécifique, fourniture
de services aux utilisateurs.
 Une application utilise les services généraux fournis par le
système
 Programmation “classique” vs. Informatique Répartie.
Quelques constats

 Applications Client-Serveur :
• La plupart des applications réseaux sont du type
Client-Serveur ;
• Dans ce cadre, le client appelle un “service” auprès
d’un serveur ;
• La dénomination architectures orientées services
existe par ailleurs ; elle désigne principalement les
Services Web.

Exemples :
o Un navigateur web demande une page html à un serveur;
o Un client FTP demande la liste des fichiers et des
répertoires contenus dans un répertoire.
 Programmation “classique” vs. Informatique Répartie.
objectifs
 Programmation “classique” : En programmation classique
lorsque qu’un programme a besoin d’un service, il appelle
une fonction d’une librairie, une méthode d’un objet, etc.

 Informatique Répartie : Proposer des méthodes et outils


pour simplifier le développement d’applications réseau
Client-Serveur, en essayant de s’abstraire de l’aspect
“distant”” . Pour les applications “lourdes” :
• Décomposer les applications en ensembles de
services.
• Rationaliser la répartition des services pour limiter les
échanges d’informations.
 Programmation “classique” vs. Informatique Répartie.
 Programmation “classique” :
 Une seule machine
 Même OS
 Même espace mémoire
 Pas de problème de transport
 Disponibilité du service assuré (tant que l’on a accès
à la librairie)
 Informatique Répartie :
 Deux machines (sans compter celles “traversées”)
 OS différents
 Représentations différentes des types de bases
 Espace mémoire : “passer un pointeur/référence
comme argument” ? Problème de transport : firewall,
réseau , etc.
 Retrouver le service ? Où se trouve-t-il ? Qui le
propose ?
Chapitre 2 :
Communication entre application repartie
via la couche de transport
Chapitre 2 :
Communication entre application repartie via
la couche de transport TCP
Socket

 Probl´ematique
 Cr´eer une application r´epartie en utilisant les protocoles
de transport
 Application client-serveur :
un serveur fournit un service
un client utilise ce service
 Exemples : serveur ftp, www,
ssh, chat . . .
 Les communications entre les deux machines ( client et
serveur) doivent être sûres, les donn´ees ne doivent pas se
perdre, et arriver dans le mˆeme ordre d’´emission.
 Solution

 Les communications entre les deux machines doivent ˆetre


suˆres, les donn´ees ne doivent pas se perdre, et arriver dans le mˆeme
ordre d’´emission.
 TCP fournit ce canal de communication
 Pas de manipulation directe du protocole TCP
 Le client et le serveur doivent ´etablir une connexion
entre eux,
 En utilisant ldes sockets
 Chaque programme client ou serveur, va lire et ´ecrire
dans un socket
 SOCKET

M´ecanisme de communication permettant d’utiliser une


interface de transport

Apparu dans les syst`emes UNIX dans les ann´ees 80,


devenu
maintenant un standard
Pr´esent dans de nombreux langages (C, C++,python. . . )
 SOCKET
Comment communiquer via un socket ?

Comment ´etablir la connexion initiale entre le client et le


serveur ?
Comment envoyer des messages ?
Comment recevoir des messages ?
Client  SOCKET

 Client

Etablir un socket
identit´e du serveur : adresse IP, ou nom de la machine
numero port TCP

Creation socket

Socket socket = new Socket(identiteServeur, numPort)

Pour tester son programme, le serveur peut tourner sur la mˆeme machine que
le client, donc l’identit´e du serveur est 127.0.0.1
Socket

Client  SOCKET
 Client
Lire des donn´ees depuis un Socket
Le socket fournit un flux d’entr´ee avec la m´ethode
socket . getInputStream()

Lecture de chaînes de caractères

InputStreamReader stream de
Lecture de chaˆınes = new
caract`eres
InputStreamReader(socket.getInputStream());
getInputStream() : g`ere le flux d’entr´ee du socket
InputStreamReader : convertit un flux binaire en flux de
caract`eres
Socket

Client  SOCKET
 Client
Lecture de chaˆınes de caract`eres (suite)

BufferedReader reader = new BufferedReader(stream);


String message = reader.readLine();

BufferedReader : permet de g´erer efficacement la lecture


de
caract`eres, de lignes . . .
Socket

 SOCKET
 Client

Fermeture du socket
socket.close();

Plus de communication `a travers un socket apr`es fermeture


Ferme les InputStream et OutputStream associ´es
Socket

Client

Recapitulatif Lecture
import java.io.∗;
import java.net.Socket;

public class Client {

public static void main(String[] args) {


try {
Socket socket = new Socket(”127.0.0.1”,4444);
InputStreamReader stream =
new
InputStreamReader(socket.getInputStream());
BufferedReader reader = new
BufferedReader(stream); String message =
reader.readLine();
socket.close();
}catch (Exception e) {
e.printStackTrace();
}
} }
Socket

Client  SOCKET
 Client

Ecrire sur le socket


Le socket fournit un flux de sortie avec la m´ethode
socket . getOutputStream()
Initialiser le flux d’´ecriture

PrintWriter writer = new PrintWriter(socket.getOutputStream());

getOutputStream() : g`ere les flux sortant du socket


PrintWriter : Conversion entre flux de caract`eres et
flux binaire
Client
 SOCKET
 Client

Ecrire
writer.print(”message”);
writer.println(”message”);
Socket
 SOCKET
 Client
Client

Recapitulatif
import java.io.∗;
import java.net.Socket;

public class ClientEcriture {

public static void main(String[] args) {


try {
Socket socket = new Socket(”127.0.0.1”,4444);
PrintWriter writer =
new PrintWriter(socket.getOutputStream());
writer.println(”Hellow world!”);
writer.flush();

socket.close();
}catch (Exception e) {
e.printStackTrace();
}
}
Socket

Client

Flux

Autres flux
BufferedReader, PrintWriter permettent d’´echanger des
chaˆınes de caract`eres, mais ce ne sont pas les seules
classes
permettant d’utiliser les flux avec les sockets.
DataInputStream, DataOutputStream permettent de
manipuler les types primitifs de Java
...
https://www.jmdoudoux.fr/java/dej/chap-flux.htm
Socket

 SOCKET
 Serveur
Deux sockets :
ServerSocket : ´ecouter et accepter les connexions
Socket : pour communiquer avec le client
Creation d’un ServerSocket sur un port specifique

ServerSocket serverSock = new ServerSocket(numeroPort);

La classe ServerSocket possède plusieurs constructeurs


dont les principaux sont :
Constructeur Rôle
ServerSocket() Constructeur par défaut
ServerSocket(int) Créer une socket sur le port fourni en paramètre

Créer une socket sur le port et avec la taille maximale


ServerSocket(int, int)
de la file fournis en paramètres
Socket

 SOCKET
 Serveur
Deux sockets :
ServerSocket : écoute et accepter les connexions
Socket : pour communiquer avec le client
Creation d’un ServerSocket sur un port specifique

ServerSocket serverSock = new ServerSocket(numeroPort);

La classe ServerSocket possède plusieurs constructeurs


dont les principaux sont :
Constructeur Rôle
ServerSocket() Constructeur par défaut
ServerSocket(int) Créer une socket sur le port fourni en paramètre

Créer une socket sur le port et avec la taille maximale


ServerSocket(int, int)
de la file fournis en paramètres
 SOCKET
Socket

Serveur

 Serveur

Le serveur attend un demande de connexion d’un client


Creation du socket

Socket socket = serverSock.accept();

La m´ethode accept est bloquante (possibilit´e de fixer un d


´elai
maximum)
Une fois la demande accept´ee, un socket est cr´e´e
Le socket se manipule ensuite comme dans la partie client
Socket

Serveur

Recapitulatif
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Serveur {

public static void main(String[] args) {


try {
ServerSocket socketServer = new ServerSocket(4444);
Socket socketClient = socketServer.accept();
System.out.println(”connexion d’un client”);
socketClient.close();
socketServer.close();
}catch (IOException e)
{
e.printStackTrace();
} }

}
Serveur
Socket
Clients multiples

Probl`eme
Lorsque le serveur interagit avec le client, il n’est plus
`a l’´ecoute des autres clients
Il ne peut interagir qu’avec un seul client `a la fois
Ce n’est pas le comportement attendu d’un serveur

⇒ Utilisation des threads pour traiter chaque client


Clients multiples

Serveur
ServerSocket serverSock = new ServerSocket(5000);
while(true){
Socket clientSocket = serverSock.accept();
Thread t = new Thread(new ClientHandler(clientSocket));
t.start();
}

Thread communiquant avec chaque client

public class ClientHandler implements Runnable{

public ClientHandler(Socket socket){


// initialisation
}

public void run(){


// Interaction avec le client
}
Clients multiples
Clients multiples
Clients multiples
Clients multiples
Clients multiples
Clients multiples

R´esum
´e
Client
Initialiser le socket
Initialiser les flux d’entr´ee et de sortie
Lire et ´ecrire `a l’aide de ces flux suivant le protocole mis
en place avec le serveur
Fermer le socket

Serveur
Initialiser un socket server et attendre la connexion d’un
client
Communiquer via le socket (cf client)
Fermer le socket server
Clients multiples

Conclusion
Socket : extr´emit´e d’une liaison r´eseau
Facilite la lecture et l’´ecriture de donn´ees sur le r´eseau
En Java classe Socket et ServerSocket
Nous avons vu le mode connect´e en TCP permettant
une transmission suˆre de donn´ees, mais il existe un
mode d´econnect´e en UDP
Clients multiples

Liens

https://docs.oracle.com/javase/tutorial/
networking/sockets/
http:
//www.javaworld.com/article/2077322/core-
java/ core-java-sockets-programming-in-java-a-
tutorial. html

Vous aimerez peut-être aussi