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.