2 votes

Optimisation des performances pour les sites Web hautement interactifs

J'ai récemment terminé le développement d'un site web moyennement fréquenté ( ?) (pic de 60k hits/heure), mais le site ne doit être mis à jour qu'une fois par minute - et l'obtention des performances requises peut se résumer en un seul mot : "cache".

Pour un site comme SO où les données qui alimentent le site changent tout le temps j'imagine qu'une approche différente est nécessaire.

Les temps de mise en cache des pages doivent être courts, voire inexistants, et les mises à jour doivent être diffusées très rapidement sur tous les serveurs Web pour que tous les utilisateurs soient à jour.

Je pense que vous auriez besoin d'un cache distribué pour contrôler le service des données et des pages qui sont mises à jour en quelques secondes, avec peut-être un cache distribué au-dessus de la base de données pour gérer les écritures ?

Les personnes plus expérimentées que moi peuvent-elles décrire certains des principes clés d'architecture et de conception qu'elles emploient pour garantir la performance de sites web hautement interactifs tels que SO ?

3voto

Claudiu Points 58398

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

L'article renvoie à ce pdf - ne le manquez pas.

3voto

Simon Johnson Points 4641

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 pour chaque écriture.

Par conséquent, toute solution de mise à l'échelle dépend de la séparation de la mise à l'échelle des lectures et de la mise à l'échelle des écritures. En général, 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 façon la plus simple de faire évoluer les lectures est de mettre en cache des pages entières à la fois et de les faire expirer après un certain nombre de secondes. Si vous regardez le site Web populaire Slashdot, vous verrez que c'est la façon dont 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, d'après votre question, que vous ne voulez pas de cette forme primitive de mise en cache. Comme vous le mentionnez, vous devrez mettre à jour le cache sur place.

Ce n'est pas aussi effrayant que ça en a l'air. Ce qu'il faut savoir, c'est qu'à partir du moment où l'on est en présence d'une du serveur point de vue. Stackoverflow n'est pas mis à jour en permanence. Il se met à jour assez rarement. Peut-être une ou deux fois par seconde. Pour un ordinateur, une seconde est presque une éternité.

De plus, les mises à jour ont tendance à porter sur des éléments du cache qui ne dépendent pas les uns des autres. Prenons l'exemple de Stack Overflow. 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 cela.

Ainsi, dans la plupart des applications, vous n'avez pratiquement pas besoin de faire évoluer vos écritures. Elles sont si peu nombreuses et si espacées qu'un seul serveur peut se charger des écritures. La mise à jour du cache en place est en fait une solution parfaitement viable. À moins que vous n'ayez un trafic extrêmement élevé, vous aurez très peu de mises à jour simultanées du même élément mis en cache.

Alors comment faire ? La solution que je préfère est de mettre chaque page en cache sur le disque et d'avoir plusieurs web-heads qui diffusent ces pages statiques à partir d'un espace mutuellement accessible.

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

J'ai trouvé que cette conception répondait à toutes les exigences de mise à l'échelle que nous avons exigées jusqu'à présent. Mais la nature du site et la nature de la charge détermineront si c'est la bonne chose à faire pour votre projet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X