Title: Programmation ractive et distribution
1Programmation réactive et distribution
- Laurent Hazard
- France Telecom RD
- 07/02/03
2Pourquoi moi ?
- FT RD DTL ASR
- Recherche et développement
- Direction des Techniques Logicielles
- Architecture des Systèmes Répartis
- Vieille collaboration avec Inria/CMA
- Programmation synchrone, réactive
- Infrastructures dexécution
3FT RD DTL ASR
- de en AS, R se banalise
- pôle de compétences
- veille technologie
- modèle Objet
- système dinformation
- plate-formes de support
- peu dalgorithmique (dommage !)
- intérêt pour les problèmes de synchronisation
répartie
4Distribution - Répartition
- Unités dexécution phys. distinctes
- parallèlisme de fait (vs dexpression)
- et possiblement éloignées
- pas dhorloge globale
- le monde réel est asynchrone
- pas de communication certaine et instantanée
- besoin de protocoles
5Prog. réactive/synchrone et répartition
- Langages synchrones / réactifs
- à la base, compilés en code séquentiel
- Prendre en compte une parallèlisation de fait
- spécifier une application distribuée
- Tirer profit dune parallèlisation possible
- multi-processeurs
6Restons modestes
- Qqs mots sur les ORBS
- Des instants distribués en prog. réactive
- machines synchronisées
- ORB pour objets réactifs
- modèle dobjet réactif
- domaine dexécution synchrone/réactive
- Qqs mots sur le passage à léchelle
- ou autre chose si on a le temps
7Petits rappels
- RPC
- ports, protocoles (bas-niveau, applicatifs),
sockets - Programmation par objets
- RM-ODP (iso officiel !)
- Corba (consortium de fait !)
- Java RMI (succès populaire !)
- anecd. DCOM () ?
- (Algorithmique répartie)
- indép. des plateformes
- utilisée dans les protocoles ou les services
8Objets dans contextes répartis
- Objet, Interface, Référence
- Export, Bind (implicite or explicite, 3rd party)
9ORBs - 1
- Transparences
- accès
- localisation
- Contrôle
- interfaces typées
- services nommage, persistence, migration,
O.m (...args...)
10ORBs 2
- Qqs problèmes de base
- annonces et interrogations
- en Corba, mot-clé oneway
- parallèlisme et concurrence ?
- exécution séquentielle
- appel de procédure
- pas de gestion dactivités
- création de threads
- paramétrages de timeout
11Exportation / Liaison
- Implicite / Explicite
- Référence
- construire Contexte de nommage
- NamingContext
- référence collections de noms
- lier Usine à liaisons
- BindingFactory
- utilise un des noms de la référence
12Liaison
13RMI (1)
- Remote Method Invocation
- Intégré à Java
- pbs avec Microsoft
- typage des données
- (dé)sérialisation masque marshalling/unmarshalling
- Transparence daccès et de localisation
- référence dobjet Java
- méthodes dune interface, étendant Remote
- appel de méthode
- RPC on attend le retour
14RMI (2)
- La transparence est dans la sérialisation
- un objet Remote nest pas sérialisé
- sa référence lest dune façon particulière
- la dé-sérialisation de la référence rend une
référence de Stub . - les invocations du Stub masquent la
communication dune invocation via les protocoles
(jiop, tcp) jusquau Skeleton
15RMI (3)
serveur
client
skel
stub
stub
serv
registry
16Jonathan
- Un ORB pour les télécommunications
- ouvert
- adaptable, configurable
- basé sur le modèle ODP
- objet, interface, référence
- implémenté en Java
- 2 personnalités David, Jeremie
- www.objectweb.org
17Machines synchronisées
18But
Synchroniseur
connecter déconnecter
Machine réactive
- Partager les mêmes instants dexécution et des
événements (pas forcément tous)
19Interfaces - 1
- Machine (e.g. de Junior)
- void add (Program p)
- void generate (Identifier id, Object value)
- boolean react ()
- instant complet
- Machine synchronisée(/able)
- void generate (Identifier id, Object value)
- pour linstant courant ou prochain
- void closeInstant ()
20Interfaces - 2
- Synchronisateur
- int connect (MachineSync m)
- void disconnect (MachineSync m)
- void broadcast (Identifier id, Object val)
- void suspended (int id)
- void completed (int id)
21Concurrence
Machine
Synchronisateur
(dis)connect, broadcast, suspended, completed
Démarrer instant local Clore instant local
gérer un instant distribué
generate, closeInstant
22Remarques
- Comportement réactif !
- Attente active
- politique naïve
- Pas de sécurité/sûreté wrt communication
- ordre des msgs, échec de communication, machine
qui ne répond plus, - Algos en multicast/broadcast
- sans synchronisateur
- Paramétrage/politique dexécution
23Rhum
- Un ORB réactif Laurent HazardFT RD
DTL/ASR - 07/02/03
24Sommaire
- Motivation
- exemple et discussion
- Présentation de Rhum
- et quelques détails dimplémentation
- Retour sur lexemple
- Conclusion
25Motivation
- Programmation réactive/synchrone
- systèmes réactifs, interactions, //, synchro.
- Contexte de la programmation objet
- Java, ORBs
- interaction procédurale -gt RPC
- séquence dactions
- Carences, difficultés...
26Exemple
- Un serveur public interface ServeurI public
int add (int a, int b) - Un client ... ServeurI serveur ltref. sur un
serveurgt ... res serveur.add (x1, x2)
27Requêtes parallèles
- Comment faire pour programmer ... ServeurI
serveur1 ltref. sur un serveurgt ServeurI
serveur2 ltref. sur un serveurgt ... res
serveur1.add (x1, x2) ou serveur2.add (x1,
x2) (le premier qui - y - arrive) - ... Parallèlisme
28Requête gardée
- Comment faire pour programmer ... ServeurI
serveur ltref. sur un serveurgt ... res
serveur.add (x1, x2) en moins de 3 secondes
sinon 0 - ...Concurrence
29Requêtes gardées en //
- Comment faire pour programmer ... ServeurI
serveur1 ltref. sur un serveurgt ServeurI
serveur2 ltref. sur un serveurgt ... res
serveur1.add (x1, x2) si après 3 secondes pas
de résultat, lancer serveur2.add (x1, x2) si
après 2 sec. supp. serveur1 na pas rendu de
résultat prendre celui de serveur2 si présent,
sinon 0
30A coeur vaillant...
- En Java, pour les activités // et concurrentes,
gt on a les Threads ! - Essayons
31Discussion...
- Faisable ? mouais...
- pas simple
- pas modulaire
- pas scalable
- Faisable ? pas sûr...
- a-t-on vraiment programmé ce quon voulait?
- sémantique dapproximation
- modèle dactivité implicite et... inconnu...
32Discussion (2)
- Programmation ?
- on reste en séquence... seule garantie !
... requeteServeur1.start ()
requeteServeur2.start () ... res
serveur.add (a, b) serveur.add (a, b, moi)
... timer.start () requeteServeur.start ()
33Discussion (3)
- Valeur de retour (RPC) ou pas ?
- en partie, un problème (mais il y a aussi
dautres problèmes) - et cest quand même pratique.
- Si retour asynchrone gt le client doit
être aussi serveuret alors là - threads de l ORB, sans contrôle de lappli
- protection des accès concurrents
34Discussion (4)
- Manque un modèle explicite
- dactivité
- dactivationpour les clients et les serveurs
- Manque une définition de contexte
- pour y appliquer un modèle
- commun avec les autres activités du système
35Rhum (1)
- Modèle dObjet Réactif...
- Papier Reactive Objects
- ROM/DROM
- appel procédural vs. message (send and forget)
- messages ltgt appels de méthodes de linterface
- objets exécutent des instants
- domaine d exécution
- communication synchrone
- au plus, 1 exécution de chaque méthode par instant
36Rhum (2)
- ... appliqué à des objets Java ...
- interface Java normale
- méthodes obligatoirement void ... -
- OR.m (args)
- ...dans une machine réactive classique .
- des événements, des instants, ...
- exécution de comportements (pas de threads).
37Rhum (3)
- Domaine (machine réactive)
- lieu dexécution des comportements
- lieu de diffusion des événements
- une invocation ou un evt. de lenvironnement gt
un événement - diffusé - - présence des événements
- intra-domaine synchrone
- inter-domaine (ou environnement) asynchrone
- possib. de groupage/synch. de plusieurs domaines
38Binding
Domaine D1
0R2
0R1
... o ltref sur OR1gt ... o.meth (x, y, this) ...
Domaine D2
... o ltref sur OR1gt ... o.meth (x, y) ...
0R3
01
39Rhum personnalité Jonathan
- Référence dinterface réactive
- sur un objet réactif
- invocation uniforme
- fournie par l infrastructure
- transparence daccès, à la localisation.
- Les domaines sont intégrés dans Jonathan
- export attacher un objet à un domaine
- lier fabriquer la chaine pour générer un
événement pour lobjet dans son domaine
40En résumé
generate (evt)
meth ()
dans un contexte quelconque
O1
o (ref sur O1) o.meth () ...
41En détail
42Mise en oeuvre (2)
- Spécification dobjet réactif
- langage réactif (à la script réactif )
- classe Java passive
- Codage de la plate-forme
- ORB Jonathan
- StubFactory, ObjectAdaptor, binder JIOP
- comportement en Junior, domaine Jr.Machine
- parsing de la spécif en JavaCC - JJTree
43Spécif. dobjet réactif (1)
- Déclare/utilise une interface
- Utilise une instance passive
- Spécifie un comportement
- exécute des instants (séquence, parallèle, etc.)
- connaît des événements (attente, garde, etc.)
- méthodes de l interface
- channel
- environnement
44Spécif. dobjet réactif (2)
public class Client extends RBase implements
ClientI ServeurI serveur int res public
void setServ (ServeurI serv) serveur
serv public void request (int a, int b) if
(serveur ! null) serveur.addFor (a, b,
this) public void print (String msg)
System.out.println (msg) public void receive
(int resul) print (" Client recoit "
resul) public class Serveur implements
ServeurI public void addFor (int a, int b,
ClientI r) r.receive (ab)
45Spécif. dobjet réactif (3a)
rclass RClient interface / ClientI /
public void setServ (Serveur serv) public void
request (int a, int b) public void receive
(int resul) uses Client environment
ms // signal de milliseconde
46Spécif. dobjet réactif (3b)
behavior control loop setServ
(setServserv) stop end by setServ loop
await request (( request (requesta,
requestb) do await receive
receive (receiveresul) until 1000 ms
actual print ("1 sec. et pas de réponse ! ")
end ) ( stop // pas de boucle
instantanée )) end
47Lexemple revisité
- Une solution à notre petit problème ...do
request (serveur1, a, b) await
Receiveuntil 3000 ms actual request
(serveur2, a, b) enddo await Receive res
Receivevaluntil 2000 ms actual res
ltdfltgt end...
48Remarques
- Le code est simple, clair et précis...
- Les instants doivent être de durée lt 1 ms
- Le serveur doit aussi être un objet réactif
- si addFor dure, ce doit être sur plusieurs
instants ou dans un autre domaine - Les arguments possibles sont
- dun type de base (String, int, boolean, Object)
- des références dobjets réactifs
49Bilan
- intégration dun modèle dactivités réussi (?)
- 2 langages
- traitement de données comportement
- repose sur un Orb classique pour les comms.
- configuration des protocoles
- dépend du système sous-jacent
- threads, sockets, etc...
- gestion (complexe) de la concurrence
- prototype utilisé au sein de FT RD gt retours
50Perspectives
- Nouveau modèle
- 2 sémantiques dinvocation possibles
- 1 événement ou 1 nouveau comportement
- spécification du serveur
- possibilité de valeur de retour
- notion de rvoid
- usage par le client
- Meilleure intégration desc. comp. java
- Indépendance wrt ORB