1 Extension du modèle de composants CORBA avec accès concurrent à des données partagées Travail réalisé par : Landry BREUIL PFE, ISIMA Encadrants : Gabriel ANTONIU Christian PEREZ
2 Besoin Application distribuée avec stockage de données Lire / Écrire Producteur Écrire Lire Calculateur Contrôleur Données Lancer Surveiller Calculateur
3 Plan 1. Concepts utilisés 2. Modélisations possibles 3. Mise en oeuvre
4 Concepts utilisés 1. Concepts CCM JuxMem Proposition d'intégration 2. Modélisations possibles 3. Mise en oeuvre
5 Composant CORBA Réceptacles « uses » Sources d' événements « emits » Puits d' événements « consumes » Facettes « provides » Attributs « attributes » Interface principale du composant CCM : modèle de composants CORBA Schématisation
6 CCM : modèle de composants CORBA Modèle de développement séparation des rôles indépendant du langage Déclaration IDL3 Implémentation / Compilation Assemblage par tierce partie Exécution
7 Producteur Stockage Calculateur Contrôleur CCM : modèle de composants CORBA Application = assemblage de composants
8 Producteur Stockage Calculateur Contrôleur Données CCM : modèle de composants CORBA Application = assemblage de composants ? ? ?
9 Partage de données distribuées sur grilles : JuxMem Interface d'accès / programmation Écrire Allouer JuxMem Données Processus Lire / Écrire Lire Processus
10 Proposition d'intégration Interaction des modèles Allouer JuxMem Données Lire / Écrire Lire Composant AComposant B
11 Rappel du besoin Application distribuée avec stockage de données Lire / Écrire Producteur Écrire Lire Calculateur Contrôleur Données Lancer Surveiller Calculateur
12 Réponse au besoin Intégration entre CCM et JuxMem Lire / Écrire Allouer JuxMem Données Lire Écrire Producteur Calculateur Contrôleur Lancer Surveiller
13 Modélisations possibles 1. Concepts utilisés 2. Modélisations possibles Composant à donnée interne Composant et donnée externe Proposition : un modèle intermédiaire 3. Mise en oeuvre
14 Modélisations possibles Modèle 1 : composant à donnée interne BCA Données interface data_access { boolean set(in octet value, in short offset); octet get(in short offset); void acquire(); void release(); }; component A { uses data_access data_used; }; component B { uses data_access data_used; }; component C { provides data_access data_shared; }; Problème : Peu flexible, centralisé
15 Modélisations possibles Modèle 2 : composant ET données externes BCA Données interface data_access { boolean set(in octet value, in short offset); octet get(in short offset); void acquire(); void release(); }; component A supports data_access {}; component B supports data_access {}; component C supports data_access {}; Problème : Gestion explicite des accès concurrents
16 Modélisations possibles Notre Proposition : modèle intermédiaire B C A Données Extension de l'IDL3 => IDL3+ Type de port orienté données Mots clés «accesses» «shares» Accès via une interface locale Flexible Plutôt décentralisé Equilibrage de charge data_ref
17 Modélisations possibles Architecture en couches Système de gestion de données Données Composant A Composant B Couche d'abstraction de l'accès à la donnée
18 Mise en oeuvre 1. Concepts utilisés 2. Modélisations possibles 3. Mise en oeuvre Exemple IDL3+ Implémentations du modèle intermédiaire Compilation de l'IDL3+
19 Exemple IDL3+ Langage IDL3 étendu typedef Octet data_space[1000]; component A { accesses data_space data_used; }; component B { accesses data_space data_used; }; component C { shares data_space data_shared; }; B C A Données data_ref
20 Implémentation du modèle intermédiaire Fonctionnement interne d'un composant CCM Exécuteur : écrit par le développeur Contexte CCM : généré par le compilateur IDL3 Conteneur CCM : généré par le compilateur IDL3 Object Request Broker
21 Implémentation du modèle intermédiaire Encapsulation de l'exécuteur Au-dessus de CCM Encapsulation Redirection d'appels Transparent / CORBA Référence vers donnée Gestion de données Exécuteur Contexte intermédiaire Conteneur intermédiaire Contexte CCM Conteneur CCM Object Request Broker
22 Implémentation du modèle intermédiaire Diagramme de classes
23 JuxMem Couche d'abstraction de l'accès à la donnée Fichier localNFS id = mkstemp(..); id = open(..); close(..); flock(..); lseek(..); x = read(..); write(val); id = mkstemp(..); id = open(..); close(..); lockf(..); lseek(..); x = read(..); write(val); juxmem_alloc(size); id = juxmem_map(..); juxmem_acquire(..); juxmem_acquireR(..); juxmem_release(..); x = juxmem_read(..); juxmem_write(val); Implémentation du modèle intermédiaire 3 systèmes de gestion de données
24 Compilation IDL3+ Description IDL3+ Compilateur IDL3+ Description IDL3 Code Généré C++ Compilateur IDL3 Compilateur C++ Implémentation C++ Code CCM C++ Binaire Exécutif
25 Conclusion Extension du langage IDL3 en IDL3+ Spécification d'un compilateur Développement de prototypes Définition de scénarios de tests Expérimentation en cours sur Grid’5000 Suite possible projet LEGO (ANR Calcul Intensif)