Concept: Patterns de répartition
Les patterns de répartition mettent en évidence l'importance des questions de répartition de la solution système et leur niveau d'influence sur les autres décisions architecturales.
Relations
Description principale

Noeuds, processeurs et périphériques

Les processeurs et les périphériques sont des stéréotypes courants d'un noeud. Etablir une distinction entre les deux peut sembler difficile, étant donné que de nombreux périphériques sont désormais pourvus de leur propre UC. Toutefois, la différence entre les processeurs et les périphériques réside dans le type de logiciel qui s'y exécute. Les processeurs exécutent des programmes et des logiciels qui ont été spécifiquement écrits pour le système qui est développé. Les processeurs sont des périphériques de traitement généralistes dotés de fonctions de calcul, de mémoire et d'exécution.

Les périphériques exécutent des logiciels qui contrôlent les fonctionnalités du périphérique lui-même. Les périphériques sont généralement rattachés à un processeur qui contrôle le périphérique. Ils exécutent en règle générale des logiciels intégrés et ne sont pas en mesure d'exécuter des programmes généralistes. Leurs fonctions sont normalement contrôlées par le logiciel pilote de périphérique.

Patterns de répartition

Il existe plusieurs patterns de répartition types dans les systèmes, selon la fonctionnalité du système et le type d'application. Dans de nombreux cas, le pattern de répartition est utilisé de manière informelle pour décrire « l'architecture » du système, bien que l'architecture complète englobe bien d'autres éléments. Par exemple, un système est souvent décrit comme disposant d'une « architecture client-serveur », bien qu'il ne s'agisse que de l'aspect répartition de cette architecture. Ceci met en évidence l'importance des questions de répartition du système et leur niveau d'influence sur les autres décisions architecturales.

Les patterns de répartition décrits ci-dessous impliquent certaines caractéristiques système, certaines performances et certaines architectures de processus. Ils résolvent tous certains problèmes mais posent également des défis uniques.

Les architectures client-serveur

Dans les « architectures client-serveur », il existe des noeuds de processeur réseau spécialisés appelés clients et d'autres noeuds appelés serveurs. Les clients sont des consommateurs de services fournis par un serveur. Un client ne sert souvent qu'un seul utilisateur et gère souvent des services de présentation pour utilisateur final (interface graphique), tandis que le serveur fournit généralement des services à plusieurs clients simultanément ; il s'agit la plupart du temps de services de base de données, de sécurité ou d'impression. La « logique applicative », ou logique métier, de ces systèmes est généralement répartie entre le client et le serveur. On appelle partage de l'application cette répartition de la logique métier.

Dans la figure suivante, le client A constitue un exemple d'architecture à deux niveaux, la majorité de la logique de l'application étant localisée sur le serveur. Le client B est un exemple type d'architecture à trois niveaux, les services métier étant implémentés dans un serveur d'objet métier. Quant au client C, il fournit un exemple type d'application Web.

Le diagramme est décrit dans le contenu.

Variations des architectures client-serveur

Dans les systèmes client-serveur traditionnels, la majeure partie de la logique métier est implémentée sur les clients ; il est néanmoins préférable pour certaines fonctionnalités qu'elles soient localisées sur le serveur (cas des fonctionnalités qui accèdent souvent aux données stockées sur le serveur, par exemple). Il est ainsi possible de réduire le trafic réseau, qui s'avère assez coûteux dans la plupart des cas (car il est une à deux fois plus lent que la communication interprocessus).

Quelques caractéristiques :

  • Un système peut se composer de plusieurs types de clients différents, parmi lesquels :
    • Postes de travail utilisateurs
    • Ordinateurs réseau
  • Les clients et les serveurs communiquent au moyen de diverses technologies, telles que CORBA/IDL ou RPC (appel de procédure éloigné).
  • Un système peut se composer de plusieurs types de serveurs différents, parmi lesquels :
    • Des serveurs de base de données, qui gèrent les machines de base de données, telles que Sybase, Ingres, Oracle, Informix
    • Des serveurs d'impression, qui gèrent le logique de pilote de périphérique telle que la mise en file d'attente pour une imprimante donnée
    • Des serveurs de communication (TCP/IP, ISDN, X.25)
    • Des serveurs de gestionnaire de fenêtres (X)
    • Des serveurs de fichiers (NFS sous UNIX)

L'architecture « à trois niveaux »

