Concepts : Patterns
de distribution
Rubriques
Les processeurs et les périphériques sont des stéréotypes courants du
noeud. La distinction entre les deux peut paraître difficile à
déterminer, du fait que de nombreux périphériques contiennent désormais
leur propre UC. Cependant, la distinction entre processeurs et périphériques
réside dans le type de logiciel qui s'exécute sur eux.
Les processeurs exécutent des programmes/logiciels qui sont écrits de
manière explicite pour le système en cours de développement.
Ce sont des périphériques de calcul à usage général, dotés de capacités de
calcul et d'exécution, et de mémoire.
Les périphériques exécutent le logiciel qui contrôle la fonctionnalité du
périphérique lui-même. Ils sont souvent connectés à un processeur qui
contrôle le périphérique. Ils exécutent généralement un logiciel incorporé et
sont incapables d'exécuter des programmes à usage général.
Leur fonctionnalité est généralement contrôlée par un logiciel de pilote de
périphérique.
Il existe un certain nombre de patterns typiques de distribution dans les
systèmes qui dépendent de la fonctionnalité du système et du type d'application. Dans
de nombreux cas, le pattern de distribution est utilisé de façon informelle
pour décrire l'architecture du système, bien que l'architecture complète
englobe également de nombreuses autres choses.
Par exemple, il arrive souvent qu'un système soit décrit comme ayant une
"architecture client-serveur", bien qu'il ne s'agisse là que de l'aspect de la
distribution de l'architecture. Ceci permet de mettre en évidence l'importance
des aspects de la distribution du système et la portée de leur influence sur
d'autres décisions architecturales.
Les patterns de distribution décrits ci-dessous impliquent certaines
caractéristiques système et de performances, ainsi que certaines architectures
de processus. Chacun résout des problèmes particuliers, mais pose également des
défis uniques.
Dans les architectures dites "client-serveur", il existe des
noeuds de processeur réseau appelés clients et des noeuds appelés
serveurs. Les clients sont des consommateurs de services fournis par un serveur. Un
client sert souvent un seul utilisateur et traite des services de présentation
pour l'utilisateur final (interface utilisateur), tandis que le serveur fournit
généralement des services à plusieurs clients simultanément. Les services
fournis sont généralement ceux de base de données, de sécurité et
d'impression. La "logique applicative" ou la logique métier, de ces
systèmes est généralement distribuée sur le client et le serveur. La distribution
de la logique métier est appelée partitionnement d'application.
Dans la figure suivante, le client A présente un exemple d'architecture à 2
niveaux, la majorité de la logique applicative se situant sur le serveur.
Le client B présente une architecture à 3 niveaux, les services métier étant
implémentés dans un serveur d'objets métier.
Le client C présente une application Web typique.

