Google Chercher dans diml.org
[ english ]

 Dernières infos
 Une application du composant  WCT_NEWS  
>> Haut de la page

Troisième exemple de structure conditionnelle : une fabrication de miroirs de ressources

Le DIML est un outil de productivité dont l'utilité reste identique quelque soit la taille du volume à gérer. Dans les sites importants, ou à forte fréquentation, une stratégie de miroir est parfois indispensable pour répartir le poids de traitement sur plusieurs serveurs. Ceci peut être fait de plusieurs manières :

  • Un routeur/répartiteur de charge est placé en entrée de réseau et répartit les connexions entre plusieurs machines appelées "clusters", d'une manière transparente pour les clients. Une même requête peut alors être traitée par plusieurs machines physiques. Ce modèle nécessite cependant une architecture particulière pour consolider les données entre ces clusters, surtout lorsque le site s'appuie sur un modèle de données dynamique (par exemple un utilisateur qui se connecte deux fois ne doit pas voir ses données diverger, même si deux machines différentes traitent ses deux connections). La répartition est alors dite "matérielle".
  • Le même type de fonctionnement, le routeur étant remplacé par un organe logiciel (en général un proxy), on parle alors de répartition "logicielle".
  • Le contenu lui-même dispose d'un mécanisme interne permetant de choisir l'origine des ressources pour un client donné. Cet exemple obéit à ce cas de figure.

Principe

Le but est de montrer comment le DIML permet assez simplement de créer des miroirs de ressources (dans ce cas des ressources graphiques). Cette pratique a été expérimentée avec succès dans des extranets dont les différents réseaux locaux participants n'étaient reliés que par liaisons bas-débit. La question était : "Est-il possible de fabriquer un extranet à fort contenu sans que les utilisateurs en subissent les conséquences sur la lenteur ?".

Réalisation

L'exemple qui suit propose de modifier l'origine des ressources graphiques en fonction de l'origine des clients.

<TEMPLATE ID="IMAGES_ROOT_URL" INLINE>
   <%if(%ENV::REMOTE_ADDR% =~ /^145.234.312/)%>http://miror1.foo.com/images/<%
   elsif (%ENV::REMOTE_ADDR% =~ /^199.223.312.4/)%>http://miror2.foo.com/images/<%
   elsif (%ENV::REMOTE_ADDR% eq /199.223.312.423/)%>file://D:/local_mirror/images/<%
   else %>http://www.foo.com/images/<%endif %>
</TEMPLATE>

Note : Il est important de bien observer l'absence d'espaces ou de toute entrée pouvant en introduire dans l'évaluation des préfixes d'adresse.

Ce morceau de code, placé dans le fichier globals.dim de variables globales d'un site permet de router les requêtes de ressources graphiques vers :

  • miror1 pour la plage d'adresses 145.234.312.*,
  • miror2 pour la plage d'adresses 199.223.312.4*,
  • un miroir local D:/local_mirror sur la station de l'utilisateur 199.223.312.423 (celui-ci aura téléchargé les ressources graphiques sur son propre poste de travail, constituant ainsi un cache permanent),
  • le volume d'image "par défaut" pour les autres utilisateurs.

Note : cet exemple utilise le fait que la version Perl du moteur ESSI admet une expression Perl comme condition, permettant d'employer l'opérateur d'expression régulière =~. La version PHP du moteur autorise certaines formes simples de ce type.

précédent sommaire suivant


All material is copyleft V.G. FREMAUX (EISTI France) 1999 to 2003 except explicitly mentioned