La réponse de Markdorison est essentiellement la méthode acceptée pour s'attaquer à ce problème. Je vais aller un peu plus loin.
Lorsque vous avez Pressflow pour D6 ou Drupal pour D7, Memcached et Varnish fonctionnent parfaitement ensemble, vous devez personnaliser le code de votre fichier VCL . Il y en a des gratuits qui font des points de départ mais vous devez toujours jouer avec eux.
Pour que Varnish fonctionne de manière optimale, assurez-vous de le démarrer avec -s malloc xG plutôt qu'avec le fichier par défaut -s fichier / chemin / vers / fichier. Également avec Varnish, cachez les éléments statiques de Varnish aussi longtemps que vous le pouvez.
Si vous avez plusieurs serveurs Web, supprimez l'ETag de l'en-tête envoyé à Varnish dans VCL. Je supprime également Expires et je fais simplement confiance à Age et à max-age dans les en-têtes afin que les navigateurs soient de nouveau accessibles.
La version 1.5 (au 3 mars 2011) est toujours la version la plus rapide du module Memcached de Drupal.org. Je le déploie généralement en utilisant un seul bac par serveur pour réduire le trafic TCP pour les connexions à plusieurs bacs à grande échelle)
Configurez la mise en cache dans "Performances" sur externe et définissez un âge maximum qui enverra les en-têtes appropriés à un proxy de mise en cache tel que Varnish.
Si vous ne parvenez pas à mettre certaines pages en cache correctement dans Varnish, consultez les articles de blog sur le Web qui expliquent comment inspecter les demandes. Voici un exemple de message que j'ai écrit il y a quelque temps: Qu'est-ce qui empêche Varnish et Drupal Pressflow de mettre en cache des pages anonymes d'utilisateurs anonymes?
Vous devriez choisir InnoDB (ou l’un des autres noms d’autres fournisseurs comme XtraDB) pour MySQL et y déplacer toutes les tables. Ensuite, consultez ce billet de blog pour obtenir des conseils de réglage de base http://www.mysqlperformanceblog.com/2007/11/01/innodb-performance-optimization-basics/
Avoir un pool de réserve important est fondamentalement important. Lors du test de charge du site, activez le journal de requête lent. Vous voudrez probablement d’abord capturer les requêtes d’une durée supérieure à 50 ms, puis les ajuster et réduire de manière répétitive le temps de capture de journal lent jusqu’à ce que la plupart des requêtes soient exécutées avec des index et s’exécutent assez rapidement.
D'autres bases impliquent d'avoir APC dans PHP. Si vous choisissez CGI rapide plutôt que mod_php, essayez de faire en sorte que le cache APC soit partagé entre les instances php en configurant un bon script wrapper. Assurez-vous également que le cache APC se trouve dans un fichier mappé en mémoire pour extraire chaque dernier bit de PHP.