les derniers
articles

Index &
Sommaire
 

Articles « Info » : architecture

 


DÉCOLLAGE !


Présentation du
site WEB AILES
 


AT (Architecture Technique)

[Architecture]
[SEI], [RDFranceTelecom], [BAF99]


    Si la notion générale d'architecture a été définie et même complétée par un framework, l'article sur l'architecture et les points de vues a introduit 2 notions plus familières : l'architecture fonctionnelle et l'architecture technique.
    Cet article revient sur le deuxième des 2 points de vues majeurs : l'architecture technique.
    L'article :
- revient sur la définition de ce point de vue majeur ;
- détaille le lien entre le composant technique et le besoin fonctionnel (technique ou métier) dont il permet et supporte l'exécution ;
- présente le point de vue "technologique", issue des vues "physique" et "d'exploitation", où l'on parle de "composant technique" sans faire encore de choix matériel ;
- introduit le point de vue "ingénierie", issu des vues "matériel" et "de déploiement", où l'on peut faire des choix matériel et de topologie de réseau ;
- enfin, aborde rapidement la gestion et les nécessaires compromis à faire dans le domaine des composants techniques.


Rappel :
- les éléments participant à la
définition de l'architecture restent représentées en jaune sur fond rouge ;
- les
enjeux architecturaux en vert sur fond rouge ;
- les
caractéristiques de bases de l'architecture sont en bleue sur fond vert.


 



Lisez-moi et
réagissez !



Écrivez à AILES !



Retour vers le sommaire Architecture
 
Rappels
    Le terme "Technique" de l'AT désigne un des 2 points de vues majeurs de l'Architecture.
