Environnement Client-Serveur http://www.vigneras.name/pierre This work is licensed under a Creative Commons Attribution-Share Alike 2.0 France. See http://creativecommons.org/licenses/by-sa/2.0/fr/ for details
Sources Le Web (sic!): http://wikipedia.org http://www.google.fr Livres : Distributed Systems: Concepts and Design George F. Coulouris, Jean Dollimore, et Tim Kindberg (référencé par 'DS1' dans les slides) Sources Autres : Distributed Systems: Principles and Paradigms Andrew S. Tanenbaum et Maarten van Steen (référencé par 'DS2' dans les slides)
Plan (Points Importants) Origines (IPC) Critères Problèmes spécifiques à la distribution Architectures Terminologie Architecture logicielle Architecture système Plan Introduction
Plan (Points Importants) Plan Communications Réseau physique (Ethernet, Wi Fi, ATM) Protocoles : IP, UDP, TCP, HTTP Couches réseaux (ISO/OSI) RPC/RMI Objectif transparence Problématiques Marshalling/Serialisation Principes (Stub/proxy, diagramme de classes) Architecture classes (téléchargement de code)
Plan Introduction Introduction 5
client-serveur: origine Problématique initiale On cherche à faire communiquer des processus entre eux Introduction Inter process communication (IPC) Exemples : chat : stallman torvalds mail : stallman torvalds Logging centralisé : toutes les applications écrivent leur journaux dans /var/log Solutions?
client-serveur: origine IPC: solutions? On a pas précisé que les processus étaient sur des machines différentes! ; ) Les systèmes multi utilisateurs existent depuis les années 1960 Introduction CTSS puis Multics et enfin UNIX Pourquoi une bibliothèque (API) ne suffit elle pas?
client-serveur: origine Introduction Bibliothèque (API) : mail : écriture du message de stallman directement dans la mailbox de torvalds log : écriture du message directement dans /var/log Problème de droits un processus est lancé avec des droits d'accès qui sont liés à l'utilisateur Le code dans la lib aura les même droits que le processus stallman ne peut pas écrire dans la mailbox de torvalds
IPC (http://en.wikipedia.org/wiki/interprocess_communication) Introduction fichiers process stallman écrit un fichier dans un rèpertoire process torvalds lit le contenu du fichier Attention aux droits d'accès Attention aux accès concurrents Efficace?
IPC (http://en.wikipedia.org/wiki/interprocess_communication) Introduction fichiers mappés en mémoire (man mmap) Accès au fichier directement (plus de read/write) Private (COW) ou Shared mode Attention aux droits d'accès (rwx) Attention aux accès concurrents... Trés efficace.
IPC (http://en.wikipedia.org/wiki/interprocess_communication) signaux (man 7 signal) limité : pas de données associées au signal efficace Introduction
IPC (http://en.wikipedia.org/wiki/interprocess_communication) tube /pipe (man 7 pipe) unidirectionnel concept en flux (stream) Introduction il n'y a pas de notion de message Attention aux accès concurrents! limité : lecture/écriture entre processus de même parents
IPC (http://en.wikipedia.org/wiki/interprocess_communication) Introduction tube nommés / fifo (man 7 fifo) même fonctionnement que les tubes permet à des processus sans relations filiales de communiquer Très efficace utilisé massivement par exemple sur Tera 100 (1er Europe, 6ème au Top500 en 2010 11)
IPC (http://en.wikipedia.org/wiki/interprocess_communication) mémoire partagée SYSV (man shmget)/posix (shm_overview) Principe: Introduction Un processus créé un segment de mémoire partagée Il diffuse la clé d'accès Les autres processus accédent à cette mémoire comme d'habitude Très efficace. Attention aux accès concurrents sémaphores (man semget/sem_overview)
IPC (http://en.wikipedia.org/wiki/interprocess_communication) file de messages vieux : SYSV (msgget), récent : POSIX (msg_overview) Principe: Introduction Pas vraiment équivalent au FIFO send/receive support des priorités orienté message les priorités peuvent changer l'ordre d'arrivée Persistence niveaux OS tant que l'os n'est pas rebooté, la file existe
Systèmes distribués Souvent, les processus sont distants Pourquoi limite t'on la portée de cette définition aux processus? Introduction dans ce cas, on parle de système distribués quid du matériel? plusieurs ordinateurs imprimantes, scanner,...
Systèmes distribués Introduction Sinon, un ordinateur serait lui même un système distribué : nombreux composants CPU, RAM, Disques, Écran, Carte réseau L'OS rend le tout transparent : il donne l'illusion d'un tout cohérent C'est quoi l'os? kernel? shell? GUI? Transparence : élément très important
Systèmes distribués (DS1: 1.1 Introduction) On considère qu'un système est distribué s'il vérifie un certain nombre de critères Introduction
Systèmes distribués : critères (DS1: 1.1 Introduction) Parallélisme : les processus s'éxecutent en parallèle Attention : parallélisme!= concurrent Introduction parallélisme sur une machine multi core ou SMP concurrence sur une machine mono core même si les architectures modernes savent exécuter des instructions bas niveaux simultanément Le parallélisme devient la norme avec les architectures multi core Cela implique t'il qu'un système distribué est au moins composé de plusieurs CPUs?
Systèmes distribués : critères (DS1: 1.1 Introduction) Introduction Pas d'horloge globale le temps ne s'écoule pas exactement de la même manière pour chaque processus les processus ne peuvent pas se baser sur le temps pour se synchroniser : ils doivent communiquer Ce critère écarte les ordinateurs de la définition
Systèmes distribués : critères (DS1: 1.1 Introduction) Pannes indépendentes un processus peut ne plus répondre indépendemment des autres Introduction le réseau est tombé le processus s'est craché la machine s'est planté... Difficile de distinguer les différents cas Ce critère écarte les ordinateurs de la définition
Systèmes distribués (DS1: 1.1 Introduction) Quels sont les intérêts des systèmes distribués? Introduction
Intérêt des systèmes distribués (DS1 : 1.1 Introduction) Partage de ressources : matérielle : Introduction imprimantes (CUPS) disques (NAS, SAN), CPU (SLURM),... logicielles : fichiers (NFS, SMB, Emule,...), base de données (PostgresQL, MySQL, ) web services (google map, amazon S3,...)
Intérêt des systèmes distribués Performance augmenter le nombre d'utilisateurs/seconde Introduction diminuer la charge sur une ressource donnée Augmente t'on d'autant le nombre d'utilisateurs par seconde en augmentant le nombre de machines? Si le goulot d'étranglement est la base de donnée, il faut distribuer cette base Tolérance aux pannes Si une panne survient, le service est dégradé seulement Mais il fonctionne toujours
Examples (DS1 : 1.2 Examples) Internet est il un système distribué? Introduction
Examples (DS1 : 1.2 Examples) Internet est il un système distribué? Introduction Non : il n'est pas une collection de processus! Web, mail, bittorrent sont des systèmes distribués Web : firefox communique avec httpd mail : kmail communique avec sendmail BitTorrent : emule communique avec emule L'avenir : ordinateurs obsoletes (pour le grand public) ultra connectés : webphone, tv, ipad, console,...
Problèmes spécifiques à la distribution (DS1 : 1.4 Challenges) Communication inter processus distants Même problématique que les IPC locales C'est le cœur d'un système distribué Connaissance réseau indispensable Introduction On s'appuiera sur les couches réseaux sous jacente (modèle OSI,...) On utilisera les couches hautes pour les garanties ou les services (ex: HTTP, FTP) On utilisera les couches basses pour les performances (ex: UDP) Dans la grande majorité des cas, on s'appuie toujours au moins sur IP
Problèmes spécifiques à la distribution (DS1 : 1.4 Challenges) Introduction Hétérogénéité Réseaux (Ethernet, ATM, Token Ring, IB) Matériel (x86, SPARC, Power, ARM) OS (Linux, Unix, Windows) Langages (C, C++, C#, Java, Python, Ruby) Implementations (IE vs Netscape, Outlook vs...) Le middleware est une couche logicielle qui masque l'hétérogénéité CORBA, J2EE,.NET sont les plus connus
Problèmes spécifiques à la distribution (DS1 : 1.4 Challenges) Introduction Ouverture capacité à étendre le sytème avec de nouvelles ressources matérielles et/ou logicielles capacité à supporter une nouvelle implémentation d'une partie du système sans remettre en cause l'ensemble permet de changer de fournisseur Publication d'interface claire et concise masquant les détails sous jacent Utilisation des standards lorsqu'ils existent (RFC)
Problèmes spécifiques à la distribution (DS1 : 1.4 Challenges) Sécurité Les processus échangent des messages sur un réseau généralement considéré non sécurisé Introduction Identification + Chiffrement Denial of Service : un composant matériel est surchargé de requête, il ne peut plus répondre Code mobile : un code est recu dans un message, peut on l'exécuter Un pare feu est un pré requis, mais il n'est pas suffisant
Problèmes spécifiques à la distribution (DS1 : 1.4 Challenges) Introduction Scalabilité Capacité du système à supporter une augmentation significative des ressources et des utilisateurs Compromis coût/performance à trouver Choisir des limites acceptables dans le système Éviter les goulots d'étranglements nombres d'adresses IPv4, numéro de tél sur 8 chiffres... /etc/hosts centralisé versus DNS Réplication, cache,...
Problèmes spécifiques à la distribution (DS1 : 1.4 Challenges) Introduction Pannes partielles Une partie du système peut tomber en panne Détection des pannes (ex : checksum) Masquage des pannes (ex : retransmission TCP) Tolérance aux pannes (ex : timeout client web) Récupération après panne (ex : journalisation) Redondances des ressources (ex : IP, DNS, RAID) La virtualisation peut aussi offrir une solution
Problèmes spécifiques à la distribution (DS1 : 1.4 Challenges) Parallélisme/Concurrence Plusieurs processus s'exécutent en parallèle Introduction ex : plusieurs clients achètent le même livre sur amazon. Le système doit garantir que les clients recoivent bien leurs livres, et qu'ils payent bien (même lorsqu'il ne reste plus qu'un seul livre en stock). Programmation concurrente complexe indéterminisme rend la mise au point très difficile (ex : disparition de bug au débogage)
Problèmes spécifiques à la distribution (DS2 : 1.2.2 Transparency) Transparence Leslie Lamport (LaTeX) : "A distributed system is one in which the failure of a computer you didn't even know existed can render your own computer unusable." Introduction Andrew Tanembaum (minix) : "A distributed system is a collection of independent components that appears to its users as a single coherent system) La transparence est une notion très importante en informatique distribuée.
Problèmes spécifiques à la distribution (DS2 : 1.2.2 Transparency) Introduction Transparence Accès : ressource locale et distante s'accède de la même manière (ex : sshfs, nfs, SPARC vs x86) Localisation : masque la localisation (ex : URL) Mobilité : masque le mouvement des ressources et des utilisateurs (ex: téléphone mobile) Concurrence : masque la concurrence d'accès aux ressources (ex : database update) Réplication : masque l'utilisation de réplicas (RAID) Panne : masque les pannes et leurs récupérations (mail) Persistence : masque ressource en RAM, disque, bande, etc. (ex : HTML page)
Problèmes spécifiques à la distribution (DS2 : 1.2.2 Transparency) Introduction Transparence Accès : ressource locale et distante s'accède de la même manière (ex : sshfs, nfs, SPARC vs x86) Localisation : masque la localisation (ex : URL) Mobilité : masque le mouvement des ressources et des utilisateurs (ex: téléphone mobile) Concurrence : masque la concurrence d'accès aux ressources (ex : database update) Réplication : masque l'utilisation de réplicas (RAID) Panne : masque les pannes et leurs récupérations (mail) Persistence : masque ressource en RAM, disque, bande, etc. (ex : HTML page)
Plan Architectures Architectures 37
Terminologie (DS1 : 2.2 Architectural Models) L'absence d'horloge globale dans un système distribué impose aux processus de communiquer afin de se synchroniser pourquoi? Architectures
Terminologie (DS1 : 2.2 Architectural Models) Les processus communique par l'envoi de messages. On distingue les serveurs : ils offrent un service ils sont passifs, attendant la réception de messages provenant de processus clients les clients : Architectures ils accèdent à des services offerts par des serveurs en envoyant des messages (requêtes) ils sont actifs
Terminologie (DS1 : 2.2 Architectural Models) Pourquoi parle t'on de serveur matériel? "Le serveur est tombé en panne" "Il faut augmenter la RAM du serveur" Architectures
Terminologie (DS1 : 2.2 Architectural Models) Pourquoi parle t'on de serveur matériel? "Le serveur est tombé en panne" Architectures Dans l'industrie, les processus serveurs sont passifs, mais pas parresseux! Ils fonctionnent en permanence Ils sont souvent critiques On place donc souvent un processus serveur sur une machine dédiée Performance : pas de partage des ressources "Il faut augmenter la RAM du serveur" Sécurité : si la machine plante, un seul serveur est indisponible C'est un abus de langage!
Terminologie (DS1 : 2.2 Architectural Models) Quelques exemples : client ftp serveur vsftpd client web firefox, serveur web apache client mail kmail, serveur mail sendmail quid des webmails (ex : gmail)? Un processus client peut réaliser de nombreuses requêtes à différents serveurs wget http://www.google.com Architectures 1 requête DNS (minimum) n requêtes HTTP par lien mentionné dans la page
Terminologie (DS1 : 2.2 Architectural Models) Architectures Un processus serveur peut être aussi client : client web serveur web serveur base de données Un serveur peut lui aussi faire de nombreuses requêtes client webmail serveur web userdb serveur de mail serveur d'images Il peut donc être tour à tour client de différents serveurs. Un processus est un serveur s'il offre un service spécifique pour des clients potentiels Cela ne l'empêche donc pas d'être un client vis à vis d'un autre service autre que celui qu'il fournit pourquoi cette dernière précision?
Terminologie (DS1 : 2.2 Architectural Models) Architectures On distingue les processus qui n'ont pas de rôle particulier vis à vis du service : ils sont à la fois client et serveur du même service C'est le modèle pair à pair (peer2peer) partage de fichiers : emule, BitTorrent partage de CPU : seti@home news : USENET pour la com. inter serveur mail : Mail Transfert Agent pour la com inter serveur téléphonie : Skype Trés efficace pour certaines applications Au cœur de la problématique de la "neutralité du réseau" les FAI cherchent à filtrer
Architecture Logicielle (DS1 : 2.2 Architectural Models) Décrit la structure d'un logiciel en terme de module ou de couche d'abstraction. Exemple dans le cas local : Architectures
Architecture Logicielle (DS1 : 2.2 Architectural Models) Dans le cas distribué, on définit les éléments suivants : la plateforme Solaris/SPARC, Linux/x86, NetBSD/x86, AIX/Power le middleware CORBA, J2EE,.NET les applications distribuées Architectures www.sncf.org
Architecture Logicielle (DS1 : 2.2 Architectural Models) Architectures La plateforme fournit le stack TCP/IP, le kernel, le matériel Le middleware s'appuie sur la plateforme pour fournir des abstractions de haut niveaux facilitant le développement d'applications distribuées mécanismes de communication point à point mécanismes de communication groupés mécanismes de connexions vers les bases de données mécanismes transactionnels mécanismes pour l'authentification, l'autorisation...
Architecture Logicielle (DS1 : 2.2 Architectural Models) Le middleware est limité: principe du bout à bout certaines applications ne peuvent s'appuyer intégralement sur les services du middleware vérification, correction, sécurité à différents niveaux requièrent l'accès à des données de l'application. Ré implémentation dans l'application Architectures Duplication de code dans le middleware Lire : "End to end arguments in system design", Saltzer et al. 1981 Tendance aujourd'hui à oublier ce principe L'intelligence n'est pas dans le réseau mais dans les terminaux
Architecture Système (DS1 : 2.2 Architectural Models) Architectures Définition des rôles des processus serveur de page web, serveur de base de données, serveur d'authentification,... Placement des processus serveur de page web statiques lecture disque rapide serveur de base de données lecture/écriture rapide serveur d'authentification lecture disque rapide serveur de journalisation écriture disque rapide
Architecture Système (DS1 : 2.2 Architectural Models) Modèle client serveur classique (vieux ; )) ex : firefox apache nfsd Quelle est l'architecture logicielle? Architectures
Architecture Système (DS1 : 2.2 Architectural Models) Mise en œuvre d'une architecture client/serveur classique Sur un linux : mettez en place les serveurs suivants Web Configuration? Client? PostgresQL Configuration? Clients? SSH Configuration système: /etc/sshd/config user: ~/.ssh/config Clients? Architectures
Architecture Système (DS1 : 2.2 Architectural Models) Modèle client serveur multiples ex : DNS, NIS Architectures
Architecture Système (DS1 : 2.2 Architectural Models) Serveur proxy et cache Nombreux niveaux de cache en pratique Le proxy permet de partager un cache commun Le proxy permet de filtrer/surveiller (avec un firewall) Architectures
Architecture Système (DS1 : 2.2 Architectural Models) Architectures Ajouter un proxy au serveur web précédemment installé proxy : squid Fonction cache configuration client Fonction monitoring/limitation filtre dansguardian règles parefeu requise
Architecture Système (DS1 : 2.2 Architectural Models) Pair à pair (peer2peer or p2p) Coordination requise entre les processus Scalabilité? Fiabilité? Architectures
Architecture Système (DS1 : 2.2 Architectural Models) Network computers La gestion des applications clientes sur chaque ordinateur clients est un vrai challenge mise à jour, sécurité, bugs, configuration, déploiment, coût, Solution : l'ensemble OS + applications est téléchargé depuis un serveur. Architectures Attention aux vocabulaire : client/serveur = machine/process? Exemple : PXE est installé de base sur la plupart des PC aujourd'hui Permet de démarrer depuis le réseau Un disque dur est il requis? Intéressant?
Architecture Système (DS1 : 2.2 Architectural Models) Network computers La gestion des applications clientes sur chaque ordinateur clients est un vrai challenge mise à jour, sécurité, bugs, configuration, déploiment, coût, Solution : l'ensemble OS + applications est téléchargé depuis un serveur. Architectures Attention aux vocabulaire : client/serveur = machine/process? Exemple : PXE est installé de base sur la plupart des PC aujourd'hui Permet de démarrer depuis le réseau Un disque dur est il requis? Intéressant? swap, cache
Architecture Système (DS1 : 2.2 Architectural Models) Architectures Clients légers (thin clients): extension du network computer Le client ne comporte plus que le minimum écran, clavier, souris, audio, Les applications s'exécutent sur le serveur Seul l'affichage est réalisé sur le client Avantages Administration réduite au strict minimum Inconvénients Peu adapté à la vidéo en raison du débit requis (réseau) Coût d'acquisition très bas Application locales avec disque dur Ex : X Window (vectoriel), VNC (bitmap)
Architecture Système (DS1 : 2.2 Architectural Models) L'architecture X Window Le client envoie des requêtes d'affichage Architectures Le serveur exécute ces requêtes sur l'écran auquel il est connecté Client et serveur peuvent être distant Le client est l'application firefox, xterm, kmail, ex: drawline(blue, 0, 0, 640, 480), print("hello") il tourne parfois sur une machine distante Le serveur est le processus X il tourne généralement sur la machine locale Attention à la terminologie : inverse à l'intuition!
Architecture Système (DS1 : 2.2 Architectural Models) Exercice X Windows Connectez vous sur une autre machine Faites en sorte que l'affichage apparaisse sur votre écran en passant par SSH sans passer par SSH Faites en sorte que l'affichage de votre client apparaisse sur l'écran de votre voisin Architectures Pré requis? Danger?
Architecture Système (DS1 : 2.2 Architectural Models) Mettez en place un serveur de Thin client Utilisez Linux Terminal Server Project (LTSP) Serveur requis Serveur TFTP boot PXE Serveur DHCP adressage réseau Serveur NFS? applications locales Serveur NIS? Architectures identification partagée
Architecture Système (DS1 : 2.2 Architectural Models) Codes mobiles Le client télécharge le code à exécuter depuis un serveur (de code) Le code téléchargé peut utiliser les ressources locales du client (écran, souris, clavier, disque, réseau) interactivité, performance Le code téléchargé peut contacter à son tour d'autres serveurs Le code téléchargé peut devenir un serveur à son tour Architectures Des idées d'exemples?
Architecture Système (DS1 : 2.2 Architectural Models) Codes mobiles Le client télécharge le code à exécuter depuis un serveur (de code) Le code téléchargé peut utiliser les ressources locales du client (écran, souris, clavier, disque, réseau) interactivité, performance Le code téléchargé peut contacter à son tour d'autres serveurs Le code téléchargé peut devenir un serveur à son tour Architectures Des idées d'exemples? Les vers/virus et autres piraterie! ; ) Applets, javascript, flash,...
Architecture Système (DS1 : 2.2 Architectural Models) Architectures Quelques exemples de migration migration d'objets /pages : quand une thread référence un objet/une adresse mémoire qui n'est pas présente, on rappatrie l'objet/la page, avant de continuer migration de flux : une thread continue son exécution sur une autre machine lors d'un appel de procédure/méthode distant migrationde threads : la thread stoppe son exécution à la demande (extérieure), son contexte d'exécution est transféré sur un autre serveur, puis redémarrée par ce dernier. Problèmes de sécurité évidents
Migration d'objets TCP RMI o.m( ) Migration de flux (faible et proactive) Migration de threads (forte et réactive)
Plan Communications Communications 66
Topology Réseau II. History/Network (http://en.wikipedia.org/wiki/network_topology)
Communication point à point Logiciel Logiciel Périphérique réseau Périphérique réseau Réseau
Communications Communication point à point? Abstraction :
Datagrammes Communiquer = envoyer des données Une trame : Communications Un paquet de bits Que doit contenir une trame?
Trame : contenance Communications Source : de qui provient la trame Destination : à qui cette trame est destinée? Données : les données à transmettre
Exemple : le protocole Ethernet Protocole standard très utilisé Communications Type anneau 10 Mb/s, 100 Mb/s, 1 Gb/s, 10Gb/s Bon rapport qualité prix Une carte ethernet = un numéro MAC Attribué par le constructeur /sbin/ifconfig donne le numéro MAC
Protocole Ethernet Une trame ethernet contient (entre autres) : Communications Le numéro MAC source Le numéro MAC destination Les données à transférer Simplicité du protocole (modèle humain) On prend la parole S'il y a collision, on recommence plus tard
Communications Autres protocoles Token ring ATM Infiniband PPP, SLIP (ligne téléphonique)...
Problèmes rencontrés Taille des données limites de taille des trames notion de datagramme Communications paquet de données = tableau d'octets découpage en trames de taille convenable Ethernet permet à une machine d'envoyer une trame à une autre machine du même réseau En faite, communication de carte réseau à carte réseau Quel intérêt pour une machine d'avoir plusieurs cartes réseau?
Communication inter-réseaux Communications Différence entre un internet et l'internet un internet : un réseau de réseaux Internet : le réseau des réseaux à l'échelle mondiale Intranet : réseau interne à une entreprise Extranet : exportation sécurisée d'un intranet?
Problèmes liés aux communications internet Hétérogénéité des réseaux Adressages différents Communications Routage numéro MAC sur Ethernet pour envoyer un paquet sur un autre réseau, quelle route prendre? Passage à l'échelle : nommage comment trouver une ressource du réseau global?
Solution : protocole universel Transfert de datagrammes (paquets) Adressage universel Communications Association adressage physique/logique ARP/RARP (Unix : arpwatch) Notion de passerelle (gateway) Existe sur plusieurs réseaux Elle s'occupe du découpage en trames de taille convenable Notion de routeurs S'occupe de transmettre un datagramme d'un réseaux à un autre
Communications Communication point à point Logiciel Logiciel Protocole Universel Protocole Universel Périphérique réseau Périphérique réseau Réseau
Architecture en couche (http://en.wikipedia.org/wiki/osi_model) II. History/Network On divise le système réseau en couches À l'intérieur de chaque couche une ou plusieurs entités implémentent sa fonctionnalité Chaque entité interagit directement avec la couche immédiatement en dessous et fournit des fonctionnalités à la couche immédiatement au dessus Les protocoles permettent à une entité d'une machine d'interagir avec l'entité correspondante de même niveau d'une autre machine
Architecture en couche (http://en.wikipedia.org/wiki/osi_model) II. History/Network Abstraction: Communication de processus à processus Implementation: Communication de couche à couche
Routage Communications Différencier les messages destinés : au réseau local, à l'extérieur du réseau local Algorithmique compliqué Quelle route est la plus efficace?
Le nommage Communications Adressage numérique Idéal pour les machines Fastidieux pour les humains Associer un nom à une adresse Statiquement Dynamiquement
Exemple : Le protocole Internet IP (Internet Protocol) Communications Origine Arpanet (1970!!) : Defense Advanced Research Agency : USA Adressage IPv4 : 32 bits ~ 4 Milliards de machines insuffisants aujourd'hui IPv6 : 128 bits ~ 3.1038 adresses! ICMP : protocole de vérification des datagrammes
Internet Topology (2003-11-23) Communications Asia Pacific Europe Middle East Central Asia Africa North America Latin American Caribbean RFC1918 Unknown
Adressage IPv4 Numéro IP : w.x.y.z Communications Associé à un périphérique réseau et non à une machine!! 0 w,x,y,z 255 Nommage dynamique : DNS Notion de domaine Notion de hiérarchie
Applications Communications Nslookup/host Quel nom est associé à une adresse? Quelle adresse est associée à ce nom? Ping Une adresse répond-elle? Traceroute Utilisation du TTL (Time To Live)
Question Pourquoi parle t'on des protocoles bas niveaux dans un cours sur les systèmes distribués? Communications La transmission de datagrammes illustre quelques uns des problèmes inhérents aux systèmes distribués Les propriétés de la transmission de datagrammes des protocoles bas niveaux affectent les protocoles de plus haut niveau Terminologie indispensable
Problèmes liés au protocole universel Plusieurs processus au sein d'un même système Communications Système multi tâches Qui doit recevoir les requêtes : Serveur Web? Serveur FTP? Serveur de courrier? ICMP ne possède pas ce problème Une erreur réseau s'adresse au gestionnaire de réseau et non à un processus
Solutions : protocole datagramme Communications Communications en mode messagerie (datagramme) Notion de ports
Notion de ports Le système maintient une table d'association port serveur Communications Comment un client connaît il le port d'un serveur? Certains ports doivent être standardisés UNIX : /etc/services Serveur de recherche (lookup) dilemme de la poule et de l'oeuf Ex : SUN RPC portmapper
Communications Communication point à point Logiciel Logiciel Protocole datagramme Protocole datagramme Protocole Universel Protocole Universel Périphérique réseau Périphérique réseau Réseau
Communications Exemple : UDP Utilise le protocole IP Mode datagramme (User Datagramme Protocole) Apporte la notion de port Au dessus de IP : UDP/IP
Les couches à l'œuvre Exemple: UDP Communications Application Layer Data Transport Layer UDP UDP Data Header Network Layer Link Layer IP Header Frame Header IP Data Frame Data Frame Trailer
Communications Exemple UDP : Bonjour Monde Développer en Java un programme qui envoi "Bonjour monde" à un autre programme en utilisant le protocole UDP. Le programme "receveur" doit afficher ce qu'il reçoit.
Remise de projets : Attendu Envoyer un fichier archive nom tpx.tar.gz le contenu doit être votre projet eclipse bin/ contient tous les *.class src/ contient tous les *.java Packaging java : tout est dans un package exo En général : exo.server et exo.client java cp bin/ exo.server et java cp bin/ exo.client doivent afficher l'usage Attention à la date limite Tester votre projet avant de l'envoyer!! Processus de test à mettre en place...
Bonjour Monde : remarques Qui est le serveur? Communications On considère qu'il n'y a pas de serveur : un serveur doit être capable de répondre à plusieurs requêtes en séquences! Mode de communication inter processus
Bonjour Monde : remarques générales Communications On vérifie que les paquets UDP transitent sur le réseau Unix : tcpdump :tout ce que reçoit la carte ethernet est affiché (mode privilégié) WindowsNT/Unix : netstat : informations réseau
Communications Exemple UDP : unidirectionnel Un programme lit en boucle une chaîne de caractères sur la console et la transmet à un autre programme L'autre programme reçoit en boucle une chaîne de caractères et l'affiche sur la console "clientquit" arrête le client et "serverquit" arrête le serveur
Unidirectionnel : remarques conceptuelles Communications Qui est le client, qui est le serveur? client : le lecteur serveur : l'afficheur sur console Quel est le type de service que le serveur implémente? Service d'affichage de chaîne de caractères sur console à distance Une chaîne transmise = une requête Pourquoi la boucle est nécessaire? pouvoir répondre à plusieurs requêtes (= serveur)
Unidirectionnel : remarques Java Emission/Réception dans un buffer de taille fixe Communications Attention à la réception : un tableau est toujours plein (même de zéros) Solution moche : enlever les caractères non affichable aux extrémités String.trim() Solution propre : utiliser le nombre d'octets réellement reçu DatagramPacket.getLength(). Ne pas envoyer "clientquit" au serveur
Unidirectionnel : observations Démarrez deux clients simultanés sur le même serveur Communications Des ports différents sont automatiquement assignés aux clients UNIX : tcpdump, netstat, fuser; ps
Unidirectionnel : problèmes Communications Que se passe t'il si l'on envoie une phrase qui contient plusieurs lignes? L'envoi de plusieurs paquets ne constitue pas une action atomique Des paquets de clients différents peuvent se mélanger ordonnancement des évènements
UDP : subtilités Communications Une opération réseau peut être bloquante : Envoyer un paquet UDP est une opération non bloquante Recevoir un paquet UDP est une opération bloquante Attention au problème d'échelle : Les opérations d'entrées/sorties peuvent être considérées comme "bloquantes" comparées aux opérations de calculs Rigoureusement, seule la réception est bloquante : celle ci pouvant ne jamais arriver!
UDP : interbloquage Communications Lorsque deux machines tentent de recevoir un paquet UDP l'une de l'autre en même temps! Solutions : Concevoir son système pour éviter cette situation Utiliser un dépassement de délai (time out) à la réception Utiliser les threads
Communications Exemple UDP : serveur echo Le client lit en boucle une chaîne de caractères sur la console et la transmet au serveur Le serveur reçoit en boucle une chaîne de caractères, l'affiche sur la console, et la renvoie au client "clientquit" arrête le client et "serverquit" arrête le serveur
Serveur echo : remarques Java Communications Réutilisation de l'objet DatagramPacket Chaque datagramme est "routé" séparément Réutilisation du buffer de réception en buffer d'émission (echo)
Serveur echo : problèmes Communications Interbloquage possible : "serverquit" arrête le serveur qui ne répond plus au client le client attend la réponse du serveur (opération bloquante)! Solution : Le serveur répond au client juste avant de s'arrêter Le client vérifie que la chaîne envoyée au serveur est "serverquit" et n'effectue pas de réception.
Communications Étude de cas : banque en ligne Supposons qu'il nous est demandé de concevoir un système distribué pour obtenir des soldes de comptes en banque On dispose d'un serveur qui gère les noms, les mots de passe et les soldes de comptes Principe : à un couple (nom, mot de passe) correspond un solde à afficher sur le client
Étude de cas : banque en ligne Communications Concevoir un système distribué, incluant le protocole pour la communication entre un client et ce serveur : Comment le serveur authentifie le client? Quelles sont les données à échanger Dans quel ordre les messages doivent être envoyés? Comment l'état est maintenu entre le client et le serveur?
Étude de cas : banque en ligne Communications Solution simple : Client : hello Serveur : login? Client : un nom d'utilisateur Serveur : passwd? Client : un mot de passe Serveur : le solde correspondant
Étude de cas : banque en ligne Communications Quels sont les problèmes liés à ce protocole? Clients multiples Recouvrement en cas d'erreur Sécurité
Étude de cas : banque en ligne Comment étendre ce protocole pour permettre Comptes multiples Transfert d'argent inter comptes Communications
Communications Problèmes avec le mode datagramme Le développeur doit s'occuper de : Datagrammes perdus Datagrammes dupliqués Datagrammes corrompus Datagrammes arrivés dans le désordre Control du flux Le client envoi les données plus rapidement que le serveur ne peut les traiter
Problèmes avec le mode datagramme Communications L'abstraction datagramme utilisateur n'est pas pratique à utiliser pour des petites ou des grandes tailles L'envoi de paquets de petites tailles n'est pas efficace Bufferisation L'envoi de paquets de grandes tailles peuvent être refusé Découpage en paquet plus petits Doit on résoudre chacun de ces problèmes à chaque écriture d'une application?
Communication en mode connecté Principes : Une connexion est établie entre deux logiciels Communications utilisation des ports Une fois la connexion établie, le protocole peut fournir certaines garanties
Garanties Fiabilité Communications Gestion des paquets perdus, corrompus, dupliqués, arrivés dans le désordre Flux de données La communication n'est plus en mode datagrammes On peut envoyer des données en continue Découpage des données en datagrammes Plus de problèmes de petite ou de grande tailles
Garanties Mode bidirectionnel Communications Sécurité On peut envoyer et recevoir des données par la même connexion Les données sont encryptés/décryptés...
Communications Fiabilité Solution : Les messages dupliqués sont éliminés Si les messages arrivent dans le désordre, le receveur attend l'arrivé du premier message Chaque envoi de message donne lieu à un accusé de réception Si l'accusé n'est pas reçu, le message est renvoyé Somme de contrôle pour éliminer les messages corrompus
Flux de données Communications Solution : Un flux de données de A à B Un flux séparé de données de B vers A Full-duplex : transmission et réception dans les deux directions simultanées Découpage en datagrammes de taille fixes Buffering : mise en file d'attente
Abstraction Communications Comment se situe le protocole mode connecté dans notre architecture en couche? Approche radicalement opposée au mode messagerie (datagramme) Notion de flux bi directionnel
Communications Architecture en couche Logiciel Logiciel Protocole Mode connecté Protocole Mode connecté Protocole Universel Protocole Universel Périphérique réseau Périphérique réseau Réseau
Mode connecté Deux entités établissent une connexion: Si A souhaite ouvrir une connexion vers B Communications A envoie un message Synchronize à B B répond à A par un accusé de réception et un message de synchronisation A répond à B par un accusé de réception A et B sont en accord pour communiquer Protocole similaire pour la déconnexion
Communications Mode connecté Deux entités seulement Les messages d'autres entités ne peuvent pas être mélangés Les protocoles en mode connecté sont moins compliqués à utiliser que ceux en mode datagramme Performance moindre!!
Modèle client/serveur en mode connecté Communications Le serveur ouvre une socket d'écoute sur un port Il attend une requête de clients Il créé une connexion en ouvrant une nouvelle socket sur un port libre, connectée à la machine cliente distante sur le port spécifié par le client Cette socket est utilisée pour les communications
Exemple : TCP Communications Utilise le protocole IP Mode connecté (TCP : Transport Connected Protocol) Garanties offertes : Fiabilité Bidirectionnel Flux de données Sécurité (checksum)
Exemple TCP : TimeServer Communications Développer en Java un serveur TCP qui affiche l'heure toutes les n secondes (paramétrable) Tester le serveur avec un client adéquat Client "maison" Telnet Tester le serveur avec plusieurs clients simultanés
TimeServer : remarques Java Java : les classes d'entrées/sorties (I/O) *Reader/*Writer vs *InputStream/*OutputStream stream Communications flux d'octets, générique : pour lire/écrire n'importe quoi reader/writer flux de caractères encodage/décodage Unicode prise en compte de la plateforme exemple : \n sous Unix = \n\r sous Windows
TimeServer : remarques Java Communications Le serveur doit utiliser des flux de type caractères PrintWriter : println() flush automatique après newline() gestion des erreurs réseau "à l'ancienne" BufferedWriter : Pas de println() flush manuel gestion des exceptions classiques
TimeServer : remarques Java Communications Arrêt du client non intégré au protocole l'arrêt brutal implique une gestion particulière de l'exception correspondante Attention à la bufferisation flush() manuel Penser au newline() à la place de "\n" Indépendance vis à vis de la plateforme notion d'encodage Sécurité : socket.shutdowninput() Le serveur ne doit pas recevoir de données
TimeServer : remarques générales Communications Avantages du mode connecté Mode connecté (!) Flux de données Problèmes : Gestion des clients multiples concurrents Solution(s)? threads
Concurrence : notion de threads Communications Concurrence!= parallèle concurrent : le processeur partage le temps d'exécution des processus parallèle : les processus s'exécutent dans la même durée de temps (multi processeur) Plusieurs processus dans le système s'exécute en concurrence : système multi tâches Plusieurs threads au sein d'une application : application multi threadée Thread utilisateurs!= threads noyaux Ordonnancement
Threads : pour et contre Communications Pour : Gestion rapide (comparé aux processus) Expressivité Contre : Sémantique plus compliqué que les processus Adressage partagé Alternative : nombreuse!! En pratique : évènements Lire : [von behren et al. 2003] Why Events Are A Bad Idea
Exemple TCP : TimeServerMultiThread Communications Développer en Java un serveur TCP multithreadé : qui affiche l'heure toutes les n secondes (paramétrable) capable de répondre à plusieurs clients simultanés. Tester le serveur avec plusieurs clients simultanés
Exemple TCP : talk Communications Développer en Java l'utilitaire Unix talk : Une personne A désire communiquer avec une autre personne B sur le réseau A lance un talk en précisant la machine de B Tout ce que A tape au clavier s'affiche chez B et vice-versa
Talk : modélisation Communications System.out System.out Socket.in Socket.in Talk Talk Socket.out Réseau System.in Socket.out System.in
Talk : remarques Java Un serveur et potentiellement plusieurs clients Problèmes avec System.in et System.out Communications Solutions : fenêtrage Utilisation de Swing (JFC)
Talk fenêtré : remarques Java Attention au problème Swing/Thread JTextArea Communications L'un en écriture Son contenu doit être envoyé sur le réseau : interface Document L'autre en lecture Son contenu doit être mise à jour en fonction des messages réseaux :thread de lecture Mise en place d'un protocole de communication Problème de la terminaison doit faire partie intégrante du protocole
Talk : remarques générales Communications Avantages du mode connecté Mode connecté (!) Flux de données Mode bidirectionnel Fiabilité
Architecture en couches Communications Logiciel Protocole Datagramme Logiciel Protocole Datagramme Protocole Connecté Protocole Connecté Protocole Universel Protocole Universel Périphérique réseau Périphérique réseau Réseau
Communications La norme OSI/ISO OSI : Open System Interconnexion ISO : International Standard Organization Année 70 (?) Résultant des différents types de réseaux propriétaires incompatibles entre eux Modèle d'architecture réseau décomposé en sept couches Chaque couche correspond à un service particulier et doit masquer les détails aux couches supérieures
Network OSI Model II. History/Network X.25 follows the OSI Model Internet (TCP/IP) does not!!
Les couches de la norme OSI/ISO Communications 7 Couches hautes 6 5 4 Couches basses 3 2 1
Les couches basses de la norme OSI/ISO Communications couche physique : transfert de bits logique câblée exemples : modems, ADSL,... couche liaison : Gestion de la connexion entre entités du réseau Gestion des erreurs de la couche 1
Les couches basses de la norme OSI/ISO Communications couche réseau : Acheminer les données de la couche 4 à l'utilisateur final en passant par des passerelles ou des routeurs. adressage, routage, contrôle de flux, détection et correction d'erreurs de la couche 2 couche transport : transfert de données transparents entre entités de session. Optimiser l'utilisation des infrastructures mode connecté et non connecté
Les couches hautes de la norme OSI/ISO Communications couche session : fournir aux entités de la couche présentation les moyens d'organiser et de synchroniser les échanges de données Différence avec une connexion de la couche transport : plusieurs sessions peuvent être ouvertes (séquentiellement) sur une même connexion (base de données/terminal banquaire) Reprise transparente d'une session après une coupure de connexion
Les couches hautes de la norme OSI/ISO Communications couche présentation : syntaxe et sémantique des informations transportées représentation : BigEndian/LittleEndian, compression/cryptage couche application : fournir tous les services directement utilisables : transfert d'information, allocation de ressources, intégrité et cohérence des données reçues, synchronisation d'applications coopérante
Communications Différence avec l'architecture TCP/IP
Les protocoles de plus haut niveau Communications FTP File Transfert Protocol : transfert de fichier deux sockets TCP : commandes et données DNS Domain Name Server : résolution de noms protocole UDP WAP Wireless Application Protocol : "Web pour téléphone mobile" TCP
Les protocoles de plus haut niveau Communications RPC Remote Procedure Call : appel de procédure à distance UDP ou TCP (suivant implémentation) Network File System : Système de fichiers accessible à distance Utilise RPC NFS NIS Network Information System : "pages jaunes" Utilise RPC
Le protocole HTTP HyperText Transfert Protocol protocole de transfert d'hypertexte Origine : 1990 au CERN! Communications Protocole du WWW WWW Internet Protocole simple à base textuelle Utilisé pour transmettre des données textuelles ou binaires Page HTML (texte) ou image (binaire) le plus souvent
Communications Session HTTP Connection TCP/IP Browser > Serveur Web : <GET, /index.html> Serveur Web > Browser : <OK, contenu de index.html> Fin de connection TCP/IP
Session HTTP : Requête : GET /chemin/fichier HTTP/1.0 Communications Infos (Type de connection, browser, système,...) Type de données à recevoir Une ligne vide Réponse : HTTP/1.0 200 OK Infos (Connexion, type de serveur, type de données envoyées) Une ligne vide Le contenu de la requête (fichier HTML, image, son,...)
Envoi de données à un serveur WEB Deux solutions : GET : l'url contient les données: Communications http://serveur/requete.html?x=3&y=4 POST : Les données sont transmises dans l'en-tête
Exercice : serveur HTTP Communications Ecrire un mini-serveur HTTP en Java Le serveur ne doit comprendre que les requêtes de type GET Il renverra au client le fichier demandé Attention, les chemins devront être absolus GET /etc/wgetrc HTTP/1.0 doit renvoyer le contenu du fichier /etc/wgetrc Quels clients utiliser pour tester notre serveur? Tout client HTTP Telnet,Firefox, Chrome,......
serveur HTTP : remarques Java Communications Requête : Utiliser BufferedReader pour lire la requête Manipulation de texte : StringTokenizer Fin de requête == ligne vide == ligne de longueur nulle (!= "\n") Réponse : Utiliser BufferedOutputStream pour la réponse flush()
serveur HTTP : remarques générales Communications Attention au protocole Syntaxe Code d'erreur Trou de sécurité! Solutions?
Plan RPC/RMI RPC/RMI 158
Appel de procédure à distance Simplifie les interactions entre systèmes distribués Il n'y a plus de notion de communication RPC/RMI Ni en mode datagramme Ni en mode connecté Le développeur effectue un appel de procédure standard Le système se charge de transformer cet appel de procédure en communication réseau
Problèmes Gestion des erreurs Différencier celles liées au réseau Liées à l'appel lui même RPC/RMI Garanties Appel perdu Paramètres corrompus Appel dans le désordre Gestion de la concurrence
Problèmes : Passage des paramètres Par copie Marshalling Problème de cohérence RPC/RMI Ordre binaires Cohérence des données de type référence Modifications effectuées par le serveur non répercutées sur le client et vice versa Par référence Mémoire virtuellement partagée Matérielle Logicielle
Exemples : SUN RPC Utilise le protocole XDR pour le marshalling NFS, NIS : utilise les SUN RPC Portmap : nommage XML RPC RPC/RMI Utilise XML pour le marshalling Simple Object Access Protocol (SOAP) Microsoft/IBM Attention : le terme RPC est utilisé pour désigner à la fois le concept et l'implémentation
Invocation de méthode à distance Extension du mécanisme RPC au concept objet Beaucoup de langages sont orientés objets Un appel de méthode est conceptuellement équivalent à un envoi de message RPC/RMI Extension naturelle aux systèmes à objets distribuées Permet à des objets distribués sur tout un parc de stations de communiquer naturellement
Invocation de méthode à distance Abandon du mode client/serveur Les objets communiquent entre eux par passage de messages qu'ils soient locaux ou distants Localisation transparente RPC/RMI Il est inutile de connaître l'emplacement réel d'un objet
Localisation transparente Facilite la programmation Fiabilité si la machine qui héberge un objet tombe en panne, on déplace l'objet sur une autre machine Performance RPC/RMI si la machine qui héberge l'objet ne peut plus supporter de nouveaux clients, on réplique l'objet sur une nouvelle machine Mais tout n'est pas si simple!!
Principe A l'exécution, certains objets sont locaux, et d'autres sont distants RPC/RMI Si une méthode est invoquée sur un objet distant, un appel de méthode à distance est effectuée La localisation de l'objet distant détermine la destination de l'appel de méthode à distance
Principe RPC/RMI Utilisation des interfaces Un objet distant déclarent l'ensemble des interfaces distante qu'il implémente Chaque interface définie l'ensemble des méthodes qu'il est possible d'invoquer sur les objets qui l'implémente
Principe Est il possible de spécifier des champs accessible à distance? RPC/RMI
Est il possible de spécifier des champs accessible à distance? Raisons liées à la notion d'interface pas de champs dans les interfaces Raisons liées à la distribution modification directe d'un champ non contrôlable RPC/RMI Utilisation des objets fragmentés Stubs, Skeleton et Proxy
Principe : Stubs, Skeleton et Proxy Les interfaces distantes sont utilisées pour générer du code RPC/RMI Stub : partie côté client chargée de transformer les appels de méthodes en communication réseaux Skeleton : effectue l'opération inverse sur le serveur et appel la méthode correspondante de l'objet distant Proxy :partie côté cliente représentant l'objet distant et qui peut répondre à une requête localement où transmettre la requête sur le réseau. Un stub est un cas particulier de proxy dont la fonction est de transmettre toutes les requêtes sur le réseau
Principe : Stubs, Skeleton et Proxy F(X) Y=mar(X) send(f,y) Z=unmar(Y) Client Stub (proxy) F(Z) Serveur Skel JVM JVM
Nommage et recherche Comment les objets distribués se trouvent ils entre eux? Le nommage permet d'associer à un objet distant : RPC/RMI Un nom : "Printer" Des attributs : "Color, A4" La recherche permet de trouver un objet en fonction de certains paramètres (nom, attributs,...) Un serveur connu de tous est dédié à cette tache : c'est le Naming Service
Standards : Java RMI (Sun) Serialisation Standard Java Propriétés : rmic, rmiregistry, DGC RPC/RMI Corba (OMG) Neutre vis à vis du langage et du système Notion de services (CORBA Naming Service) Utilisé dans l'industrie? COM/DCOM (Microsoft) Standard du monde Microsoft exclusivement
Exemple : Java-RMI Utilise TCP/IP Peut utiliser HTTP pour passer un firewall Utilise le méchanisme de Serialisation Java pour copier les arguments RPC/RMI Passage par copie et par référence suivant la nature distante de l'objet Ramasse miettes distribués (compteur de références et leasing (bail))
Serialisation Les objets Java qui implémente l'interface (vide) java.io.serializable peuvent être serialisé Sauvegarde sur disque Tolérance aux pannes RPC/RMI Sauvegarde dans une base de données Persistance Envoi sur le réseau Migration d'objets
Exemple Serialisation : PersonsManager Ecrire en Java une application capable d'enregistrer dans un fichier des personnes RPC/RMI Une personne est définie par les champs : firstname (prénom) lastname (nom de famille) birthdate (date de naissance) L'application doit pouvoir retrouver ces informations après un arrêt. (persistance)
PersonsManager : remarques Java Création d'un objet de type Person Doit implémenter java.io.serializable Utiliser ObjectOutputStream pour écrire et ObjectInputStream pour lire Attention : stream = flux RPC/RMI Pas d'accès direct Pas d'ajout en fin Faire le travail en mémoire Lire le fichier à l'initialisation Sauvegarder à la terminaison
PersonsManager : subtilités problèmes avec les classes internes (inner classe) Pas toujours Serializable Efficacité en temps et en espace sauvegarde de la classe mère Serialisation de la classe Date inefficace Serialisation spécialisée RPC/RMI
Java-RMI : Passage par copie Les objets qui implémentent l'interface (vide) java.rmi.remote sont distants Ces objets sont passés par références lors d'invocation de méthode à distance RPC/RMI Les autres objets sont passés par copie En réalité, tous les objets sont passés par serialization Les objets distants redéfinissent leur serialisation pour passer leur Stub à leur place!
Exemple Java-RMI : Bonjour Monde RPC/RMI Écrire en Java RMI : Un objet distant qui possède une méthode retournant la chaîne de caractère "Bonjour Monde" Un client qui appelle cette méthode à distance et l'affiche
Java-RMI : Bonjour Monde Schéma HelloWorldImpl exportobject() RPC/RMI JVM HW_Stub Client rmiregistry JVM JVM
Java-RMI : Bonjour Monde Schéma HelloWorldImpl Client rebind() JVM RPC/RMI foo HW_Stub rmiregistry JVM JVM
Java-RMI : Bonjour Monde Schéma HelloWorldImpl Client JVM foo RPC/RMI HW_Stub rmiregistry JVM JVM
Java-RMI : Bonjour Monde Schéma HelloWorldImpl Client JVM lookup() RPC/RMI foo HW_Stub rmiregistry JVM JVM
Java-RMI : Bonjour Monde Schéma HelloWorldImpl Client JVM RPC/RMI foo getstring() HW_Stub rmiregistry JVM HW_Stub JVM
Java-RMI : Bonjour Monde RPC/RMI Où est le stub? depuis le jdk 1.5, le stub est automatiquement généré : il est retourné par l'appel UnicastRemoteObject.exportObject(r, 0); il fallait le générer auparavant à l'aide d'un compilateur spécial : 'rmic' On peut observer son code à l'aide de la commande : 'rmic keep'
Exemple Java-RMI : Gestionnaire d'utilisateurs Écrire en Java RMI Un objet distant capable de gérer des informations sur des utilisateurs (nom, prénom, date de naissance,...). Un client peut enregistrer une nouvelle personne RPC/RMI il récupère un identifiant unique Récupération de la liste complète des personnes enregistrées Un client peut récupérer une personne donnée pour un identifiant précis et la mettre à jour
RMI : Gestionnaire d'utilisateurs : architecture Le client et le serveur doivent partager du code! Interface RMI Implémentée par le stub pour le client Implémentée par le serveur La classe personne RPC/RMI Pour le client et le serveur Le client n'a pas besoin de la classe serveur Le serveur n'a pas besoin de la classe client Séparation des CLASSPATH Génération de jar files (fichier jar ~ fichier zip)
Gestion des classpath : jar jar : même syntaxe que la commande 'tar' UNIX RPC/RMI jar cvf /tmp/client.jar client jar cvf /tmp/server.jar server jar cvf /tmp/common.jar common Au lancement, on précise le classpath java classpath /tmp/common.jar:/tmp/client.jar client.main Commande serveur : attention au rmiregistry java.rmi.server.codebase requis! Security Manager requis! java.security.policy requis!
RMI : Gestionnaire d'utilisateurs : Serveur Problématique : génération d'id unique? UUID simple mais peu lisible int lisible, mais unicité? accès concurrents? RPC/RMI retourner une liste à un client? utiliser des verrous copie requise? Passage par copie (serialisation) update vérifier que l'id donné existe! sécurité!
Gestionnaire d'utilisateurs : remarques Problématique de mise à jour ajout d'une méthode au serveur RPC/RMI Recompilation, re génération du 'jar', déploiment sur les clients du common.jar Regénération du stub (plus requis jdk >= 1.5) Rebinding requis ajout d'un champ à la classe Person Le client doit avoir accès à la nouvelle classe. recompilation, re génération du 'jar' et déploiment sur les clients. Interruption du serveur requise? Pas toujours (compatibilité ascendante Person)
Gestionnaire d'utilisateurs : remarques Protocole sous jacent : TCP Gestion des exceptions réseaux Gestion des clients simultanés RPC/RMI Tolérance aux pannes Threads et RMI : pas de garanties données par RMI sémantique des appels RMI? sémantique at most once (cf DS1: 5.2.4) un appel est exécuté au plus une fois. Attention, CORBA et Sun RPC propose d'autres sémantiques.
Gestionnaire d'utilisateurs : remarques Comment implémenter la persistence des données? pour un très grand nombre de personnes? Comment assurer la sécurité? RPC/RMI un client devrait s'authentifier pour pouvoir faire un update() (accès en écriture) avec une base de données gestionnaire d'authentification/identification Comment assurer l'intégrité des données? un update() ne devrait jamais être fait à moitié utilisation des transactions
Exemple Java-RMI : ChatServer RPC/RMI Écrire en Java RMI un serveur de 'chat' et son client Chaque client attend qu'un utilisateur tape une ligne au clavier Lorsque la ligne est entrée, le client en informe le serveur Le serveur en informe alors tous les autres clients qui affiche la ligne.
ChatServer : remarques Différence conceptuelle entre client/serveur classique client/serveur liée à la notion de service RPC/RMI Callbacks : "appelle moi quand c'est prêt!" le client est en réalité à la fois client et serveur Le serveur est à la fois serveur et client
ChatServer Architecture Logicielle Conception des interfaces distantes RPC/RMI Diagramme de classes Définir une interface Message dont l'implémentation n'est pas connue du serveur (téléchargement de code requis). Séparation des classpath Que doivent contenir les jar common, client et server? Attention à la spécification du java.rmi.server.codebase. Security Manager indispensable.
Plan EJB EJB :: introduction introduction Basé sur le cours de M. Buffa http://miageprojet2.unice.fr/intranet_de_michel_buffa/cours_ composants_distribu%c3%a9s_pour_l%27entreprise_%2f %2F_EJB_2009 197
EJB : introduction Motivation Les RPC/RMI facilitent le développement d'applications distribuées Mais ce n'est pas suffisant Seul la communication entre composants est assurée Autres problématiques gestion de la charge (concurrence), gestion des pannes, persistence, transaction, monitoring, sécurité, C'est l'objet d'un middleware
Motivation EJB : introduction Dans le passé, la plupart des entreprises programmaient leur propre middleware. Adressaient rarement tous les problèmes, Gros risque : ça revient cher (maintenance, développement) Orthogonal au secteur d'activité de l'entreprise (banque, commerce ) Pourquoi ne pas acheter un produit? Oracle, IBM, BEA proposent depuis plusieurs années des middleware Aussi appelés serveurs d'application.
Motivation Explosion du nombre de middlewares Propriétaires et Inter opérabilité limitée EJB : introduction À l'encontre du crédo Java : "Write Once, Run Anywhere" EJB : Enterprise Java Beans Attention : Rien à voir avec les Java Beans!! Standard qui définit une architecture de composants serveur écrits en Java EJB = une spécification + un ensemble d'api Alternatives : ruby on rails, spring, python turbo gears,...
Caractéristiques EJB EJB : introduction Attention, les EJB ne fournissent pas de GUI C'est plutôt le rôle des Java Beans Le GUI est côté client Application classique (Applets) Servlets/JSP (dans le standard J2EE) Approche Modèle/View/Controller (MVC)
EJB : introduction J2EE