Manuel de référence → Introduction à l'architecture n-tiers

Annexe B. Introduction à l'architecture n-tiers

Le but de cet annexe est d'introduire les notions d'architecture un, deux, trois et n-tiers afin de mieux faciliter la compréhension du MVC dans Hoa et de montrer sa logique.

Il apparaît de plus en plus fréquent que dans le monde de l'information, on définisse les applications comme étant distribuées. Elles doivent leur nom au fait que — pour fonctionner — elles doivent interagir avec plus d'un ordinateur généralement en communiquant à travers un réseau (local ou distant). La plupart des applications peuvent être définies comme étant des applications n-tiers. C'est en fait un type d'application client-serveur.

Trois niveaux d'abstraction

On conçoit aisément qu'une application peut se laisser découper en trois niveaux d'abstraction distinct :

  • la couche vue, ou présentation : encore appelée IHM, permet l'interaction de l'application avec l'utilisateur. Cette couche gère les actions de la souris, du clavier, de l'écran, la présentation de l'information etc. On tente au maximum de rendre cette couche accessible et ergonomique, ça va de soi ;
  • la logique application, les traitements : décrivent les tâches à réaliser par l'application. On peut les découper en 2 sous-parties :
    • les traitements locaux : concernent les traitements du dialogue avec l'IHM, principalement pour faciliter leur manipulation ;
    • les traitements globaux : également appelées Business Logic (logique applicative) concernent l'application elle-même. Ils contiennent les règles élémentaires et internes qui régissent une entreprise.
  • les données : ou plus particulièrement, l'accès aux données, regroupent l'ensemble des mécanismes permettant la gestion des informations stockées par ou pour l'application.

On imagine bien que ces trois niveaux peuvent être imbriqués ou répartis entre différentes machines physiques et/ou virtuelles.

Le noyau de l'application est constitué de la couche présentation et de la logique application, l'accès aux données étant délégué. Le découpage et la répartition de ce noyau permettent de distinguer des architectures applicatives qui vont de l'architecture un-tiers à n-tiers.

Architecture un-tiers

Dans une approche d'application de type un-tiers, les trois couches sont fortement et intimement liées, et s'exécutent sur la même machine. Dans ce cas, on ne peut pas parler d'architecture client-serveur mais d'informatique centralisée.

Dans un contexte simple-utilisateur, la question ne se pose pas, mais dans un contexte multi-utilisateurs, on peut voir apparaître deux types d'architectures mettant en œuvre des applications un-tiers :

  • des applications sur site central ;
  • des applications réparties sur des machines indépendantes communiquant par partage de fichiers.

Application sur site central (ou mainframe)

Historiquement, on remarque que les applications sur site central étaient les premières à proposer et mettre en œuvre un accès multi-utilisateurs, soit une très bonne chose. Dans ce contexte, les utilisateurs se connectent aux applications exécutées via le serveur central à l'aide de terminaux passifs qui se comportent comme des esclaves. On délaisse l'intégralité des traitements au serveur central, y compris l'affichage qui se voit simplement déporté sur des terminaux passifs.

Plusieurs avantages lui sont reconnus, dont une grande facilité d'administration et une haute disponibilité. Aujourd'hui, il bénéficie d'une large palette d'outils de conception, de programmation et d'administration ayant atteint un niveau de maturité et de fiabilité qui lui permettent encore de soutenir la comparaison avec des solutions nettement plus modernes. De plus, on notera que la centralisation de la puissance sur une seule et même machine permet une utilisation optimale des ressources et se prête très bien à des traitements par lots.

Application un-tiers déployée

Avec l'arrivée dans les entreprises des premiers ordinateurs en réseau, il est devenu possible de déployer une application un-tiers sur plusieurs machines indépendantes. Des programmes plus ou moins simples ont fait leur apparition et permet la création d'application de ce genre.