Variations des architectures client-serveur
Dans les systèmes client-serveur traditionnels, la majorité de la logique
est implémentée sur des clients ; mais certaines fonctionnalités sont mieux
adaptées pour se trouver sur le serveur, comme par exemple une fonctionnalité
accédant souvent à des données stockées sur le serveur.
En procédant ainsi, il est possible de réduire le trafic réseau qui dans la
plupart des cas est très coûteux.
Quelques caractéristiques :
- un système peut être constitué de plusieurs types de clients différents,
comme par exemple :
- des postes de travail utilisateur,
- des ordinateurs réseau.
- les clients et les serveurs communiquent au moyen de diverses
technologies, comme CORBA/IDL ou les appels RPC (Remote Procedure Call) ;
- un système peut être constitué de plusieurs types de serveurs différents,
comme par exemple :
- des serveurs de base de données, gérant les machines de
base de données, telles que Sybase, Ingres, Oracle, Informix,
- des serveurs d'impression, gérant la logique du pilote
(mise en file d'attente, etc.) d'une imprimante spécifique,
- des serveurs de communications (TCP/IP, ISDN, X.25),
- des serveurs de gestionnaire de fenêtres (X),
- des serveurs de fichiers (NFS sous UNIX).
L'architecture à 3 niveaux est un cas spécial d'architecture
client-serveur dans lequel la fonctionnalité du système est divisée en trois
partitions logiques : services d'application, services métier et services de
données. Les partitions logiques peuvent en fait mapper vers trois noeuds
physiques ou davantage.

Exemple d'architecture à 3 niveaux
Le partitionnement logique en ces trois niveaux reflète une observation
faite sur comment la fonctionnalité dans des applications de bureau standard
tend à s'implémenter et comment elle change.
Les services d'application, traitant principalement de questions de
présentation d'interface utilisateur, tendent à s'exécuter sur un poste
de travail de bureau dédié, doté d'un environnement d'exploitation de fenêtrage
graphique. Les changements de fonctionnalité sont souvent dictés par la
simplicité d'utilisation ou des questions esthétiques ; ce sont
essentiellement des questions de facteurs humains.
Les services de données sont souvent implémentés à l'aide d'une
technologie de serveur de base de données qui tend à exécuter un ou plusieurs
noeuds de large bande passante ultra-performants qui servent des centaines ou
des milliers d'utilisateurs, connectés sur un réseau.
Les services tendent à changer lorsque la représentation et les relations
entre les informations stockées changent.
Les services métier reflètent la connaissance codée des processus
métier. Ils manipulent et synthétisent les informations obtenues des
services de données et les fournissent aux services d'application. Les services
métier sont généralement utilisés par de nombreux utilisateurs en commun,
aussi tendent-ils à se trouver sur des serveurs spécialisés également, bien
qu'ils peuvent résider sur les mêmes noeuds que les services de données.
La fonctionnalité de partitionnement, avec ces lignes, fournit un pattern
relativement fiable pour l'évolutivité. En ajoutant des serveurs et en
rééquilibrant le traitement sur les serveurs de données et métier, un degré
plus grand d'évolutivité est atteint.
Le client est dit "lourd" lorsque presque tout s'exécute dessus
(excepté dans une variation, appelée "architecture à 2 niveaux" dans la quelle
les services de données résident sur un noeud distinct).
Les services d'application, les services métier et les services de données
résident tous sur une machine client ; le serveur de base de données se trouve
généralement sur une autre machine.

Architecture traditionnelle à 2 niveaux ou "client lourd"
Les "clients lourds" sont relativement simples à concevoir et à créer, mais
plus difficiles à distribuer (ils tendent à être larges et monolithiques) et
à gérer. Comme les machines client tendent à mettre des données en cache
localement afin d'améliorer les performances, la cohérence de la cache locale
tend à faire naître des problèmes et des zones nécessitant une attention particulière.
Les changements apportés à des objets partagés se trouvant dans plusieurs
caches locales sont difficiles et onéreux à coordonner, impliquant une
diffusion réseau des changements.
A l'autre extrémité du spectre du "client lourd" se trouve le "serveur
lourd" ou "client anorexique". Par exemple, pour une application de navigateur Web exécutant un ensemble de pages HTML, seule une très petite part de l'application se trouve dans le client. Presque tout le travail a lieu sur un ou plusieurs serveurs Web et de données.

Application Web
Les applications Web sont simples à distribuer, faciles à modifier.
Elles sont relativement peu onéreuses à développer et à prendre en charge
(du fait qu'une grande partie de l'infrastructure d'application est
fournie par le navigateur et le serveur Web).
Elles peuvent cependant ne pas fournir le degré de contrôle souhaité sur
l'application et elles tendent à saturer le réseau rapidement si elles ne sont
pas bien conçues (et parfois malgré qu'elles soient bien conçues).
Dans cette architecture, les services d'application, métier et de
données résident sur des noeuds différents, potentiellement avec une
spécialisation des serveurs dans les niveaux de services métier et de données.
Réalisation complète d'une architecture à 3 niveaux.
Dans cette architecture, tout processus ou noeud du système peut être à
la fois client et serveur. La distribution de la fonctionnalité est
assurée en regroupant les services connectés afin de réduire le
trafic réseau, tout en optimisant le rendement et l'utilisation du système.
De tels systèmes tendent à être complexes et nécessitent une plus grande
attention concernant les questions d'inter-blocage, de carence entre
processus et de gestion des erreurs.
|