OVH Cloud OVH Cloud

Hébergement mutualisé: comment font les FAI ?

12 réponses
Avatar
olivier.lecam
Bonjour,

Je me pose des questions sur le fonctionnement des plateformes d'héberment
mutualisés Apache/PHP/MySQL chez de gros prestataires.

Un schéma classique semble être :
- plusieurs serveurs web en frontal (en round robin DNS)
- un serveur ftp (unique ?) pour l'ensemble de ces serveurs
- dans les scripts PHP, on attaque les serveurs MySQL sur « localhost » ...

Quel mécanisme permet aux différents serveurs web de servir les même sites
(éventuellement avec des sessions stockées côté serveur) de façon
transparente ? Je veux dire : lorsqu'on uploade un fichier par ftp, il est
immédiatement disponible sur tous les serveurs web frontaux ... Un
mega-serveur NFS ? Mais quel est l'intérêt, dans ce cas, de multiplier le
nombre de frontaux ?

Y a t-il vraiment un serveur mysql (avec réplication) sur chacun des
serveurs web ?

Tout eclaircissement sera le bienvenu. D'avance, merci.
--
Olivier Le Cam

10 réponses

1 2
Avatar
Tom
Olivier Le Cam wrote:
Bonjour,

Je me pose des questions sur le fonctionnement des plateformes d'héberment
mutualisés Apache/PHP/MySQL chez de gros prestataires.

Un schéma classique semble être :
- plusieurs serveurs web en frontal (en round robin DNS)
Un *vrai* load-balacing c'est de l'Altéon (appliance rezo) ou du fait

maison avec LVS. Le roundrobbin c'est la solution simple et qui ne tient
pas compte de la charge des serveurs (nbre de connexions).

- un serveur ftp (unique ?) pour l'ensemble de ces serveurs
Ouais pourquoi pas.


- dans les scripts PHP, on attaque les serveurs MySQL sur « localhost » ...
Non, il préférable d'avoir des serveurs SQL dédiés dans le backend mais

c possible.

Quel mécanisme permet aux différents serveurs web de servir les même sites
(éventuellement avec des sessions stockées côté serveur) de façon
transparente ? Je veux dire : lorsqu'on uploade un fichier par ftp, il est
immédiatement disponible sur tous les serveurs web frontaux ... Un
mega-serveur NFS ? Mais quel est l'intérêt, dans ce cas, de multiplier le
nombre de frontaux ?


