Penser infrastructure web
Par Nicolas le mardi 5 mai 2009, 13:31 - Hébergement - Lien permanent
Notre réponse est souvent la même, nous leur conseillons alors de penser infrastructure web plutôt que serveur web.
En effet, notre solution vous permet de créer autant de serveurs que vous le souhaitez sur les ressources souscrites dans votre compte hébergement, la solution optimale consiste donc à séparer vos services pour une plus grande flexibilité et une plus grande robustesse.
Mais le plus simple est de prendre un exemple concret : comme certains le savent déjà, nous soutenons l'association Millenium pour la promotion des jeux et loisirs numériques en ligne.
Le succès grandissant du site millenium.org nous poussait à rapidement repenser l'architecture du site pour tenir la charge (de nombreuses vidéos, 17 000 visiteurs uniques/jours). Pour ne rien vous cacher, nous avons quelques priorités et projets Gandi à régler avant de nous occuper du site.
Suite à une importante mise à jour d'un des jeux suivis par Millenium (NDLR: WOW patch 3.1), et même si nous avions anticipé une charge importante en passant le serveur sur 16 parts, celle-ci a vite dépassé nos estimations avec plus de 50 000 visiteurs uniques le premier jour et surtout presque autant les jours suivants.
Le site recevait alors entre 500 et 1000 visiteurs en simultané, ce qui n'est pas viable pour un serveur unique de type LAMP avec, de plus, de très nombreuses vidéos. Nous avons donc changé l'infrastructure immédiatement, pour passer d'un modèle sur un serveur unique (qui est souvent le choix au démarrage) à un modèle en infrastructure. Nous sommes passés d'une extension verticale (plus de puissance) vers une extension horizontale (plus de serveurs) :
Comme le montre ce schéma, nous avons donc sorti la base de données sur un serveur à part et dupliqué le serveur web sur 2 machines, la répartition de charge se faisant via la zone DNS du domaine. Nous pouvions aussi envisager de dédier un serveur d'une part à la répartition de charge, mais cette solution était un peu plus longue à mettre en place. Dans notre cas, il a fallu 2 minutes pour ajouter des parts sur le compte, 6 minutes pour créer les 2 serveurs, 10 minutes pour transférer les données et 2 heures environ pour configurer les services.
Aujourd'hui, la plateforme tient 1 million de visiteurs uniques par mois pour plus de 3 millions de pages vues, ce qui est une bonne chose. Mais le mieux c'est que maintenant la plateforme est évolutive. Si la base de données souffre, il nous suffira d'augmenter le nombre de parts allouées au serveur, et si les frontaux web arrivent à saturation, il nous suffira d'en ajouter un.
Si vous vous trouvez confronté à ce genre de problématique, n'hésitez pas à nous consulter, nous nous ferons un plaisir de vous conseiller.













Commentaires
La "répartition de charge se faisant via la zone DNS du domaine". Peut on avoir plus d'infos la dessus? Comment fait on ça?
@spirit : +1
La répartition de charge via la zone DNS du domaine m'intéresse fortement !
En faite c'est simple, on place juste plusieurs entrée A pour un même nom dans le DNS avec un TTL court :
www 300 IN A 88.0.0.1
www 300 IN A 88.0.0.2
Voila maintenant quasiment à chaque demande le client vas faire une nouvelle requette DNS pour avoir l'adresse du serveur.
Voila comment faire du load balancing pas chère.
OK merci.
Le probleme de ça c'est que si l'un de tes serveurs est down alors le client peut etre redirigé pendant 300 secondes toujours sur le mauvais, non?
De plus comment tu t'en sors pour les données sessions? base de données, memcache,... ?
Ha ben je l'ai dit c'est du load chip, donc y'a des failles :)
bonjour, et en ce qui concerne les bandes passantes des serveurs lorsqu'ils communiquent entre eux (web -> mysql) est elle comptabilisé dans le quota des serveurs et si oui se cumule t elle avec celle utilisé par les visiteurs ?
bien à vous
Amba
Etant fortement intéressé par ce type d'archi, je rejoins le commentaire #6. Est il possible d'utiliser des IP internes où les routeurs s'occupent t-ils de tout ça et on peut garder les IP en 92.x pour les connexions entre serveurs ?
Bonjour,
Intéressé par cette méthode, je me demandais de quelle manière étaient synchronisés les deux serveurs Web.
À savoir : faut il lancer une simple tâche cron régulièrement avec l'outil RSYNC ? Ou bien une autre méthode est bien meilleure ? Et si meilleure, en quoi ?
"n'hésitez pas à nous consulter, nous nous ferons un plaisir de vous conseiller. "
pourtant les questions restent sans réponses ici... dommage car très intéressant...
Bonjour,
Oui, on est un peu "en retard" sur le suivi de notre blog, beaucoup de travail en parallèle :)
Pour les IP internes, c'est en cours de dév, ça viendra avec les outils qui vont bien.
Pour synchroniser le contenu sur des "frontaux web", ..
Le partage (type NFS) est extrêmement pratique pour déployer mais fait un point de contention potentiel, et un "SPOF".
Le packaging + déploiement nécessite.. un déploiement parfois long. Mais chaque frontal indépendant participe alors au travail (I/O compris).
Pour éviter ça, pourquoi pas une mise à jour des frontaux à leur initiative depuis un serveur central ? Par exemple avec svn (en faisant attention à ne pas exporter d'infos sensibles).
Une bête crontab fait sûrement l'affaire, il faut juste se méfier des problèmes "classiques", type avalanches de cron lockés par un serveur qui ne répond plus, ou mises à jour partielles, en écrivant un script "safe".
Bonjour,
Trés intéressant votre article. je suis entrain de mettre en place cette infrastructure chez gandi, cependant je souhaite utiliser 2 frontaux en HA pour répartir la charge sur 2 serveurs web.
Cependant je rencontre une difficulté pour l' IP virtuel qui regroupe les 2 ip réels des frontaux. J'ai acheté une ip en option et j'ai suivi ce tutoriel :
http://www.howtoforge.com/high_avai...
L'ip virtuel ne semble pas être visible (elle n'est rattachée à aucun serveur dans l'interface des ressources gandi).
Pouvez-vous m'aider ?
Les 2 serveurs frontaux sont sous debian5 avec les modules IPVS de gandi du noyau 2.6.27-gandi-2777.
Merci beaucoup.