Calendrier

« janvier 2006 »
lunmarmerjeuvensamdim
1
2345678
9101112131415
16171819202122
23242526272829
3031

l'actualité du web, des technologies et aussi quelques bons tutoriaux ;-)

Comment ça marche : la haute disponibilité web

Pour gérer des milliers ou des millions d'utilisateurs, un site web se doit de mettre en place un certain nombre de technologies afin que les visites des utilisateurs soient garanties et agréables. En termes techniques, on parle de redondance et de répartition de charge (load balancing en anglais). L'association de ces deux paramètres permet d'atteindre ce qu'on appelle la haute disponibilité : en gros un service qui ne peut pas tomber en panne et qui peut facilement monter en charge.

Vous vous en doutez, aucun serveur n'est assez puissant pour gérer un gros site web, et, de toute façon, il pourrait tomber en panne.

Alors, comment font les éditeurs de sites web ?

Pour obtenir la redondance, les serveurs sont répliqués, c'est à dire qu'il coexiste plusieurs serveurs, au contenu identique. Ainsi, en cas de panne d'une machine, les autres assument la charge supplémentaire le temps de la réparation

Pour ce qui est de la charge, le principe est simple : le load balancer (qui peut être un serveur ou un dispositif hardware dédié) envoie toute requête entrante au serveur le plus disponible. Si tous les serveurs saturent, la solution est simple : on ajoute une machine.

Il y a des dizaines de configurations possibles, mais nous allons prendre un exemple assez commun, qui démontre bien la mise en oeuvre de ces principes à tous les niveaux de l'architecture d'un service web haute disponibilité sous linux.


Architecture web haute disponibilité

Premier niveau : l'arrivée des requêtes sur la tête de plateforme

Quand votre requête ("je veux telle page web") arrive sur l'architecture, elle passe d'abord par un firewall. Ce dernier vérifie qu'elle est bien autorisée par l'architecture. En gros, c'est la même chose que votre pare-feu Windows. Sous Linux, le programme chargé de ce travail se nomme IP Tables (anciennement IP Chains).

Ensuite, si la requête est autorisée, elle est passée au load balancer (LVS soit Linux Virtual Server) qui décide quel serveur va répondre (en principe le moins chargé, mais de nombreux réglages sont possibles). Le load balancer envoie la requête au serveur web. A votre niveau c'est transparent : vous n'avez aucun moyen de connaître la machine qui va vous répondre.

A ce niveau, les deux serveurs sont redondés : ils ont un clone qui attend sagement, prêt à prendre le relais. Chaque serveur est relié à son clone via un petit logiciel (Heartbeat) qui pingue régulièrement le serveur en ligne pour s'assurer de sa disponibilité. A la moindre défaillance, le clone prend le relais et emet une alerte à l'administrateur pour intervention.

Deuxième niveau : le traitement des requêtes sur les serveurs frontaux