En général, ce type d'application répond aux besoins d'une seule personne isolée ou d'un petit groupe de personne, et sa mise en œuvre dans un environnement multi-utilisateurs est envisageable.

L'envoie intégral des données nécessaires à l'exécution d'une requête fait vite saturer le réseau. Des techniques existent pour alléger le réseau, mais on arrivera toujours à une saturation malgré tout. De plus, la cohabitation de plusieurs moteurs de base de données indépendants manipulant les mêmes données tend à devenir instable à l'usage. Il n'est pas rare de rencontrer des conflits lors de la consultation ou de la modification simultannée par rapport à un même renseignement par plusieurs utilisateurs. Ces conflits peuvent altérer l'intégrité des données. Il peut arriver que la confidentialité des données ne soit plus conservée, c'est aussi très dangereux.

Ce type de solution est donc à réserver à des applications non critiques exploitées par de petits groupes de travail.

Architecture deux-tiers

Dans une architecture deux-tiers — encore appelée client-serveur de première génération ou client-serveur de données — le poste client se contente de déléguer la gestion des données à un service spécialisé.

Ce type d'application permet d'utiliser toute la puissance disponible des ordinateurs présents sur le réseau et permet de fournir à l'utilisateur une interface riche, tout en garantissant la cohérence des données, qui restent gérées de façon centralisée.

La gestion des données étant prise en charge par un SGBD centralisé, sur un serveur dédié. On interroge ce serveur à travers un langage de requête ; le plus courant étant SQL.

Le dialogue entre le client et le serveur se résume donc à l'envoi de requêtes et aux données, en réponse.

Le dialogue client-serveur

Dans ce type de conversation, on distingue donc deux parties :

  • le client : il provoque le dialogue ;
  • le serveur : il se contente seulement de répondre aux requêtes du client.

Le client provoque l'établissement d'une conversation afin d'obtenir des données ou un résultat de la part du serveur.

Cet échange de message transite à travers le réseau reliant les deux machines. Il met en œuvre des mécanismes relativement complexes qui sont, en général, pris en charge par un intergiciel (middleware).

Le middleware

Le middleware est l'ensemble des couches réseau et services logiciels qui permettent le dialogue entre différents composants d'une application répartie. Ce dialogue s'établie sur des protocoles applicatifs communs, défini par l'API du middleware.

Le middleware se contente d'unifier, pour les applications mises en jeu, l'accès et la manipulation de l'ensemble des services disponibles sur le réseau, afin de rendre l'utilisation de ces derniers presque transparente.

Limites de l'architecture deux-tiers

L'architecture client-serveur de première génération présente les inconvénients suivants :

  • on ne peut pas soulager la charge du client qui supporte déjà tous les traitements applicatifs ;
  • le poste client est fortement sollicité, il devient de plus en plus complexe et nécessite des mises à jour régulière, ce qui est contraignant ;
  • le client et le serveur sont assez bruyants, ce qui s'adapte mal à des bandes passantes étroites ; ce qui cantonne ce type d'application à des réseaux locaux ;
  • il est difficile de modifier l'architecture initiale, les applications supportent donc mal les fortes montées en charge ;
  • la relation forte et étroite entre le programme du client et l'organisation de la partie serveur complique les évolutions de cette dernière ;
  • ce type d'architecture est grandement rigidifié par les coûts et la complexité de maintenance.

Néanmoins, on peut noter quelques avantages non négligeables de ce type d'architecture :

  • elle permet l'utilisation d'une interface utilisateur riche ;
  • elle a permis l'appropriation des applications par l'utilisateur ;
  • elle a introduit la notion d'interopérabilité.

Architecture trois-tiers

L'architecture trois-tiers, également connue sous le nom d'architecture deux-tiers de deuxième génération ou client-serveur distribué, sépare l'application en trois niveaux de services distincts :

  • premier niveau : l'affichage et les traitements locaux (contrôles de saisie, mise en forme des données etc.) sont pris en charge par le client ;
  • deuxième niveau : les traitements applicatifs globaux sont pris en charge par le service applicatif ;
  • troisième niveau : les services de base de données sont pris en charge par un SGBD.

