Ce document est un corrigé de contrôle écrit pour le module DARE (M1 Réseaux et Systèmes Distribués) de l'Université Constantine 2 Abdelhamid Mehri, destiné aux étudiants de la Faculté des Nouvelles Technologies de l'Information et de la Communication. Il couvre les notions suivantes:
- Développement d'une application répartie pour l'utilisation des ressources de plusieurs serveurs.
- Propriétés et modèles d'architecture des applications réparties.
- Implémentation de l'architecture en utilisant Java RMI et les sockets.
- Alternatives possibles pour l'implémentation de l'architecture.
Exercices TD DARE -Développement d'applications réparties
Télécharger PDFUniversité Constantine 2 Abdelhamid Mehri
Faculté des Nouvelles Technologies de l'Information et de la Communication
Département d'Informatique Fondamentale et ses Applications
Date : 25 janvier 2018
Année universitaire : 2017/2018
Durée : 1h30
Corrigé Contrôle Écrit DARE (M1 Réseaux et Systèmes Distribués)
Partie 1 (04 points)
On vous demande de développer une application répartie permettant d'utiliser les ressources de plusieurs serveurs afin d'effectuer des calculs complexes demandés par des clients.
- Citez deux propriétés des applications réparties (sans explication).
- Scalabilité
- Hétérogénéité
- Rappelez deux modèles d'architecture des applications réparties.
- Client-serveur
- P2P
- Quelle est l'architecture la plus adaptée pour cette application ?
- Quel est le niveau de cette architecture (en termes de tiers) ?
Client-serveur
Nous faisons le choix de l'architecture suivante :
Lorsqu'un client demande un calcul, il effectue sa demande auprès d'un serveur WEB qui va répartir la charge de calcul en fonction du nombre de serveurs dont il dispose. Puis, il récoltera les résultats de chaque partie du calcul pour fournir au client le résultat final. On supposera que chaque serveur doit s'identifier auprès du serveur maître (Master) lorsqu'il est lancé.
Client-serveur multi-tiers (n-tiers)
Partie 2 (07 points)
Nous souhaitons à présent implémenter cette architecture à l'aide du JAVA RMI :
- JAVA RMI est un cas particulier de Middleware, quelle est cette particularité ?
- Expliquez le principe de fonctionnement de JAVA RMI.
- Le développement côté serveur se compose de :
- La définition d'une interface qui contient les méthodes qui peuvent être appelées à distance.
- L'écriture d'une classe qui implémente cette interface.
- L'écriture d'une classe qui instancie l'objet et l'enregistre en lui affectant un nom dans le registre de noms RMI (RMI Registry).
- Le développement côté client se compose de :
- L'obtention d'une référence sur l'objet distant à partir de son nom.
- L'appel à la méthode à partir de cette référence.
- En utilisant le schéma de la partie 1, quel est le nombre nécessaire d'interfaces à implémenter pour réaliser cette architecture ?
- À quel niveau sont-elles implémentées ?
- Proposez en JAVA une interface possible.
JAVA RMI est un middleware entre deux machines Java.
Principe de base : Les différentes étapes pour créer un objet distant et l'appeler avec RMI sont :
Le nombre d'interfaces est de quatre (04).
Au niveau des serveurs (03) et du Master (01).
import java.rmi.*;
import java.util.*;
public interface serv1Interface extends Remote {
public int fact(int N) throws RemoteException;
}
Aucun changement.
Partie 3 (07 points)
Nous souhaitons en un deuxième temps implémenter cette architecture en utilisant les sockets :
- Quels sont les types de sockets existants ?
- TCP/IP
- UDP/IP
- Quelle est la différence principale entre ces types ?
- TCP : mode connecté.
- UDP : mode non connecté.
- Expliquez le principe de fonctionnement des sockets.
- Corrigez et commentez le code suivant : (Plusieurs solutions sont possibles)
Le principe de fonctionnement des sockets repose sur la communication entre deux processus via des canaux de communication établis sur un réseau. Les sockets permettent d'envoyer et de recevoir des données entre ces processus.
import java.io.*;
import java.net.*;
public class Client {
public static void main(String args[]) throws Exception {
ServerSocket serverSocket = new ServerSocket(7877);
Socket socket = serverSocket.accept();
// Erreur : pas de num port pour accept
System.out.println("Réception de requête");
Socket socket = new Socket("localhost", 7877);
// Erreur : ligne du code de la classe client
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// ... (code manquant)
reader.close();
writer.close();
socket.close(); // fermeture des sockets
} catch (Exception e) {
e.printStackTrace();
}
}
}
Le code présenté correspond à la classe serveur alors que le nom affiché est : client.
Partie 4 (02 points)
Nous souhaitons une dernière fois implémenter cette architecture en utilisant un troisième mécanisme, citez des alternatives possibles ou des exemples.
- Middleware
- RPC
- Corba
- Service Web
- Composant réparti
- Java Beans
- ...
FAQ
Qu'est-ce que la scalabilité dans les applications réparties ?
La scalabilité dans les applications réparties fait référence à la capacité du système à gérer une augmentation de la charge de travail sans dégradation significative des performances.
Quelle est la différence entre TCP et UDP ?
TCP (Transmission Control Protocol) est un protocole orienté connexion qui garantit la livraison des données dans l'ordre et sans erreur. UDP (User Datagram Protocol) est un protocole sans connexion qui ne garantit pas la livraison des données dans l'ordre ni sans erreur.
Qu'est-ce que JAVA RMI ?
JAVA RMI (Remote Method Invocation) est une technologie Java qui permet à une application Java d'invoquer des méthodes sur un objet distant comme si c'était un objet local.