Le serveur NFS stocke toutes les données envoyées par le FTP. A partir
de la les N frontaux Webs viennent chercher les données pour les publier
sur le Net. Pourquoi N frontaux (PHP) parce que le PHP ca consomme du
CPU et qu'il faut plusieurs machines pour servir les X millions de pages
des clients (aussi mal codées qu'elles soient ;). Le fait de mettre
plusieurs frontaux Web permet donc de supporter la charge. Si un jour tu
sens ta plate-forme chargée, tu rajoutes Y serveurs pour aider les N
serveurs en place (en n'oubliant pas de les rajouter dans le
load-balancing). Cela s'appelle l'échelonnabilité (scalabily).
Tu te doutes que le NFS est le nerf de la guerre, la clé de voute du
système puisque c'est lui qui concentre les données.

Y a t-il vraiment un serveur mysql (avec réplication) sur chacun des
serveurs web ?
Oui/non, tout dépend de la tolérance de panne qu'accepte l'hébergeur.

L'idéal est toujours d'avoir un spare pour reprendre la main derriere en
HA (High-Availibity). En gros si le master, tombe le slave reprend.

Liens:
-----
Load balancing = http://www.linuxvirtualserver.org/
H.A = http://www.linux-ha.org/
Ps: qq part sur le site de nexen.net, damien seguy publie des slides
détaillant un peu le fonctionnement de l'hebergement PHP/mysql de
nexen.net. Voir peut etre conference php paris de cette année pour
retrouver la news

Tout eclaircissement sera le bienvenu. D'avance, merci.
Voila.


A+
Tom

Avatar
Xavier Henner
Quel mécanisme permet aux différents serveurs web de servir les même sites
(éventuellement avec des sessions stockées côté serveur) de façon
transparente ? Je veux dire : lorsqu'on uploade un fichier par ftp, il est
immédiatement disponible sur tous les serveurs web frontaux ... Un
mega-serveur NFS ? Mais quel est l'intérêt, dans ce cas, de multiplier le
nombre de frontaux ?

d'une part, le serveur NFS est généralement un truc dédié a ca donc qui

supporte plus de charge qu'un serveur web et est facilement extensible.
(et qui a des fonctions de réplication ou de haute disponibilité)

pour le très haut de gamme, on peut meme utiliser un SAN.

en suite, on peut utiliser plusieurs serveurs NFS avec les frontaux qui
accèdent aux différentes partitions.

pour les session, PHP utilise des fichiers. Il suffit donc que le
dossier des fichiers de session soit sur un des serveurs NFS.





--
Xavier Henner

Avatar
Tom
Re,

en suite, on peut utiliser plusieurs serveurs NFS avec les frontaux qui
accèdent aux différentes partitions.
Comment tu fais pour garder les X serveurs NFS synchro entre eux ?

Ou bien tu parlais de serveurs NFS exportant des données différentes ?

pour les session, PHP utilise des fichiers. Il suffit donc que le
dossier des fichiers de session soit sur un des serveurs NFS.
Sinon il y a Msession (cherche sur php.net ou google, le site web c qq

chose comme mohawak ou je sais plus quoi - j'ai la flemme de rechercher
;) Cela dit les fichiers sessions sur NFS est une bonne solution sauf si
pas de bol (faut vraiment avoir la malche mais bon). Une session générée
par un seveur X avec un nom temporaire est créée puis un serveur Z créé
une autre session avec un nom temporaire identique. C'est pas de bol
mais ca pourrait arriver ? Non ? (faut voir comment est générer le nom
mais surement un mix PID+time).

A+
Tom

Avatar
Yohan
Xavier Henner wrote:
Quel mécanisme permet aux différents serveurs web de servir les même sites
(éventuellement avec des sessions stockées côté serveur) de façon
transparente ? Je veux dire : lorsqu'on uploade un fichier par ftp, il est
immédiatement disponible sur tous les serveurs web frontaux ... Un
mega-serveur NFS ? Mais quel est l'intérêt, dans ce cas, de multiplier le
nombre de frontaux ?



d'une part, le serveur NFS est généralement un truc dédié a ca donc qui
supporte plus de charge qu'un serveur web et est facilement extensible.
(et qui a des fonctions de réplication ou de haute disponibilité)

pour le très haut de gamme, on peut meme utiliser un SAN.

en suite, on peut utiliser plusieurs serveurs NFS avec les frontaux qui
accèdent aux différentes partitions.

pour les session, PHP utilise des fichiers. Il suffit donc que le
dossier des fichiers de session soit sur un des serveurs NFS.


A noter qu'il y a un petit probleme la dessus, juste a ce niveau la.
Le client NFS ne cache pas les données, mais cache l'arborescence des
repertoires et les stat() sur les fichiers..
En gros si on se base sur ce modele, une session est faire sur le
frontal A, il faudrai attendre le timeout du cache nfs ( par defaut il
est de quelques secondes ) pour que la dite session soit visible sur le
frontab B...

Ce qui est super embettant lorsqu'on fonctionne en "grappes" plugguées
sur un serveur NFS derriere un load balancer....


Avatar
Patrick
Olivier Le Cam wrote:
Bonjour,

Je me pose des questions sur le fonctionnement des plateformes d'héberment
mutualisés Apache/PHP/MySQL chez de gros prestataires.

Un schéma classique semble être :
- plusieurs serveurs web en frontal (en round robin DNS)


Le round robin dns ne prend pas en compte la charge des serveurs qui
sont derrières. D'autres solutions sont possibles (codées hard ou soft).

- un serveur ftp (unique ?) pour l'ensemble de ces serveurs


Il me semble qu'à l'époque où je bossais chez Tiscali, les serveurs ftp
étaient patchés pour aiguiller sur une machine ou une autre... Mais ce
sont des souvenirs flous.

--
Patrick

Avatar
olivier.lecam
Tom écrivait :

Merci à tous pour les réponses, et en particulier à Tom.

Y a t-il vraiment un serveur mysql (avec réplication) sur chacun des
serveurs web ?
Oui/non, tout dépend de la tolérance de panne qu'accepte l'hébergeur.

L'idéal est toujours d'avoir un spare pour reprendre la main derriere en
HA (High-Availibity). En gros si le master, tombe le slave reprend.


Mais quand on « attaque » un serveur mysql en spécifiant « localhost »
dans le script PHP, cela signifie-t-il que ledit serveur tourne réellement
sur la machine qui éxécute le PHP ou y a-t-il une astuce pour le faire
tourner ailleurs ?

PS : au fait, ou est ce que l'on apprend tout cela ? Existe-t-il des
stages, des cours du soir, ... ? Je n'ai jamais vraiment trouvé de bouquin
sur le sujet, par exemple ...

--
Olivier Le Cam


Avatar
Yohan
Olivier Le Cam wrote:
Tom écrivait :

Merci à tous pour les réponses, et en particulier à Tom.


Y a t-il vraiment un serveur mysql (avec réplication) sur chacun des
serveurs web ?


Oui/non, tout dépend de la tolérance de panne qu'accepte l'hébergeur.
L'idéal est toujours d'avoir un spare pour reprendre la main derriere en
HA (High-Availibity). En gros si le master, tombe le slave reprend.



Mais quand on « attaque » un serveur mysql en spécifiant « localhost »
dans le script PHP, cela signifie-t-il que ledit serveur tourne réellement
sur la machine qui éxécute le PHP ou y a-t-il une astuce pour le faire
tourner ailleurs ?

PS : au fait, ou est ce que l'on apprend tout cela ? Existe-t-il des
stages, des cours du soir, ... ? Je n'ai jamais vraiment trouvé de bouquin
sur le sujet, par exemple ...



Dommage si tu etais blonde, peut etre que j'aurai donné des cours du
soir !! :-D



Avatar
Xavier Henner
Re,

en suite, on peut utiliser plusieurs serveurs NFS avec les frontaux qui
accèdent aux différentes partitions.
Comment tu fais pour garder les X serveurs NFS synchro entre eux ?

Ou bien tu parlais de serveurs NFS exportant des données différentes ?


oui par exemple on met tous les sites dont la premiere lettre du domaine
commence par une lettre entre a et m sur un serveur NFS et les autres sur
le 2e serveur.

ca fait 13 partitions sur chaque filer et on fait monter a chaque
frontal les 26 partitions

et apres, on laisse faire modvhost ou autre pour trouver les sites sur
le bon répertoire.

--
Xavier Henner


Avatar
Benjamin BAYART
Tom wrote:
;) Cela dit les fichiers sessions sur NFS est une bonne solution sauf si
pas de bol (faut vraiment avoir la malche mais bon). Une session générée
par un seveur X avec un nom temporaire est créée puis un serveur Z créé
une autre session avec un nom temporaire identique. C'est pas de bol
mais ca pourrait arriver ? Non ? (faut voir comment est générer le nom
mais surement un mix PID+time).


Dépend énormément du mode de fonctionnement de ton serveur NFS.
En s'y prenant bien:
- l'opération de création de fichier est atomique
- l'opération de renomage d'un fichier est atomique.

Du coup, la création de session ne fonctionnera que
pour le premier des deux serveurs qui le demandera.

Cordialement,

Benjamin.

Avatar
Xavier Henner
Tom écrivait :

Merci à tous pour les réponses, et en particulier à Tom.

Y a t-il vraiment un serveur mysql (avec réplication) sur chacun des
serveurs web ?
Oui/non, tout dépend de la tolérance de panne qu'accepte l'hébergeur.

L'idéal est toujours d'avoir un spare pour reprendre la main derriere en
HA (High-Availibity). En gros si le master, tombe le slave reprend.


Mais quand on « attaque » un serveur mysql en spécifiant « localhost »
dans le script PHP, cela signifie-t-il que ledit serveur tourne réellement
sur la machine qui éxécute le PHP ou y a-t-il une astuce pour le faire
tourner ailleurs ?

suffit de faire tourner un proxy


--
Xavier Henner



1 2