Votre requête arrive finalement sur le serveur web (appellé "frontal", car c'est lui qui renvoie la page directement sur le web). Le serveur web (Apache en général sous Linux) exécute votre demande : il exécute le code php, interroge la base de donnée, insère les variables dans la mise en page HTML et vous renvoie le tout sous la forme d'une page statique.

D'ailleurs, la plupart des serveurs vous renvoient effectivement une page statique précalculée par un système de cache : les pages les plus fréquemment demandées sont stockées "en dur" (en html) et ne sont recalculées que périodiquement, soulageant ainsi le processeur des serveurs web et évitant l'accès à la base de donnée. Le recalcul de la page peut intervenir soit après un certain délai, soit après un certain nombre d'affichages. C'est notamment le cas pour les pages dont le contenu change peu fréquemment : pages de catalogue par exemple.

Dans notre exemple, ce sont également les serveurs frontaux qui vous renvoie les images associées à la page, mais le plus souvent celles-ci font l'objet d'un stockage séparé et partagé entre les frontaux. Ce stockage est effectué sur des périphériques dédiés (SAN) aux disques durs ultra-redondants (RAID 5). Il est également courant de faire appel à un CDN (Content Delivery Network). Ces réseaux (comme Akamai) disposent de milliers de serveurs répartis sur l'ensemble de la planète. En répartissant votre contenu statique (images, médias, html) sur leur réseaux, ils permettent de délivrer l'information au plus près de l'internaute, améliorant grandement les performances des sites à audience mondiale.

Troisième niveau : la base de données

La base de données pose un problème un peu différent. Il est très difficile de gérer des écritures et lectures sur plusieurs serveurs (sauf technologies de clustering, mais restons dans une architecture simple). En effet, une base de donnée qui doit se mettre à jour simultanément sur plusieurs serveurs pose des problèmes techniques hors du spectre de cet article. Mais comme la plupart des sites web ont un rapport lecture/écriture de l'ordre de 90/10, voire 95/5, une solution alternative très simple existe : l'architecture maître-esclave (aussi appellée replication).

Le principe est simple : un seul serveur (le maître) assure les opérations d'écriture (commandes SQL INSERT, UPDATE et DELETE), tandis que les esclaves assurent uniquement les opérations de lecture (commande SQL SELECT). La synchronisation entre le maître et les esclaves est quasi instantanée. Il est donc possible d'obtenir une information ancienne (avant la mise à jour par le maître) mais ce risque concerne un nombre très minime de requêtes et reste acceptable dans la plupart des cas.

La replication apporte également l'avantage de la redondance : en cas de défaillance du maître, il suffit d'activer les opérations d'écriture sur un esclave pour disposer d'un nouveau maître.

Bien d'autres dispositifs de sécurité existent au niveau hardware des serveurs eux-mêmes (double alimentation, redondance des disques en RAID, double cartes réseau...) et bien entendu du datacenter (sécurité incendie, alimentation electrique ondulée, générateurs de secours, connexions multi-opérateurs).

L'ensemble des ces dispositifs crée la haute-disponibilité, garante d'un accès permanent à vos sites web favoris.

Netvibes, le web passé à l'Ajax

On parle beaucoup du web 2.0 en ce moment. Mais pour beaucoup, ceci reste de l'ordre du concept...

Parmi les technologies à la mode, on trouve Ajax. Mais si vous tapez "Ajax" dans google, vous trouverez surtout des démos, certes impressionantes, mais dont on ne voit pas directement l'utilité au quotidien.

Mais c'est quoi Ajax ?

Il s'agit d'un ensemble de technologies associant :
  • HTML et CSS2 pour la présentation
  • Javascript pour la couche applicative côté client
  • PHP (ou autre) pour la couche applicative côté serveur
  • XML/XSLT pour la manipulation et l'échange des données
  • l'objet XMLHttpRequest pour les échanges asynchrones entre le serveur et l'application

L'association de ces éléments, tous standards, permet de développer des sites web très dynamiques et modulaires. En s'affranchissant du rafraîchissement page par page (mode asynchrone), les modules d'une page sont mis à jour indépendamment, produisant des interfaces riches proches d'un vrai logiciel, fonctionnant dans tous les navigateurs.

Mais cette description idyllique se heurte dans les faits à quelques problèmes :
  • une standardisation théorique qui n'existe pas dans la réalité : il est nécessaire de tester l'application sur tous les navigateurs et d'adapter son code en fonction de ceux ci. Une obligation qui nous ramène plutôt à ce qu'était le web il y a 3 ans, avec les pages alternatives pour Netscape et Internet Explorer.

  • une publication intégrale du code client sous forme de fichiers JS facilement copiables. Cette tendance est certes dans la tendance GNU, mais ne ravira pas l'éditeur d'un service dans un milieu concurrentiel. Des solutions d'exécution de ce code côté serveur existent, notamment en Java ou Python, mais elles se heurtent à la problématique évoquée dans le point suivant.

  • une absence de framework applicatif : dans ce mix technologique qu'est Ajax, il n'existe pas de vraies conventions de développement. Les technologies utilisées se recroisent en de nombreux points et les choix de développements sont infinis. Difficile de savoir à l'avance quel sera l'architecture la plus rapide ou la plus facilement maintenable.

Cependant, les projets avancent et parmi ceux-ci Netvibes est une initiative particulièrement enthousiasmante.

Ce projet remet au goût du jour le fantasme des années 2000 : le portail personnalisable. Partant du principe qu'à l'avenir l'information piochée sur le web serait constitué de flux (les fils RSS sont là pour le démontrer), Netvibes propose à chaque internaute de se composer sa propre page d'accueil.

Composée de modules divers (Météo, Compte Gmail, Fils RSS), la page web se transforme en grand dash board où les modules sont comme des widgets, un peu à la manière de Mac OS X Tiger (en plus sobre).







Les widgets peuvent se déplacer, se réduire, se paramétrer... Toutes les préférences de l'utilisateurs sont sauvegardées, et en vous reconnectant vous retrouvez votre dashboard comme vous l'aviez laissé. Magique !


Un widget en mode Edition - Réglage des préférences

Certains widgets laissent entrevoir la puissance de l'outil : interrogation de comptes mail pop, surveillance de prix sur Kelkoo...

A l'usage, Netvibes se révèle très agréable, même s'il est encore perfectible. Et sa structure modulaire lui garantit un avenir très riche : le succès des widgets pour Mac Os est là pour en donner un apercu.

L'analyse rapide du code javascript donne une idée du travail accompli pour un applicatif relativement simple et dépouillé : Ajax et le web 2.0 sont à réserver à des développeurs plus qu'avertis...

En tout cas une chose est sûre, dans très peu de temps, notre perception du web et de son ergonomie vont radicalement changer.