L'architecture « à trois niveaux » constitue un cas particulier d'architecture « client-serveur », dans laquelle les fonctionnalités du système sont divisées en trois partitions logiques : services d'application, services métier et services de données. Les « partitions logiques » peuvent en fait être mappées à trois noeuds physiques ou plus.

Le diagramme est décrit dans le contenu.

Exemple d'architecture à trois niveaux

Le partitionnement logique en trois « niveaux » reflète une observation de la manière dont les fonctionnalités ont tendance à être implémentées dans les applications de bureau classiques et la manière dont elles évoluent. Les services d'application, qui traitent principalement des questions de présentation de l'interface graphique, ont tendance à s'exécuter sur un poste de travail dédié doté d'un environnement d'exploitation graphique à fenêtres. Les modifications apportées aux fonctionnalités ont souvent tendance à être dictées par des questions de facilité d'utilisation ou d'esthétique, et donc par des questions principalement liées à des facteurs humains.

Les services de données ont tendance à être implémentés à l'aide de la technologie de serveur de base de données, qui s'exécute généralement sur un ou plusieurs noeuds à performances et à bande passante élevées prenant en charge des centaines de milliers d'utilisateurs connectés par un réseau. Les services de données changent généralement lorsque la représentation des informations stockées et les relations qui les unissent changent.

Les services métier reflètent la connaissance encodée des processus métier. Ils manipulent et synthétisent les informations obtenues auprès des services de données et les fournissent aux services d'application. Les services métier sont généralement employés par plusieurs utilisateurs en commun et ont donc tendance à être localisés eux aussi sur des serveurs spécialisés, bien qu'ils puissent résider sur les mêmes noeuds que les services de données.

Le fait de partitionner les fonctionnalités sur cette base fournit un pattern d'évolutivité relativement fiable : l'ajout de serveurs et le ré-équilibrage des processus entre les serveurs de données et les serveurs métier permet d'atteindre un niveau d'évolutivité supérieur.

L'architecture « client complet »

Le client est « complet » car quasiment tout s'y exécute (sauf dans le cas d'une variation, appelée architecture « à deux niveaux », dans laquelle les services de données sont localisés 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 situe généralement sur une autre machine.

Le diagramme est décrit dans le contenu.

L'architecture traditionnelle à deux niveaux ou architecture « client complet »

Les « clients complets » sont relativement simples à concevoir et à générer, mais sont plus difficiles à distribuer (ils ont tendance à être volumineux et monolithiques) et à gérer. Les machines client ayant tendance à mettre les données en cache localement afin d'offrir de meilleurs performances, la cohérence et la logique de la mémoire cache, constituent souvent un problème et nécessitent une attention particulière. Il est difficile et onéreux de coordonner les modifications apportées aux objets partagés situés dans plusieurs mémoires cache, car elles impliquent une diffusion des modifications sur le réseau.

L'architecture « serveur complet »

A l'extrémité opposée de la gamme par rapport au « client complet », on trouve le « serveur complet » ou « client léger ». Une application de navigateur Web exécutant un jeu de pages HTML (il n'y que très peu d'applications dans le client) constitue un bon exemple de client léger. La quasi-totalité du travail s'opère sur un ou plusieurs serveurs Web et serveurs de données.

Le diagramme est décrit dans le contenu.

Application Web

Les applications Web sont faciles à distribuer et faciles à modifier. Leurs coûts de développement et de support sont relativement réduits, car la majeure partie de l'infrastructure de l'application est fournie par le navigateur et le serveur Web. Elles sont toutefois susceptibles de ne pas offrir le niveau de contrôle de l'application souhaité et ont tendance à saturer rapidement le réseau si elles ne sont pas bien conçues (et le font parfois même si elles sont bien conçues).

L'architecture client-serveur distribuée

Dans cette architecture, les services d'application, les services métier et les services de données résident sur des noeuds différents, les serveurs pouvant être spécialisés dans les niveaux des services métier et des services de données. Une réalisation complète d'architecture à trois niveaux.

L'architecture d'égal à égal (P2P)

Dans l'architecture d'égal à égal (peer-to-peer), tout processus ou noeud du système peut être à la fois le client et le serveur. La répartition des fonctionnalités est obtenue par regroupement des services interdépendants afin de réduire le trafic réseau tout en optimisant le rendement et l'utilisation du système. Ce type de système est généralement complexe et il convient encore plus de maîtriser les questions liées aux blocages, aux carences entre processus et au traitement des erreurs.