2008-11-22 6 views
2

J'ai récemment terminé le développement d'un site Web mi-trafiqué (? 60k hits/heure), cependant, le site n'a besoin d'être mis à jour qu'une fois par minute - et d'atteindre les performances requises. résumée par un seul mot: "mise en cache".Optimisation des performances pour les sites Web hautement interactifs

Pour un site comme SO où les données alimentant le site change tout le temps, j'imagine qu'une approche différente est requise. Les temps de mise en cache de la page doivent vraisemblablement être courts ou inexistants, et les mises à jour doivent être diffusées très rapidement sur tous les serveurs Web pour que tous les utilisateurs restent à jour. Je suppose que vous auriez besoin d'un cache distribué pour contrôler la diffusion des données et des pages mises à jour de l'ordre de quelques secondes, avec peut-être un cache distribué au-dessus de la base de données pour médiatiser les écritures?

Les personnes les plus expérimentées peuvent-elles décrire certains des principes clés d'architecture et de conception qu'elles utilisent pour assurer la performance de sites Web hautement interactifs comme le SO?

Répondre

3

La grande majorité des sites ont beaucoup plus de lectures que d'écritures. Il n'est pas rare d'avoir des milliers ou même des millions de lectures à chaque écriture. Par conséquent, toute solution de mise à l'échelle dépend de la séparation de la mise à l'échelle des lectures de la mise à l'échelle des écritures. Normalement, la mise à l'échelle des lectures est vraiment bon marché et facile, la mise à l'échelle des écritures est compliquée et coûteuse. La manière la plus simple de mettre à l'échelle les lectures est de mettre en cache des pages entières à la fois et de les expirer après un certain nombre de secondes. Si vous regardez le site Web populaire, Slashdot. vous pouvez voir que c'est ainsi qu'ils font évoluer leur site. Malheureusement, cette stratégie de mise en cache peut entraîner un comportement contre-intuitif pour l'utilisateur final.

Je suppose de votre question que vous ne voulez pas ce genre de cache primitif. Comme vous l'avez mentionné, vous devrez mettre à jour le cache en place.

Ce n'est pas aussi effrayant que cela puisse paraître. La principale chose à réaliser est que du point de vue du serveur . Stackoverflow ne se met pas à jour tout le temps. Il met à jour assez rarement. Peut-être une ou deux fois par seconde. Pour un ordinateur, une seconde est presque une éternité.

En outre, les mises à jour ont tendance à se produire pour les éléments du cache qui ne dépendent pas les uns des autres. Considérons Stack Overflow comme exemple. J'imagine que chaque page de question est mise en cache séparément. La plupart des questions ont probablement une mise à jour par minute en moyenne pendant les quinze premières minutes, puis probablement une fois par heure après.

Ainsi, dans la plupart des applications, vous avez à peine besoin de mettre à l'échelle vos écritures. Ils sont si peu nombreux et éloignés que vous pouvez avoir un serveur qui fait les écritures; La mise à jour du cache est en fait une solution parfaitement viable. À moins d'avoir un trafic extrêmement élevé, vous obtiendrez très peu de mises à jour simultanées sur le même élément mis en cache en même temps.

Alors, comment configurez-vous cela? Ma solution préférée consiste à mettre en cache chaque page individuellement sur le disque et à avoir de nombreuses têtes Web fournissant ces pages statiques à partir d'un espace mutuellement accessible.

Lorsqu'une écriture doit être effectuée, elle est effectuée à partir d'un seul serveur, ce qui met à jour cette page html en cache particulière. Chaque serveur possède son propre sous-ensemble du cache, donc il n'y a pas un seul point de défaillance. Le processus de mise à jour est soigneusement conçu de sorte qu'une transaction s'assure que deux demandes n'écrivent pas dans le fichier exactement au même moment.

J'ai trouvé que ce design répondait à toutes les exigences de mise à l'échelle requises jusqu'à maintenant. Mais cela dépendra de la nature du site et de la nature de la charge pour savoir si c'est la bonne chose à faire pour votre projet.

3

Vous pourriez être intéressé par this article qui décrit comment les serveurs de wikimedia sont structurés. Très éclairant!

L'article est lié à this pdf - assurez-vous de ne pas le manquer.

+0

Merci, je vais jeter un coup d'oeil. – Ben