Présentation de l’architecture Jini...
Main page
Home
[ Home Page | Index articles ]

Réalisé par Rémi Julien et Mathieu Weill
  • 0 Index
  • 1 Introduction
  • 2 L'infrastructure d'un système Jini

  • 3 Le modèle de programmation Jini
    • 3.1 Descriptif sommaire
      La technologie Jini réside sur un système distribué supposé fiable. Le modèle de programmation Jini propose trois API (Application Programming Interface) qui contribuent à fiabiliser le système distribué sous-jacent. Ces API peuvent être envisagées comme une extension de concepts du langage Java dans le contexte des systèmes distribués.

      Les trois parties de ce modèle sont :

      • L’attribution (leasing). Elle permet de gérer la durée de vie des objets distribués en étendant la notion de ramasse-miettes (garbage collector) aux environnements distribués.
      • Les transactions. Il s’agit d’une manière de regrouper un ensemble d’opérations impliquant plusieurs entités (clients, services) afin d’assurer un certain degré d’atomicité dans l’exécution de ces opérations.
      • Les événements distribués (distributed events), qui étendent la notion d’événements Java aux environnements distribués.

      Les services initiaux discovery, join et lookup sont construits selon ce modèle ; les autres services présents sur la fédération peuvent également l’être, à la convenance de leur développeur.


    • 3.2 Le leasing
      * Principes

      Le leasing permet à des objets présents sur des machines virtuelles Java (JVM) distinctes de négocier et obtenir la réservation de ressources de toutes sortes. Le processus de leasing prévoit les conditions du maintien et de la suppression de la réservation de ressource, y compris en cas de blocage du système distribué (panne d’un élément...).

      Sur un système Java non distribué, un objet instancié est conservé en mémoire tant que subsiste une référence pointant vers lui. À la suppression de la dernière référence, le garbage collector se charge de libérer l’espace-mémoire qu’occupait l’objet devenu inutile.

      Dans le cadre d’un système distribué, un tel procédé n’est pas applicable. Imaginons par exemple qu’une entité réserve une ressource rare sur un système distant, puis subisse une panne qui rende hors service. Le système distant conserve la réservation indéfiniment, croyant la ressource employée. La ressource est bloquée, sans espoir d’être libérée pour un usage plus productif.

      Le leasing réside sur le principe suivant : au lieu d’allouer une ressource jusqu’à ce que le requérant déclare explicitement ne plus en avoir besoin, on alloue la ressource pour une période donnée (qui peut être négociée entre les deux parties, ou imposée par le gestionnaire de la ressource). Bien entendu, le bail peut être renouvelé ad libitum, si les circonstances le permettent. En cas de problème, la ressource n’est bloquée que le temps du bail et redevient disponible à l’expiration de celui-ci.

      De plus, le modèle de leasing permet d’éviter l’accumulation sur un serveur de ressources réservées mais non utilisées. En effet, dans un système traditionnel, certaines ressources peuvent être réservées puis " oubliées " par des clients ; avec le système de leasing, la nécessité de renouveler régulièrement le bail impose au client de sélectionner avec plus de discernement les ressources qu’il juge nécessaires.


      * Caractéristiques d’un bail
      Un bail (lease) présente les caractéristiques suivantes, essentielles pour la compréhension du modèle :
      • Un bail est une période durant laquelle le fournisseur du bail garantit au demandeur l’accès à une certaine ressource. La durée peut en être définie par le fournisseur ou négociée par les deux parties.
      • Pendant la durée du bail, celui-ci peut être annulé par le demandeur. Les ressources en jeu sont alors libérées.
      • Un demandeur peut demander la reconduction du bail, pour une durée qui peut différer de la durée précédente.
      • Un bail peut expirer. S’il n’est pas renouvelé, les ressources impliquées sont libérées.


    • 3.3 Les transactions
      * Principe

      Une transaction est un ensemble d’opérations groupées de manière à étendre le principe d’atomicité, selon les critères suivants :

      • Elles réussissent ou échouent ensemble.
      • Pour un observateur extérieur, elles constituent une unique opération.

      Les transactions jouent un rôle crucial dans la fiabilité des environnements distribués en assurant la cohérence des opérations d’un ensemble d’entités distinctes. En cas de problème chez un des participants d’une transaction, l’ensemble de l’opération échoue, ce qui évite de laisser des entités dans des états intermédiaires.


      * Propriétés ACID

      Le protocole de transaction distribuée est conçu pour satisfaire aux conditions dites ACID :

      • Atomicité (Atomicity) : Toutes les opérations groupées dans une transaction ont lieu ou bien aucune d’entre elles n’a lieu. Le protocole permet aux participants d’une transaction de découvrir quelle partie de cette alternative est attendue par les autres participants. Cependant, chaque objet est libre de déterminer s’il souhaite opérer de concert avec les autres participants.
      • Cohérence (Consistency) : Le fait de compléter une transaction doit laisser le système dans un état cohérent. La cohérence peut faire intervenir des notions connues seulement des humains ; les techniques de maintien de la cohérence d’un système ne sont pas spécifiées par Jini.
      • Isolation : Des transactions en cours ne peuvent pas s’affecter mutuellement. Les participants d’une transaction ne doivent voir que les états intermédiaires de leur propre transaction, et ne pas avoir accès aux états intermédiaires d’autres transactions. Le protocole permet donc aux objets participants de savoir quelles opérations ont lieu dans le cadre d’une transaction. C’est à chaque objet de choisir individuellement si une opération peut être vue uniquement par les objets participant à une transaction ou par tous.
      • Durabilité (Durability) : Les résultats d’une transaction doivent subsister aussi longtemps que les entités en jeu. La durabilité n’est pas garantie par Jini, mais est spécifique de l’implémentation de chaque objet.

      * Déroulement d’une transaction

      Une transaction est créée et surveillée par un manager. Un manager est un objet qui implémente une interface (au sens de Java) particulière, l’interface TransactionManager. La sémantique de la transaction est représentée par des objets particuliers que s’échangent les clients et les participants de la transaction, construits par exemple à partir d’un objet TransactionFactory.

      Un client crée une transaction en formulant une requête au manager (le client peut obtenir la référence au manager par un service de lookup, par exemple), qui a pour objet de créer un objet sémantique. L’objet ainsi créé est passé comme paramètre lorsqu’ont lieu des opérations sur un service. Si ce service accepte l’opération, il doit rejoindre la transaction en tant que participant. Un client qui a formulé une transaction ne participe pas nécessairement à la transaction.

      Une transaction se termine (to complete en anglais) lorsqu’une entité quelconque de la transaction valide (to commit) ou annule (to abort) celle-ci. Si une transaction est validée, toutes les opérations impliquées dans la transaction sont effectuées. Si une transaction et annulée, le système doit apparaître comme si aucune de ces opérations n’avait eu lieu.

      La validation d’une transaction implique le vote de chaque participant. Les trois votes possibles sont :

      • Prêt (prepared), si le participant estime que la transaction, de son point de vue, peut être validée.
      • Inchangé (not changed), si les opérations qui le concernaient étaient en lecture seule.
      • Annuler (aborted), si le participant estime que la transaction ne doit pas être validée.

      Si tous les participants votent prêt ou inchangé, la transaction est validé et le manager indique aux objets ayant voté prêt qu’ils peuvent basculer (roll forward) dans l’état résultant des opérations constitutives de la transaction. Les participants ayant voté inchangé n’ont rien à faire.

      Si la transaction est annulée, tous les participants doivent revenir (roll back) à l’état qui était le leur antérieurement à la transaction.



    • 3.4 Les événements distribués
      * Principe

      Dans un modèle à unique espace d’adressage, certains objets peuvent réagir à un changement d’état au sein d’un autre objet. Par exemple, une action de l’utilisateur (un clic de souris) peut influer sur le comportement de plusieurs objets. En langage Java, on fait appel à la notion d’événement pour modéliser l’interaction entre objets et actions extérieures. Les événements locaux présentent certaines caractéristiques essentielles, parmi lesquelles le fait que leur transmission peut être considérée comme fiable, ordonnée, prévisible et quasiment instantanée.

      Dans un environnement distribué, on peut chercher à étendre la notion d’événements, en tenant compte des caractéristiques suivantes :

      • Les notifications d’événements n’arrivent pas forcément à destination.
      • L’ordre chronologique des événements n’est pas forcément conservé.
      • L’objet ayant manifesté son intérêt pour un événement n’est pas nécessairement celui à qui la notification doit être envoyée.
      * Fonctionnement
      Un événement (event) est défini comme un changement d’état abstrait d’un objet. L’événement est produit par un générateur d’événement (event generator), c’est-à-dire un objet dont les changements d’état peuvent présenter un intérêt pour d’autres objets, et qui permet à ces objets de s’enregistrer en tant qu’objets " intéressés par l’événement ". Le générateur produit des notifications lorsque des événements de ce type se produisent, et les envoie aux écouteurs d’événement (event listeners) qui ont été précisés lors de l’enregistrement.

      Les écouteurs d’événement distants (remote event listeners) sont des objets qui présentent un intérêt pour la survenue d’un événement dans un objet distinct. La principale fonction d’un écouteur d’événement est de recevoir des notifications de la part de générateurs d’événements.

      Un événement distant (remote event) est un objet qui est transmis entre un générateur et un écouteur pour indiquer qu’un événement particulier a eu lieu, ainsi que ses principales caractéristiques.

      L’intérêt de ce modèle est de permettre l’introduction d’entités intermédiaires, ou agents, capables d’accroître les fonctionnalités d’un environnement distribué sans en changer les interfaces de base. Les principaux types d’agents sont les suivants :

      • L’agent de relais (store-and-forward agent). Le but de cet objet est d’agir au nom du générateur d’événement et de prendre en charge l’envoi des notifications aux écouteurs enregistrés selon des modalités prédéfinies (envoi régulier de notifications jusqu’à acquittement, par exemple).
      • Le filtre de notification (notification filter). Cet objet peut être local soit au générateur, doit à l’écouteur d’événement, et génère un fil (thread) chargé de s’occuper d’une notification lors de sa réception.
      • La boîte à notification (notification mailbox). Cet objet stocke les notifications pour le compte d’un autre objet, jusqu’à ce que cet objet lui demande la distribution de son " courrier ". Ce dispositif permet à un objet de ne recevoir de notifications d’événements que lorsqu’il le souhaite, sans que celles-ci se perdent.


    • 4 Architecture matérielle
    • 5 Forces et faiblesses de Jini


Copyright © 1996..2003, BERTHOU. Tous droits réservés.
Dernière modification le 03 Mars 2003 18H20

C.N.I.L.
n° 707410