Une architecture distribuée 3-tiers transactionnelle sous COM+
Patrick Smacchia 2002
1 Définitions
Architecture distribuée : Un logiciel est dit à ‘Architecture distribuée’ s’il est formé de
plusieurs unités exécutables (appelés aussi composants) (.exe .dll sous NT) qui peuvent
éventuellement être exécutées sur plusieurs machines en communiquant entre elles.
3-tiers : Une architecture distribuée est dite ‘3-tiers’ si elle est constituée des trois composants
suivant :
L’interface utilisateur est utilisée pour manipuler des données. En général plusieurs
instances de ce composant tournent sur plusieurs machines différentes pour
permettre à plusieurs utilisateurs de travailler en même temps. Ce composant peut,
par exemple, se présenter sous la forme d’une page web (ASP) ou d’un exécutable
ou sous d’autres formes.
Le serveur est utilisé pour :
o fournir les données aux utilisateurs
o enregistrer les modifications sur les données faites par les utilisateurs
o faire des opérations sur les données (business rule en anglais)
o garantir l’intégrité des données (peux être aussi gérer entièrement ou
partiellement par la base donnée)
o gérer la sécurité pour l’accès aux données (peux être aussi gérer
entièrement ou partiellement par la base donnée)
Plusieurs instances du composant serveur peuvent éventuellement être exécutées sur
plusieurs machines en même temps, pour répartir la charge de calcul sur plusieurs
machines. Dans ce cas il y a un composant entre l’interface utilisateur et le serveur
pour répartir les appels des utilisateurs sur les machines. On appelle cette étape le
‘load balancing’ (balance la plus équitable possible entre les machines pour répartir
la charge).
La propriété centrale d’un serveur et sa ‘scalabilité’ (traduction non officielle du
mot anglais scalable). On dit d’une application qu’elle est scalable, si, lorsque vous
ajoutez du hardware pour l’exécuter (processeur, RAM, PCs etc) vous obtenez un
gain de performance commensurable à la quantité de hardware ajoutée. En pratique,
on observe que l’ajout de hardware pour exécuter une application ne provoque pas
forcément un gain de performance. En effet, de nombreux goulets d’étranglement
subsistent toujours à différents niveaux (locking des données, middleware…). Seule
l’architecture de l’application peut minimiser les effets néfastes de ces goulets
d’étranglement.
La base de données est utilisée pour stocker les données. En général ce composant
est codé par une autre entreprise (SQL server/Microsoft, Oracle…). En effet
beaucoup de services sont requis pour manipuler efficacement et de manière sure des
données (transaction, sécurité, réplication, répartition du stockage sur plusieurs
disque durs, support du langage SQL, changement de version…). Néanmoins il
arrive que la base de données soit propriétaire pour des raisons de performance ou
de compatibilité ascendante.
On appelle aussi ce type d’architecture une architecture client/serveur. Dans ce cas le
serveur représente l’amalgame serveur/base de données.
transactionnelle : Une succession d’opérations sur des données est dite ‘transactionnelle’, si à
la fin de ces modifications tous les changement sont validés (commit), ou aucun des
changement n’est validé (roll back). En général, le milieu transactionnel n’a (heureusement)
pas à être codé. Le développeur utilise une API d’un milieu transactionnel existant
(ADO/MTS/COM+ chez Microsoft…). La théorie nous dit que quatre propriétés doivent être
supportées par un milieu transactionnel (les propriétés ACID) :
Atomicity : Toutes les actions s’effectuent ou aucune.
Consistency : Aucune action ne viole aucune loi d’intégrité des données.
Isolation : Les transactions s’effectuent d’une manière isolée.
Durable : Les résultats sont stockés de manière permanente.
On remarque qu’une transaction peut s’effectuer sur plusieurs serveurs, et sur plusieurs bases
de données différentes. (Exemple : Débit d’un compte de la banque X pour créditer un compte
de la banque Y). Toutes ces contraintes font que la théorie des transactions distribuées est très
compliquée.