suivant: Réalisation technique de l'architecture
monter: Intranet en architecture trois-tiers
précédent: Intranet en architecture trois-tiers
  Table des matières
Sous-sections
L'objectif premier d'un système d'information quel qu'il soit est de permettre
à plusieurs utilisateurs d'accéder aux mêmes informations.
Pour cela il faut donc regrouper les informations
utilisées par l'entreprise.
En terme technique, cela se traduit par la
centralisation des données au sein d'une base de données. L'évolution des
systèmes d'information s'est donc basée sur une meilleure subdivision entre
les tâches à réaliser pour permettre l'exploitation de ces données par les
utilisateurs finaux. Ceci permet de structurer plus efficacement les
informations ce qui entraîne à la fois une meilleure organisation de
l'entreprise et une meilleure efficacité technique.
Cette subdivision a été facilitée par l'avènement des technologies orientées
objets qui s'appliquent aussi bien au modèle client-serveur qu'au modèle
Internet. Ces technologies permettent une séparation entre les différents
composants du système. Il devient alors possible de réaliser de nouvelles
architectures permettant la mise à disposition des informations sous différentes
formes tout en diminuant les temps de développement.
Ces technologies permettent
également de faire collaborer une grande diversité de systèmes. On parle alors
d'architecture distribuée. Il est ainsi possible de présenter des données en
provenance d'un mainframe mélangées à des données en provenance d'un SGBDR,
le tout étant affiché dans un browser sur la même page HTML.
Tout système d'information nécessite la réalisation de trois groupes de
fonctions: le stockage des données, la logique applicative et la présentation.
Ces trois parties sont indépendantes les unes des autres: on peut ainsi
vouloir modifier la présentation sans modifier la logique applicative.
La conception de chaque partie doit également être indépendante, toutefois
la conception de la couche la plus basse est utilisée dans la couche d'au dessus.
Ainsi la conception de la logique applicative se base sur le modèle de données,
alors que la conception de la présentation dépend de la logique applicative.
Le système de stockage des données a pour but de conserver une quantité plus ou
moins importantes de données de façon structurée. On peut utiliser pour cette
partie des systèmes très variés qui peuvent être des systèmes de fichiers,
des mainframes, des systèmes de bases de données relationnelles, etc...
Le point commun entre toutes ces systèmes est qu'il permettent le partage
des données qu'ils contiennent via un réseau.
La méthode d'accès à ces données dépendra
du type d'organisation de ces données. Dans le cas d'une base de données relationnelle,
l'accès peut se faire par des API qui dépendent du langage et de l'environnement.
Ainsi en JAVA l'accès se fait via JDBC, alors qu'en C++ il se fera à l'aide d'ODBC.
Quel que soit l'API, le langage SQL est utilisé.
La logique applicative est la réalisation informatique du mode de fonctionnement
de l'entreprise. Cette logique constitue les traitements nécessaires sur l'information
afin de la rendre exploitable par chaque utilisateur. Les utilisateurs peuvent avoir
des besoins très variés et évolutifs. Il devient alors nécessaire de permettre
l'évolution du système sans pour autant devoir tout reconstruire.
Cette partie utilise les données pour les présenter de façon exploitable par
l'utilisateur. Il convient donc de bien identifier les besoins des utilisateurs
afin de réaliser une logique applicative utile tout en structurant les données
utilisées.
La présentation est la partie la plus immédiatement visible pour l'utilisateur.
Elle a donc une importance primordiale pour rendre attrayante l'utilisation de
l'informatique. Son évolution a été très importante depuis les débuts de l'informatique.
Depuis les terminaux en mode texte connectés à des mainframes jusqu'au HTML de nos jours
en passant par les applications graphiques développées en client serveur, il y a eu
beaucoup de chemin parcouru.
Différents types d'interfaces demeurent intéressantes. En effet l'ergonomie d'un
site Intranet HTML n'est pas forcément idéal pour tous les types d'applications.
Il peut être intéressant de proposer plusieurs types d'interface pour une seule
logique applicative. Par exemple une entreprise disposant d'un site de commerce
électronique peut proposer un accès à la liste de ses produits sur Internet
en HTML mais disposer d'une interface d'administration réalisée à l'aide d'une
applet graphique.
Architecture client-serveur
Les architectures client-serveur constituent une étape importante dans l'évolution
des systèmes d'informations. Ce type d'architecture est constitué uniquement de deux
parties: un client qui gère la présentation et la logique applicative,
un serveur
qui stocke les données de façon cohérente et gère éventuellement une partie de la
logique applicative. L'interface entre ces deux parties est classiquement le
langage SQL (dans sa version normalisé ou dans une version propriétaire).
Dans ce type d'architecture on constate une certaine indépendance du client
par rapport au serveur. La programmation du client peut s'effectuer sans
se préoccuper de la mise en place de la base de données. En particulier, les
questions concernant l'administration des données ne concerneront pas le développeur
du client (dimensionnement des disques, répartition des données sur le système,
optimisation des accès aux données, sauvegarde des données,...).
Un des objectifs des architectures multi-tiers sera de généraliser ce type
de fractionnement en éléments logiciels indépendants les uns des autres.
La qualité de ce type d'architecture est basé sur deux technologies éprouvées:
la notion de base de données relationnelle et le langage SQL. Toutefois on peut
également constater deux inconvénients à cette technologie: elle possède une
sécurité limitée et surtout son déploiement demeure long et laborieux.
Le modèle relationnel a été introduit par E. Codd en 1970. Il s'appuie sur
des considérations théoriques formulées sous la forme de 12 règles formant le
cahier des charges initial. Ce modèle est basé sur la notion de relation.
Une relation est un ensemble de n-uplet (n est fixe) qui correspondent chacun
à une propriété de l'objet à décrire.
Ce modèle permet la gestion précise de contraintes d'intégrité qui garantissent
la cohérence des données.
Les systèmes de gestion de base de données relationnel (SGBDR) sont interfacés à
l'aide d'un langage unique: le SQL (Structured Query Language). Ce langage permet
d'effectuer l'ensemble des opérations nécessaires sur la base de données.
Ce langage permet également la gestion de transaction. Une transaction est
définie par quatre propriétés essentielles: Atomicité, Cohérence, Isolation
et Durabilité (ACID).
Ces propriétés garantissent l'intégrité des données dans un environnement
multi-utilisateurs.
L'Atomicité permet à la transaction d'avoir un comportement indivisible;
soit toutes les modifications sur les données effectuées dans la transaction
sont effectives, soit aucune n'est réalisée. On comprend l'intérêt de ce
concept dans l'exemple simple d'une
transaction débitant un compte A et créditant un autre compte B : il est clair que la
transaction n'a de sens que si les deux opérations sont menées à leur terme;
L'atomicité de la transaction garantit que la base de donnée passera d'un état
cohérent à un autre état cohérent. La Cohérence des données de la base est donc
permanente.
L'Isolation des transactions signifie que les modifications effectuées au
cours d'une transaction ne sont visibles que par l'utilisateur qui effectue cette
transaction. Au cours de la transaction, l'utilisateur pourra voir des modifications
en cours qui rendent la base apparemment incohérente, mais ces modifications ne sont
pas visibles par les autres et ne le seront qu'à la fin de la transaction si
celle-ci est correcte (elle ne rend pas la base incohérente).
La Durabilité garanti la stabilité de l'effet d'une transaction dans le temps,
même en cas de problèmes graves tel que la perte d'un disque.
L'ensemble de ces notions sont à la base des systèmes d'information actuels.
Les technologies supportant ces notions (en particulier les SGBDR) forment
l'aboutissement des recherches des 30 dernières années. Des systèmes comme
Oracle offrent désormais des performances intéressantes y compris sur de
grosses bases de données. Ces performances ont été obtenues sans faire de
compromis sur les concepts théoriques sur lesquels ils se basent (modèle
relationnel). Ces systèmes servent donc tout naturellement de base aux
futurs systèmes d'information utilisant les nouvelles technologies Internet.
L'architecture client-serveur possède toutefois des inconvénients. Ce sont ces
inconvénients qui poussent les entreprises à utiliser d'autres technologies.
Les deux inconvénients principaux sont la difficulté à gérer correctement les
questions de sécurité et le coût du déploiement.
La sécurité d'un système en architecture client-serveur est gérée au niveau
du SGBDR. Celui-ci contrôle l'accès aux données en attribuant des autorisations
d'accès aux différents utilisateurs du système. Le problème vient du fait
que cette attribution de droit ne peut pas tenir compte des spécificités
du logiciel réalisé. Pour pouvoir gérer les droits d'accès de cette façon
il faut accorder à chaque utilisateur des droits sur un grand nombre de tables,
ce qui devient vite laborieux. En pratique il est souvent plus rapide de ne
créer qu'un utilisateur sur le SGBDR avec lequel tous les utilisateurs se
connectent. Cette approche ne permet aucune gestion de la sécurité. Il suffit
de connaître le login et le mot de passe d'accès à la base pour accéder à
l'ensemble des données sans aucune restriction.
L'autre problème est souvent considéré comme beaucoup plus important
par les entreprises car il est beaucoup plus visible. Il s'agit des
durées et coûts de déploiement des logiciels. En effet un logiciel classique,
développé en architecture client-serveur, nécessite une installation et
une éventuelle configuration sur chaque poste utilisateur. Le déplacement
d'un technicien coûte déjà très cher aux entreprises. Mais ce qui reste le
plus laborieux est la nécessité de mettre à jour régulièrement le logiciel.
Dans une architecture client-serveur, chaque mise à jour du logiciel nécessite
un nouveau déploiement accompagné de nombreux coûts.
Le principe d'une architecture trois-tiers est relativement simple:
il consiste à séparer la réalisation des trois parties vues précédemment
(stockage des données, logique applicative, présentation).
Nous avons déjà pu entrevoir la possibilité de séparer la conception de ces
trois subdivisions, ici il s'agit de séparer leur implantation.
Tout comme dans le client-serveur cette séparation signifie qu'il est
possible de déployer chaque partie sur un serveur indépendant, toutefois cela
n'est pas obligatoire.
La mise en place de ce type d'architecture permet dans tous les cas une
plus grande évolutivité du système. Il est ainsi possible de commencer par
déployer les deux serveurs sur la même machine, puis de déplacer le serveur
applicatif sur une autre machine lorsque la charge devient excessive.
Les éléments permettant la réalisation classique d'un système en architecture
trois tiers sont les suivants:
- système de base de donnée relationnel (SGBDR) pour le stockage des données
- serveur applicatif pour la logique applicative
- navigateur web pour la présentation
Il est important de remarquer que l'essentiel du travail de développement sera
implanté au niveau du serveur applicatif. Le SGBDR nécessitera un travail
d'administration surtout dans le cas d'une quantité de données importante.
Le travail de conception de la base de donnée sera la pierre angulaire du système.
En effet l'ensemble du développement s'appuiera sur cette conception.
Le navigateur web nécessitera la programmation de code spécifique permettant
de gérer l'affichage par ce navigateur. Ce code sera placé sur le serveur
applicatif pour permettre une mise à jour sans nécessiter de nouveaux déploiements.
Cette architecture se développe actuellement au sein des entreprises grâce aux
nombreux avantages qu'elle présente.
Malgré la différence évidente entre une architecture trois tiers et un système
client-serveur (l'apparition d'un serveur pour la logique applicative), le système
reste basé sur les technologies éprouvées détaillées précédemment (aspect relationnel
et transaction). La logique applicative est déplacée au niveau du serveur d'application
mais reste programmée à l'aide des mêmes technologies liées aux bases de données
relationnelles. En particulier l'utilisation du langage SQL reste jusqu'à présent
la solution la plus intéressante au niveau de la qualité logicielle. Elle présente
à la fois une grande fiabilité, une bonne disponibilité, une excellente évolutivité,...
Toutefois il faut prendre en compte deux facteurs importants: d'une part le choix
du SGBDR (ils n'ont pas tous les même qualités), d'autre part la qualité des
programmes utilisant la base de données (aussi bien au niveau de la conception
que de la programmation).
L'avantage principal d'une architecture multi-tiers est la facilité de déploiement.
L'application en elle même n'est déployée que sur la partie serveur (serveur applicatif
et serveur de base de données). Le client ne nécessite qu'une installation et une
configuration minime. En effet il suffit d'installer un navigateur web compatible
avec l'appication pour que le client puisse accéder à l'application, ce navigateur
étant par ailleurs souvent installé par défaut sur toutes les machines. Cette
facilité de déploiement aura pour conséquence non seulement de réduire le coût de
déploiement mais aussi de permettre une évolution régulière du système. Cette évolution
ne nécessitera que la mise à jour de l'application sur le serveur applicatif. Ceci
est très important car cette évolutivité est un des problèmes majeurs
de l'informatique.
Le troisième avantage est l'amélioration de la sécurité. Dans un système client-serveur
tous les clients accédaient à la base de donnnées ce qui la rendait vulnérable.
Avec une architecture multi-tiers l'accès à la base n'est effectué que par le serveur
applicatif. Ce serveur est le seul à connaitre la façon de se connecter à cette
base. Il ne partage aucune des informations permettant l'accès aux données, en particulier
le login et le password de la base. Il est alors possible de gérer la sécurité au niveau
de ce serveur applicatif, par exemple en maintenant la liste des utilisateurs avec leurs
mots de passe ainsi que leurs droits d'accès aux fonctions du système. On peut même
améliorer encore la sécurité par la mise en place d'une architecture réseau interdisant
totalement l'accès au serveur de base de données pour les utilisateurs finaux.
La mise en place de firewall correctement configuré permettra ceci.
Dans le cas de la mise en place d'un workflow au sein de l'entreprise Kallisto,
l'avantage le plus intéressant est sans aucun doute l'évolutivité du système.
En effet les besoins actuels sont relativement vastes, toutefois la réalisation
totale semble relativement longue et difficile à réaliser d'un seul coup. De plus
des problèmes risquent de nécessiter une mise à jour répétée du système.
Un autre aspect intéressant est la possibilité d'utiliser le système en Extranet,
ce qui chez Kallisto permettra de faciliter la communication entre le
siège social situé à Lyon et l'agence de Paris.
Nous avons vu ce qu'était une architecture trois-tiers, une architecture multi-tiers
va plus loin dans le découpage de l'application sur différents serveurs. Une architecture
multi-tiers est également appelé architecture distribuée du fait de la distribution des
traitements et des données sur différents serveurs.
Le découpage de base du système
reste toujours le même: une partie gestion de données, une partie gestion de la logique
applicative et bien entendu le client assurant la présentation. Toutefois les deux parties
développées coté serveur vont pouvoir être déployées chacune sur plusieurs serveurs.
L'objectif général de ce type d'architecture est de permettre l'évolutivité du système
sous plusieurs aspects: la quantité de données stockée, la disponibilité du serveur, le
nombre d'utilisateurs,...
Il faut également bien comprendre qu'un système conçu en architecture multi-tiers n'est pas forcément
déployé sur plusieurs machines dès le départ. Toutefois son mode de programmation doit
permettre de modifier le déploiement du système en cours d'exploitation par un administrateur.
Le développeur doit donc rendre le système indépendant du serveur sur lequel il s'éxécute.
Il existe deux types de répartition possibles dans une architecture distribuée. Il est
possible de répartir les données et de répartir la logique applicative. Chacune de ces
deux répartitions permet de résoudre des problèmes de natures différentes. Elles peuvent
donc être mises en place soit séparément soit en parallèle sur le même système.
Il s'agit d'utiliser plusieurs sources de données dans une même application. Chaque source
possède sa propre structure de données. Chaque serveur de données peut être géré de façon
très différente. Toutefois une interface de programmation commune à toutes les sources
doit pouvoir exister. Il peut exister des relations entre les données des différents
serveurs, il sera alors nécessaire de gérer des transactions distribuées entre des différents
serveurs de données. Cette répartition de données correspond à la notion de base de données
distribués.
Les bases de données distribuées permettent de résoudre deux types de problèmes.
La première est la performance du système: la répartition des données permet d'augmenter
la disponibilité des données. Toutefois il est nécessaire de bien penser cette répartition
afin de ne pas démultiplier le nombre de transactions distribuées nécessaires. Ceci aurrait
pour effet de diminuer la performance plus que de l'augmenter.
Le deuxième type de problèmes est la réutilisation des systèmes éxistants. En effet de
nombreux systèmes informatiques stockent actuellement une grande quantité de données.
Toutefois ces systèmes ne sont pas toujours bien coordonnés entre eux. Ceci risque d'entraîner
des redondances dans les données et des incohérences entre plusieurs sources de données.
L'objectif est donc de réutiliser ces systèmes dans une même application afin de restructurer
le système d'information sans pour autant repartir de zéro (ce qui est non seulement un non
sens mais est aussi impossible). Les systèmes réutilisés sont bien souvent hétéroclites
(mainframe, SGBDR,...) et nécessitent d'être réunis en utilisant diverses technologies
(moniteurs transactionnels, serveurs d'applications,...).
La répartition de la logique applicative permet de distribuer les traitements sur différentes
machines. Cette distribution est facilitée par l'utilisation de la programmation orientée
objet et plus particulièrement de ce qu'on appelle les composants. Un composant possède
entre autre la caractèristique d'être accessible à travers le réseau. Un composant peut
ainsi être instantié puis utilisé au travers du réseau. Il est également possible de
trouver un serveur permettant l'utilisation d'un composant, ce qui permet une forte
évolutivité ainsi qu'une résistance aux pannes importantes (le service sera toujours
disponible sur un serveur même si une machine tombe en panne).
La réalisation de ce type de répartition nécessite l'utilisation de technologies
spécifiques. D'une part il faut permettre la communication entre les différents éléments de
l'application (RMI), d'autre part le déploiement et l'évolution du sytème doivent pouvoir
être assurés (JNDI + fichiers XML). Certaines technologies proposent une architecture
cohérente pour la mise en place des différentes technologies intervenant sur un système
distribué (EJB).
Les buts recherchés lors de la mise en place de ce type d'architecture sont la performance,
l'évolutivité, la maintenabilité...
suivant: Réalisation technique de l'architecture
monter: Intranet en architecture trois-tiers
précédent: Intranet en architecture trois-tiers
  Table des matières
cedric Babault
2002-01-20