web-dev-qa-db-fra.com

Expérience du monde réel en matière de mise à l'échelle et de réglage des performances

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.

52
Richard Harrison

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.

45
Stewart Robinson

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).

22
markdorison

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?

15
user49
  • Côté serveur

    • Installez Varnish pour la mise en cache des pages pour les utilisateurs anonymes.
    • Installez un système de cache persistant (Memcached, APC, Memcache).
    • Utilisez un CDN tel que Akamai pour servir des fichiers statiques (JavaScript, CSS, images).
  • Côté code

    • Utilisez Pressflow, il permet à Varnish de servir la page en cache pour les utilisateurs anonymes.
    • Nettoyez la table de surveillance de Drupal. Chaque fois qu'une erreur de surveillance est enregistrée, elle consomme des ressources CPU sur le serveur Web et le serveur de base de données. Il augmente également considérablement le temps de chargement.
    • Implémentez des stratégies cache statique et persistant jusqu'à ce que le journal des requêtes lentes soit net.
    • Évitez à tout prix les erreurs PHP PHP qui se produisent dans les boucles foreach imbriquées).
    • Désinstallez les modules inutilisés.
    • Activez la mise en cache pour Drupal blocs de base et vues.
  • Base de données

    • Assurez-vous que les tables sont correctement indexées pour une recherche plus rapide.
    • Ne stockez pas d'enregistrements inutiles, une base de données de 100 nœuds sera toujours accessible plus rapidement qu'une base de données de 3 millions de nœuds.
6
amateur barista

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.

http://www.lullabot.com/podcasts/podcast-92-grammycom

5
Randy Burgess

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:

  • Avec CDN, utilisez domaines sans cookies pour les composants statiques à mettre en cache (comme sstatic.net ). Étant donné que certains serveurs proxy peuvent refuser de mettre en cache les composants demandés avec les cookies.
  • Réchauffez vos caches après avoir effacé les caches (en utilisant wget, Cache Warmer , Drush ECL ).
  • Utilisez la surveillance des performances (par exemple New Relic ou Yottaa qui ont une intégration pour Drupal).
  • Utilisez un outil de surveillance pour votre site Web (par exemple Nagios).
  • Installez Varnish et module d'intégration Varnish HTTP Accelerator , puis configurez-le .
  • Vernis + Authcache: Cochez ceci Exemple VCL pour Authcache Fichier de configuration du vernis.
  • Considérez Pound ou NGINX devant le vernis. Voir: Pourquoi Pound est génial devant Varnish .
  • NGINX peut fonctionner comme proxy inverse et équilibreur de charge, il peut donc remplacer Pound et Varnish.
  • Considérez une version commerciale de Varnish ou NGINX pour utiliser des fonctionnalités non disponibles dans la version open source "communautaire".
  • Envisagez l'équilibrage de la charge matérielle/la mise en cache pour remplacer Varnish et Pound (par exemple BIG-IP F5 ).
  • Utilisez des outils comme 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 à:

  1. Utilisateur (mise en cache du navigateur local).
  2. NGINX ou Pound + Varnish (équilibreur de charge, proxy inverse comme accélérateur HTTP).
  3. Apache (serveur Web).
  4. PHP-FPM (PHP FastCGI Process Manager).
  5. MariaDB (base de données).

Pour Drupal suggestion d'optimisation, vérifiez: Comment améliorez-vous Drupal performance?

3
kenorb

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

3
Jeremy French

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.

0
James Stallings

Activez deux extensions:

  • Zend OPcache
  • wincache

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.

0
npcoder