Tous ces niveaux sont totalements indépendants, i.e. ils présentent des liens faibles, ce qui permet de les répartir sur plusieurs machines, de ce fait :

  • le poste client ne supporte plus l'ensemble des traitements, il est moins sollicité et peut être moins évolué, donc moins coûteux à tous les niveaux ;
  • les ressources présentes sur le réseau sont mieux exploitées puisque les traitements applicatifs peuvent être partagés ou regroupés ;
  • la fiabilité et les performances de certains traitements se voient améliorées par leur centralisation, ainsi que leur maintenance et la gestion de leur évolutivité ;
  • les montées en charge sont relativement mieux gérées notamment en renforçant le service applicatif.

Il est très probable que le poste client prenne la forme d'un simple navigateur Web (appelé client léger), le service applicatif est assuré par un serveur HTTP et la communication avec le SGBD met en œuvre les mécanismes bien connus des applications client-serveur de la première génération. Le client n'a plus accès aux données directement, ce qui renforce la sécurité.

Le client léger

Dans l'architecture trois-tiers, on reconnait le poste client. Plus communément appelé client léger ou Thin Client, par opposition au client lourd des architectures deux-tiers. Il se contente de présenter un rendu fidèle, avec, éventuellement, une partie de logique application permettant une vérification immédiate de la saisie. Comme dit précédemment, il est souvent constitué d'un navigateur Web simple.

Le service applicatif

Dans une architecture trois-tiers, la logique application est prise en charge par le serveur HTTP. Ce dernier se retrouve dans la position du poste client d'une application deux-tiers et les échanges avec le serveur de données mettent en œuvre les mécanismes déjà vus dans ce type d'application.

En général, le protocole HTTP n'est pas supporté totalement par les navigateurs, c'est pourquoi on préfère que les applications transactionnelles doivent gérer elles-mêmes le contexte utilisateur afin de contrôler :

  • le cheminement de l'utilisateur dans l'application ;
  • les actions et saisies de l'utilisateur ;
  • l'identité de l'utilisateur ;
  • la gestion des transactions.

Limites de l'architectures trois-tiers

L'architecture trois-tiers a corrigé les excès du client lourd en centralisant une grande partie de la logique applicative sur un serveur HTTP. Le poste client, qui ne prend à sa charge que la présentation et les contrôles de saisie, s'est trouvé soulagé et plus simple à gérer.

En revanche, le serveur HTTP constitue la pierre angulaire de l'architecture et se trouve souvent fortement sollicité : il est difficile de répartir la charge entre client et serveur. On se retrouve confronté aux épineux problèmes de dimensionnement serveur et de gestion de la montée en charge rappelant l'époque des mainframes. De plus, les solutions mises en œuvre sont relativement complexes à maintenir et la gestion des sessions est compliquée, mais c'est possible.

Les contraintes semblent inversées par rapport à celles rencontrées avec les architectures deux-tiers : le client est soulagé, mais le serveur est fortement sollicité.

Le juste équilibre de la charge entre client et serveur semble atteint avec la génération suivante : les architectures n-tiers.

Architecture n-tiers

L'architecture n-tiers est aussi appelée architecture distribuée ou architecture multi-tiers. L'architecture n-tiers qualifie la distribution d'applications entre de multiples services et non la multiplication des niveaux de service : les trois niveaux d'abstraction d'une application sont toujours pris en compte.

Cette distribution est facilitée par l'utilisation de composants métier, spécialisés et indépendants, introduits par les concepts orientés objets. Elle permet de tirer pleinement partie de la notion de composants métier réutilisables et modulables. Ces composants rendent un service, si possible, générique et clairement identifié. Ils sont capables de communiquer entre eux et peuvent donc coopérer en étant implantés sur des machines distinctes et hétérogènes.