Le site Web sur lequel je travaille aurait un taux de succès énorme peu de temps après son lancement . Le client parle de la possibilité d'environ 2500 hits par seconde sur une journée environ.
Ignorant le fait que ce taux de réussite est probablement un optimisme client sauvage et en plus d'obtenir les plus grands serveurs possibles, quelle est la meilleure façon de configurer Drupal pour prendre en charge un taux de réussite élevé).
J'ai lu Scaling the drupal.org Infrastructure , Drupal performance blog , Best Practices for Scaling Drupal and many other pages, but what I ' Je recherche une expérience réelle de ce qui fonctionne, ce qui fonctionne, ce qui ne fonctionne pas et à quoi s'attendre.
La réponse de Markdorison est fondamentalement la méthode acceptée pour attaquer ce problème. Je vais aller un peu plus loin.
Lorsque vous avez Pressflow pour D6 ou Drupal pour D7, Memcached et Varnish tout fonctionne bien ensemble, vous devrez coder votre - VCL fichier. Il existe des fichiers gratuits disponibles 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 la valeur par défaut de -s fichier/chemin/vers/fichier. Avec Varnish, les objets statiques du cache Varnish sont aussi longtemps que vous le pouvez.
Si vous disposez de plusieurs serveurs Web, supprimez l'ETag de l'en-tête envoyé à Varnish dans VCL. Je supprime également Expires et je compte simplement sur Age et max-age dans les en-têtes afin de ramener les navigateurs sur le site.
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 à l'aide d'un seul bac par serveur pour réduire le trafic TCP pour les connexions à plusieurs bacs à grande échelle)
Configurez la mise en cache dans "Performance" sur externe et définissez un âge maximum qui enverra les en-têtes corrects à 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 détaillent comment inspecter les demandes. Voici un exemple d'article que j'ai écrit il y a quelque temps: Qu'est-ce qui arrête Varnish et Drupal Pressflow de la mise en cache des pages vues des utilisateurs anonymes
Vous devez choisir InnoDB (ou l'un de ses autres noms d'autres fournisseurs comme XtraDB) pour MySQL et y déplacer toutes les tables. Consultez ensuite 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 grand pool de tampons est fondamentalement important. Lors du test de charge, le site active le journal des requêtes lentes. Vous souhaiterez probablement au début capturer les requêtes prenant plus de 50 ms, puis régler les requêtes et réduire de manière répétitive le temps de capture du journal lent jusqu'à ce que la plupart des requêtes soient exécutées à l'aide d'index et exécutées assez rapidement.
D'autres bases impliquent d'avoir APC pour PHP. Si vous optez pour un CGI rapide plutôt que mod_php, passez du temps à essayer de partager le cache APC entre les instances php en configurant un bon script d'encapsuleur. Assurez-vous également que le cache APC se trouve dans un fichier mappé en mémoire pour extraire chaque dernier bit de PHP.
Je recommanderais de commencer par Pressflow (si vous utilisez Drupal 6), Memcache , Varnish , et une certaine forme du réseau de distribution de contenu (CDN) tel qu'Akamai. Le résultat final devrait être que le plus petit nombre d'utilisateurs possible atteigne réellement votre serveur Origin.
Si vous avez des parties de la page que vous ne pouvez pas mettre en cache pour les utilisateurs non anonymes (choses qui sont spécifiques à cet utilisateur, "Bienvenue utilisateur X", etc.), vous pouvez explorer les options pour remplir ces parties de la page telles que asynchrones rappels ou côté Edge inclus.
Si vous avez un petit groupe d'utilisateurs internes (comme un groupe d'éditeurs) qui doivent pouvoir afficher une version non mise en cache du site, je recommanderais d'exposer une version non mise en cache de votre site à une URL différente (protégée derrière un VPN ou équivalent si possible).
2500 hits par seconde sur une journée - si par "hit" vous voulez dire "page livrée" alors c'est 216 millions de pages par jour. Permettez-moi de vous dire ceci: vous n'avez pas 216 millions de pages par jour. J'adore ces clients ...
Cela dit, une donnée de trafic brute ne dit rien. Bien que les conseils de ce sujet soient valables à propos de Varnish/CDN si tout ce que vous avez est du trafic anonyme, mais si vous vous êtes connecté, vous êtes confronté à un défi. Mais avant de passer un temps et des efforts impies à résoudre un problème, assurez-vous que vous avez un problème. 2500 coups par seconde, bing obtient moins que cela, vous vous rendez compte, non?
Côté serveur
Côté code
Base de données
J'écouterais également ce podcast Lullabot sur la façon dont ils ont créé le site Web Grammys.com pour une explosion du trafic au cours d'une semaine. C'était une explication assez pédagogique.
Pour les sites Web à fort trafic, vous devez utiliser plusieurs serveurs et équilibreur de charge ou utiliser simplement CDN. Il est également très important de mettre en cache autant que possible pour minimiser la charge sur les serveurs Web.
L'utilisation de Content Delivery Network ( CDN ) aide à répartir les ressources sur plusieurs domaines (partage de domaine), ce qui réduit la charge sur le serveur Web.
L'utilisation de CDN aide à la mise en cache distribuée et à l'accélération à distance, aide également à atténuer attaques DDoS , en raison de plusieurs points de terminaison. Cela contribue à la sécurité, car le contenu mis en cache est plus difficile à exploiter.
Exemples de fournisseurs: Fastly , Rackspace , Akamai , Azure, CloudFlare, Amazon, MaxCDN, Verizon.
Voici quelques suggestions supplémentaires:
ab
, JMeter pour TTFB , chargez et testez les contraintes sur votre application Web.Ainsi, votre architecture Web du point de vue de l'utilisateur peut ressembler à:
Pour Drupal suggestion d'optimisation, vérifiez: Comment améliorez-vous Drupal performance?
Bien qu'il soit très difficile de prévoir les tendances, si vous avez une bonne idée des niveaux de trafic. Testez la charge de votre solution. Il existe une multitude d'options différentes et il ne sera pas possible de prédire beaucoup de choses jusqu'à ce que vous ayez du trafic en direct, mais si vous chargez le test autant que possible, vous aurez au moins un certain degré de confiance que votre configuration peut gérer le trafic.
Tout le réglage dans le monde n'aidera pas si vous ne le testez pas d'abord.
Il s'agissait d'une présentation à DC SF sur la façon dont l'économiste l'a fait. http://sf2010.drupal.org/conference/sessions/performance-testing-economist-online- en utilisant-grinder
Vous pouvez également examiner la redistribution de la charge sur plusieurs serveurs à l'aide d'une solution d'équilibrage de charge basée sur DNS ou logicielle/matérielle. Cela entraînerait également une tolérance aux pannes.
Activez deux extensions:
Vos performances fonctionneront mieux.
Si vous cherchez à twig Zend OPcache et Wincache dans Microsoft Azure, créez d'abord un nom de dossier ‘ini
’ sous ‘D:\home\site\
’. Créez également 2 fichiers, ".user.ini
' et 'settings.ini
’
Ajoutez la configuration suivante dans chaque fichier:
. user.ini
[PHP]
post_max_size = 32M
memory_limit = 512M
zend.enable_gc = On
upload_max_filesize = 32M
opcache.enable=1
setting.ini
wincache.ocenabled = 1
wincache.ocachesize = 255
Ajoutez également un paramètre d'application à votre application Web avec la touche PHP_INI_SCAN_DIR
et valeur d:\home\site\ini
Après avoir modifié PHP_INI_SYSTEM redémarrez votre application Web. Si vous voulez en savoir plus sur la configuration des brindilles, veuillez vérifier documentation Microsoft .
Après le réglage ci-dessus, mon Drupal (Drupal 8.3) site se charge en 3 secondes.