des langages d’assemblagesperso.ens-lyon.fr/christian.perez/_media/160317/160317...des langages...
TRANSCRIPT
-
Des langages d’assemblages
dans les modèles à
composants logiciels
Christian Perez
Avalon, LIP, Lyon, France
Journée Langages @ LIP, Lyon
17 mars [email protected]
-
Contenu
Du besoin de composants logiciels
Des composants logiciels
Concepts de base via le diner des philosophes
Langage de description d’assemblage
Des assemblages plus abstraits Hiérarchie, généricité, squelettes algorithmiques
Notion de connecteurs
Composants logiciels et gestion de ressources
Exemple via un cas d’utilisation « cloud »
Conclusion
2/25
-
De la réalisation d’une application
Développement sur mesure
Avantage
Très spécifique, très bien adapté …
Inconvénients
… quand cela marche
Très coûteux en temps
Solution sous-optimale par manque de spécialistes
Manque d’interopérabilité
Exemples
Logiciels pour les administrations ou les grands comptes
Logiciels standard Avantages
Temps de mise sur le marché plus court
Juste à configurer Produit acquis
maintenance, évolution à la charge du « vendeur »
Inconvénients Réorganisation locale du
« business » (adaptation) Les concurrents ont aussi
accès aux fonctionnalités Adaptabilité aux besoins
limitée Exemple
Excel
Acquérir ce qui est disponible et
développer ce qui est spécifique 3/25
-
Le chaînon manquant ?
La notion de composant est très largement répandue...
Composants électroniques
Composants d’une voiture (depuis Henry FORD)
Composants d’un meuble, d’une construction
On fait même de la cuisine « d’assemblage »
Des composants partout ... sauf en informatique !
On reste ainsi au stade artisanal …
Et pourtant …c’est un ancien rêve de l’informatique
Les premiers travaux datent de la fin des années 60
4/25
-
A global view of software engineering
evolution
procedural
technology
component
technology
object
technology
Objects,
Classes,
Smalltalk, C++,
...
Procedures,
Pascal,
C,
...
Packages,
Frameworks,
Patterns,
…
1980 1995 2000
procedural
refinement
model
technology
Models,
Metamodels,
UML, OCL, MOF,
XMI, SPEM, CWM
…
object
composition
model
transformation
From Jean Bézivin presentation, ATLAS group (Inria & LINA), Nantes, France 5/25
-
NOTION DE COMPOSANTS
LOGICIELS
-
(Une) définition d’un composant logiciel
Un composant logiciel est une unité de composition qui a , par contrat, spécifié uniquement ses interfaces et ses dépendances explicites de contextes. Un composant logiciel peut être déployé indépendamment et est sujet à composition par des tierces entités.
Définition de Szyperski et Pfister, 1997.
Exemple « Composants Logiciels »
fonctions dans une DLL Canevas
un processus Supports d’interaction
registre/mémoire
Contre exemple: les macros en C
…F(ptr)...
F(ptr){…}
DLLDLL
Processus
7/25
-
Un composant CORBA
Mon
composant
composant interface
facettes
Sources
d’évènementsPuits
d’évènement
Attributs
réceptacles
FO
UR
NI
RE
QU
IS
8/25
-
Construction d’une application CCM =
Assemblage d’instances de composants
9/25
-
Exemple: le dîner des philosophes
ThinkingHungryStarvingEatingDead
Kant
ThinkingHungryStarvingEatingDead
Descartes
ThinkingHungryStarvingEatingDead
Aristotle
Fork
Fork
Fork
10/25
-
Le dîner des philosophes (CCM)
Philosopher
name = Kant
Philosopher
name = Aristotle
Philosopher
name = Descartes
Fork
Fork
Fork
Component
Base ref.
Facet
Receptacle
Event Source
Event Sink
Observer
11/25
-
Langage de description
d’assemblage (ADL)
Les ADL permettent de décrire une telle
structure
Les ADL ne sont pas restreints aux composants
Description d’une sorte de graphe
Composant: nœud avec des points de connections
nommées (les ports)
Connection: lien entre 2 ports
12/25
-
Le modèle FRACTAL
Modèle hiérarchique
Composants primitives
Composants composites
Modèle à membrane
Emplacement pour les contrôleurs
(composants)
A
B
C
C
D
A
13/25
-
Fractal ADL
Primitive component
14/25
-
Fractal ADL
Composite component
15/25
-
FileSelectInputSplitter
Pull
FileSliceSelect
Push Push
Map
WordCountMap
Push Pull Push
Push
Reduce
FileSelect
Go FileSelect
Go
GoMaster
Go
Runner SplitterMerging
BufferRunner
Wordcount
Reduce
Mapper
Wordcount
Writer
Reducer
Push
Merging
Buffer
Runner
PullPush
Push
User
Push
Provider
Pull Push Push
RunnerWordReader SplitterMerging
BufferRunner
Push Pull Push
Map
WordCountMap
Mapper
Push
ProviderMerging
Buffer
Runner
Pull
Push
User
GoUser
GoUserGoUser
Go
Provider
GoProvider
Reduce
GoProvider
FileSliceSelect
User
PushResult
User
Demux
Wordcount
Reduce
Reducer
PushResult
Provider
IOstream
Word
Count
2 processes
FileSliceSelect
Provider
WordReader
-
Vers des ADL plus abstraits
Support de la généricité (à la C++) Introduit au niveau du composite
aComposite
Squelettes algorithmiques Pipe, farm, etc.
Introduit comme construction d’un ADL
Par exemple, via un méta-type Farm au lieu de meta-type Component (Spécialisation)
Transformation en un ADL « simple » possible
pipe ppfarm f [ worker: w ]
w
w
emitter collector
17/25
-
Des liens aux connecteurs
Modèle de liens Connection directe entre ports via
les modèles d’interactions fournis par le modèle de composant
Modèle à connecteurs Réification des connections
Un nom
Un ensemble de rôles
Connecteur primitive/«composite » Fourni par le modèle à l’exécution
Définissable par l’utilisateur
Exemple Consensus, Data sharing
MxN communications
ConnectorComponent Component
roles
Component Component
ports
connector UseProvide< role user, role provider >;
18/25
-
Vers un squelette MapReduce
- 19
Reducer Output
Component MapReduceexposes { In, Out}
Mapper
Mapper
InputIn
Out
MapReduce
#reducer?
#mapper?
Self-*?
BlobSeer?
BitDew?
Both?
Shuffle?
19/25
-
DESCRIPTION D’APPLICATIONS
ET DE RESSOURCES « CLOUD »
-
VM: Virtual machine
SC: Servlet container
MultiCloud application
deployment and provisioning(cloudml.org)
CloudML abstract model (CPIM)
Notifier
SC
Admin
SC
Dispatcher
SC MongoDB
21/25
-
VM: Virtual machine
SC: Servlet container
MultiCloud application
deployment and provisioning(cloudml.org)
CloudML abstract model (CPIM)
Notifier
SC
VM
Admin
SC
VM
Dispatcher
SC
VM
MongoDB
22/25
-
Amazon [location: EU] Flexiant [location: UK]
SINTEF (OpenStack) [location: NO]
Notifier
Tomcat:SC
SL:VM[compute cores: 2..4,
memory: 2..4 GiB]
Admin
Jetty:SC
ML:VM[compute cores: 4..8,
memory: 4..8 GiB]
Dispatcher
Tomcat:SC
LL:VM
MongoDB
[compute cores: 8..16,
memory: 16..32 GiB]
VM: Virtual machine
SC: Servlet container
LB: Load balancer
SL: Small GNU/Linux
ML: Medium GNU/Linux
LL: Large GNU/Linux
[scalability: 1..4]
[scalability: 1..8]
[scalability: 1..8]
Adding platform specific constraints (CPSM)
23/25
-
Amazon [location: EU] Flexiant [location: UK]
SINTEF (OpenStack) [location: NO]
LB
LB
LB
1:Notifier
2:Tomcat
2:Notifier
4:Tomcat
1:SL[compute cores: 4,
memory: 4 GiB]
1:Admin
1:Jetty
1:ML[compute cores: 4,
memory: 4 GiB]
1:Dispatcher
1:Tomcat
2:Dispatcher
3:Tomcat
1:LL
1:MongoDB 2:MongoDB
[compute cores: 12,
memory: 24 GiB]
VM: Virtual machine
SC: Servlet container
LB: Load balancer
SL: Small GNU/Linux
ML: Medium GNU/Linux
LL: Large GNU/Linux
Snapshot CloudML@run-time
24/25
-
Conclusion
Motivation pour les modèles à composant Faciliter la ré-utilisation du code
Gestion des dépendances
Exprimer/manipuler la structure de l’application Via des ADL et/ou des interfaces d’introspection
Langage de description d’assemblage De simples descriptions de graphes
à des modèles plus abstrait Hiérarchie, généricité, squelette algorithmique, etc
De la transformation d’ADL pour la gestion de ressources Statique
Calculer un déploiement pour cloud
Dynamique / reconfiguration
ADL et modèle de data/workflow (grain fin & gros)
25/25