On se souviendra que le "point de vue", tel que présenté dans caractéristiques de bases : Vues, désigne la modélisation d'une ou plusieurs structure, chaque structure est un composant particulier représentant une partition d'éléments appartenant à un même domaine.
    Bon ok, je donne un exemple :
    Dans l'article sur les points de vue des architectures, le point de vue majeur "Technique" est décomposé en 4 vues : matérielle, déploiement, configuration physique et enfin d'exploitation.
    Ainsi, par exemple, la vue de déploiement a-t-elle comme composant particulier des structures composées de nœuds physiques logiques (ordinateur, serveur, liaison TCP-IP... autant d'éléments concrets d'architecture appartenant au même domaine d'architecture "Nœud"). Le diagramme UML associé est celui, bien connu, du diagramme de déploiement, dont un exemple est fourni dans l'article sur la définition de l'architecture.
    En examinant les 4 vues déjà citées comme constituant l'AT, on peut en déduire que celle-ci spécifie la plate-forme technique (point de vue matériel, de déploiement) en reliant les besoins fonctionnels de l'utilisateur à des composants physiques (point de vue d'exploitation), favorisant la décomposition du système logiciel en sous-systèmes lors de l'analyse (vue structurelle, diagramme de classe), afin d'aller jusqu'à la modélisation de ce système sous forme de classes (vue logique, diagrammes de classe et d'objet).
    Toutefois, la granularité retenue au niveau de l'AT est le "composant technique", qui permet de remplir le contrat technique" d'un composant fonctionnel, tel que présenté lors de l'Architecture Fonctionnelle. On se rappellera qu'un composant fonctionnel rempli toujours 2 contrats : 
- un contrat technique qui supporte l'exécution de la fonction métier du composant (avec, par exemple, la notion de "nommage" ou "désignation" qui permet de le retrouver via un serveur de composant. Cette fonction technique de désignation sera remplie par un composant technique) ; 
- et un contrat fonctionnel, qui permet de délivrer le service métier au travers d'une interface (comme illustré dans l'Architecture Fonctionnelle).
    En règle général, parler de "composant" revient, par abus de langage, à désigner un "Composant Fonctionnel Métier".
    Ici, on ne parlera jamais de "Composant", mais bien de "Composant Technique".
Cf. aussi - dans le Questionnaire Langage - les réponses concernant la notion de Composant.
    Ce "composant particulier (puisque composant "technique"), comme tous les composants, est composé d'éléments d'au moins 2 types :
1/ des éléments techniques (process, main, librairies,...) qui supportent l'exécution du service métier en lui garantissant persistance, distribution, sécurité, etc...
    Tous ces éléments participent à la définition d'un composant technique.
    On notera que, en UML, le composant technique présenté dans cet article se modélise avec le symbole utilisé par "ma librairie".
Les 2 autres symboles sont des éléments techniques. 

Exemple de composant technique : une librairie dynamique, basée sur les spécifications (les headers) de plusieurs classes.

2/ un lien avec un besoin fonctionnel (métier ou technique), qui peut prendre la forme d'une ou plusieurs classes.
    Ces classes peuvent être organisées sous forme de Composant Fonctionnel.
Ces liens se retrouvent aux travers les points de vue physique et d'exploitation.
    Tout composant technique (dit aussi "physique") est donc relié à un composant fonctionnel (dit aussi "logique"), la fonctionnalité supportée étant aussi bien "métier" (exemple : validerCommande()), que "technique" (exemple : sauverEnBase()).
Certains AGL utilisent cette logique pour, en modélisation C++, relier la classe (logique) aux composants physiques (header ".h" et body ".cpp").
Exemple : cette librairie est "reliée" à un composant fonctionnel technique (et non métier, comme l'est le "composant").

    Le lien de dépendance indique que le composant technique connaît le composant fonctionnel. Le contraire est faux : la fonctionnalité n'a aucune idée de son implémentation technique (librairie, DLL, service distant, ...).
    Il n'existe pas de vue UML pour l'exploitation, qui permettrait, comme le montre le "faux" diagramme UML ci-contre, de bien visualiser les classes logiques "réalisées" par un composant physique.


Des composants techniques pour quoi faire ? Point de vue "ingénierie"
    On vient de le voir, un composant technique supporte un composant fonctionnel. Le besoin fonctionnel concerné peut aussi bien être purement métier que technique. Si l'on ne considère que les "besoins fonctionnels techniques", on arrive à un "socle technologique" qui supporte l'application fonctionnelle.
    Ce point de vue est à la base de l'architecture applicative.
    Le point de vue ingénierie se focalise sur ces "besoins fonctionnels techniques" (dont des exemples concrets sont donnés juste après) permettant la répartitions des composants fonctionnels "Métier" et leur exécution.
    Il s'agit de l'agrégation de 2 des 4 points de vues techniques présentés en début d'article. Ce "point de vue agrégé" ("ingénierie") se représente plutôt par les points de vue physique et d'exploitation.
    Il permet d'exprimer les besoins d'infrastructure sans faire a priori de choix de fournisseur.  
On remarquera bien qu'on ne parle pas de choix de machine, de réseau ou de topologie dans les points de vue physique et d'exploitation, qui ne mettent en œuvre que des composants techniques.
    A force de réaliser des projets, on a identifié différents services techniques génériques transversaux qui permettent aux composant Fonctionnels présentés dans l'AF de fonctionner correctement, c'est-à-dire de délivrer le service métier attendu.
Ces services sont constitutifs d'une plate-forme technique d'exécution des composants.
   
    (Au passage, on reconnaît dans ce point de vue ingénierie les éléments issus des points de vue physique - avec le symbole UML du composant - et d'exploitation - chaque composant physique étant relié à un besoin fonctionnel. Ici, il s'agit d'une collection de besoins fonctionnels techniques)
    Parmi tous les services présents dans ce schéma, on attend au minimum les services :
- cycles de vie qui permet de gérer la création et la destruction des objets au cours de la vie d'une application ;
- désignation qui permet de retrouver une interface d'un objet à partir d'un nom ;
- persistance qui permet d'assurer la rémanence d'un état au cours du temps ;
- transaction (commit, rollback, ...) qui permet d'assurer l'atomicité d'un traitement réparti (en concurrence avec d'autres) tout en garantissant l'intégrité du système (rq, ce n'est pas toujours obligatoire d'assurer ce service, surtout dans un cadre de consultation de données sans mise à jour) ;
- gestion de la concurrence d'accès qui permet de gérer de manière souple l'exécution simultanée de requête sur le même objet ;
- événements qui permet de découpler l'émetteur et le récepteur d'un message dans une communication asynchrone ;
- sécurité qui assure la sécurité des interactions entre les objets du système ;
- configuration et administration qui facilite l'exploitation de l'infrastructure d'exécution des composants qu'elle héberge.
    Cette plate-forme peut :
- soit exister et être mise en oeuvre sans programmation supplémentaire au niveau du composant fonctionnel (c'est la cas de certains services de l'architecture J2EE) ;
- ou au contraire nécessiter la programmation explicite de classes complémentaires. L'article sur le guide d'architecture en propose un excellent exemple au niveau de la persistance : il suffit de préciser dans la modélisation UML qu'une classe est persistante pour que automatiquement se rajoutent les classes purement techniques de gestion de la persistance.
    Cette dernière remarque souligne bien l'absence de pré-requis quant à la nature de ces composants techniques : ils sont aussi bien des composants objets java (J2EE) que des modules COBOL ou des classes C++ générées automatiquement (comme c'est la cas dans l'exemple de la persistance ci-dessus).
    Ces composants techniques englobent donc aussi bien les systèmes existants (legacy, dont le poids reste important, dixit cet ingénieur de 30 ans) que les nouvelles applications.

Des composants techniques pour quoi faire ? Point de vue "technologique"
     L'architecture technique s'est trouvée renforcée dans son importance avec la vague Internet et son architecture 3-tier (présentée dans l'article sur les architectures et qui est, rappelons-le, une architecture technique). Sun Microsystems déclarait en 1996 : "The network is the computer".
     Plus généralement, le point de vue technologique de l'architecture technique concrétise le passage des composants techniques évoqués dans le paragraphe précédent (comme par exemple la distribution) vers des choix techniques précis (comme par exemple, CORBA). Cela passe de la définition du poste client jusqu'à l'orientation et l'assemblage des composant en passant par le réseau.
    Il s'intéresse au choix précis des technologies matérielles et logicielles permettant de réaliser le système et aux choix d'organisation physique [machine, topologie, réseau]. Il est donc l'agrégation des points de vue matériel et déploiement.
    Ce point de vue est à la base de l'architecture technique (vue en tant que sphère architecturale)
    Pour mieux mettre un nom sur ces choix, il est utile de visualiser l'ensemble des paramètres qui vont influencer les décisions technologiques précises.
    C'est ce que propose ABAS [SEI] (Attribute-Based Architectural Style) qui détaille les attributs de l'architecture selon 3 de ces caractéristiques majeures : les stimuli, les paramètres architecturaux et les réponses. Chacune de ces 3 caractéristiques se détaille différemment selon le service générique transversal considéré : performance, évolutivité, persistance, sécurité, etc.
- les stimuli sont tout type d'évènement qui induit des changement dans l'architecture ;
- les réponses sont les effets mesurables de ces changements ;
- les paramètres architecturaux sont les aspects d'une architecture (composants, connecteurs et leurs propriétés) qui ont un impact direct sur la réalisation des réponses souhaitées.
    Ce qui suit est un exemple des attributs associés aux stimuli, paramètres et réponses du service performance.

Performance
Stimuli
   Mode
     
regular
      overload
   Source
      internal event
      clock interrupt
      external event

   Frequency Regularity
      periodic
      aperiodic

         sporadic
         random
Architectural Parameter
   Ressource
     
CPU memory
     
Network
     
Devices & sensors

   Ressource arbitration
  
(Queuing policy)
     
Off-line
         cyclic executive
     
Online
         one-to-one
         one-to-many
     
Queuing per processor
         dynamic priority
         fixed priority
     
Queue
         SJF
         fixed priority
         FIFO
         deadline
     
Preemption policy
         shared (preemptable)
         locking (non-preempt.)
  
Ressource Consumption
     
Memory size
     
CPU time
     
Network bandwidth
     
Devices & sensors
Responses
   Latency
     
response window
     
criticality
     
best/avg/worst case
     
jitter
   Throughput
     
criticality
     
best/avg/worst case
     
observation window
   Precedence
     
criticality
     
ordering
         partial
         total

    Pour ce besoin fonctionnel précis (la performance) :
- les stimuli sont les messages ou les entrées de l'utilisateur ;
- les décisions architecturales incluent le processeur et la gestion du réseau par des mécanismes concurrents ou non ;
- les réponses se caractérisent par des éléments quantifiables et mesurables comme le temps de latence.
    En interrogeant le client sur ses besoins en performance, on commencera à pouvoir faire des choix sur le type de matériel possible, le type d'OS (synchrone, asynchrone, multi-process ou multi-thread), etc. 
    En revanche, si l'on considère le service "évolutivité", les attributs sont différents : 
- les stimuli correspondent aux nombre et type de requêtes de modification du logiciel ;
- les réponses se quantifient en terme de nombre de composants, connecteurs et interfaces modifiés, ainsi que par l'effort fourni pour faire ces modification (nombre de personnes impliquées, temps passé, ...) ;
- les décisions d'architecture se basent sur des mécanisme d'encapsulation ou d'indirection qu'il faudra plus ou moins mettre en oeuvre suivant le type de stimuli et les réponses que l'on souhaite respecter. (Si le programme évolue régulièrement et que l'on a que peu de développeur, mieux vaudra dès le début prévoir une encapsulation importante afin de minimiser les effets de bords à chaque correction/évolution).
     L'implémentation de l'infrastructure d'exécution de composants peut alors se faire en choisissant le produit qui répond au mieux aux attributs identifiés ci-dessus.

Gestion des composants techniques
    La gestion de ces composants se fait par paliers
- paliers techniques qui regroupent la station, le réseau, le protocole et l'administration ;
- paliers applicatifs qui regroupent les messages (de préférence auto-descriptif en XML, donc évolutifs), plus les tests de stress ou montée en charge et les connecteurs techniques qui permettent de faire communiquer deux applications entre elles. Le tout est, dans l'idéal, réparti sur 3 niveaux :
    * TU (Test Unitaire) : concrètement, le poste du développeur ;
    * TIA (Test d'Intégration Applicative) : un environnement identique à la production, même type de machine, même nombre - réel ou simulé - d'utilisateurs, le tout dans une "salle blanche", constituée de machine aisément formatables et reconfigurables selon les applications à tester ;
    * Prod (mise en production et exploitation) : l'environnement réel du terrain, la fameuse "mise en production", couplée en principe avec un centre d'appel de niveau 1 (celui qui se ramasse les appels au secourt direct).
    Une telle gestion justifie par ailleurs les velléités de portabilité du code, celui-ci étant de plus en plus développé sur des plate-forme différentes de celles de la mise en production. Aujourd'hui (2001), cela concerne essentiellement des langages comme le C standard et le java.

Compromis d'architecture
    Tout développement applicatif est confronté à classer les propriétés non-fonctionnelles attendues par ordre d'importance.
Par exemple :
- Cohérence vs performance : la gestion de la cohérence de l'information est un élément essentiel dans la conception d'une application d'envergure : il existe de nombreux niveaux de cohérence possibles qui ont chacun leurs coûts associés. Il est fondamental de bien préciser le niveau requis et le prix que l'on est prêt à payer en performance. De cette spécification découleront les choix subséquents de technologie (par exemple, la tolérance aux défaillance matérielle ou logicielle, la présence ou l'absence des transactions, etc...) ;
- Sécurité vs coût : un niveau de sécurité élevé nécessite des investissement (framework d'authentification unique, annuaires, mécanismes matériels d'authentification, mécanismes de cryptage, ...) ainsi que des coûts d'exploitation non négligeables ;
- Sécurité vs ouverture : un niveau de sécurité élevé a une contrepartie évidente en terme de possibilités d'ouverture du système. Inversement, certains choix renforçant l'ouverture du système peuvent diminuer le niveau de sécurité ;
- Qualité de service vs coûts : les performances ont un impact évident en terme financiers : infrastructure réseau, machines (terminaux et serveurs) performants, mécanismes d'équilibrage de charge, ... ;
- etc.



               
 
Avertissement !
 
Décollage !  |  Présentation du site web "AILES"  | 
Infos générales  |  articles "Informatique"