Wie gut skaliert WordPress?

34

Mit dem neuen WordPress und seinen neuen Funktionen scheint WordPress mehr zu können als nur eine einfache Blog-Engine. Aber wie gut wird die WordPress-Skala von beispielsweise 10.000 -> 100.000 Benutzern pro Tag genutzt?

Bei so vielen Benutzern wird ein großer Teil davon sein, eine gute Cache-Strategie zu haben, aber wie gut ist WordPress entwickelt, um dies zu vereinfachen und Ihnen die Kontrolle zu geben, die Sie benötigen. Fx in der Lage, einen Teil einer Seite zwischenzuspeichern und nur benutzerdefinierte Teile zu rendern, Master / Slave-DB-Setup zu unterstützen und ähnliches?

googletorp
quelle

Antworten:

37

Es ist klar, dass nichts so gut skaliert wie statische Dateien, die von einem schnellen Webserver und einem beliebigen CMS bereitgestellt werden . Eines der Probleme ist die Anzahl der Datenbankabfragen, die pro URL-Anfrage erforderlich sind, und meine Erfahrung aus den letzten zwei Jahren, die ich ausschließlich mit Drupal und jetzt über zwei Jahren mit WordPress gesammelt habe, ist, dass WordPress in dieser Abteilung viel besser ist.

Das heißt, fast nichts mit irgendeiner Macht wird "out-of-the-box" skalieren ; Es geht darum, was Sie tun können, wenn Ihre Skalierbarkeitsanforderungen steigen.

Am unteren Ende von "viel Verkehr" gibt es großartige Caching-Plugins und Integrationen mit kostengünstigen CDNs, mit denen Sie einen ziemlich guten Job mit einem Budget ohne IT und einem niedrigen Hosting-Budget machen können. Hier sind einige andere Fragen und Antworten zur Überprüfung:

Es gibt Optionen für die Profilerstellung, um Leistungsengpässe zu identifizieren :

Sobald Engpässe erkannt wurden, können Sie mit der Transients-API lokalisierte Optimierungen vornehmen . Diese Fragen und Antworten enthalten ein Beispiel, das mithilfe der Transients-API optimiert werden kann, und zeigen, wie:

Wenn Sie wirklich Lust haben , die großen Waffen herauszuholen , können Sie Memcached , HyperDB , Nginx und / oder mehr konfigurieren , um die Dinge zu beschleunigen.

Und schließlich gibt es neue, auf WordPress fokussierte Webhosts, die auf Leistung spezialisiert sind, wie WP Engine , ZippyKid und andere:

So ist die gute Nachricht ist , alle die Waage sehr schön ; von der sehr niedrigen Ende kostenlos und einfach mit technischer Komplexität und Kosten wachsen nur, wenn der Verkehr erheblich wächst. Fangen Sie klein mit WordPress an und es wird großartig. Wenn Ihr Traffic wächst und Sie ihn sogar einigermaßen gut monetarisieren, werden Sie feststellen, dass es sehr kosteneffektiv ist, ihn nach Bedarf zu skalieren.

Zumindest IMO. :)

MikeSchinkel
quelle
Vielen Dank für eine so gründliche Antwort. Ich frage mich, wie die WordPress-APIs funktionieren, wenn Sie Teile einer Seite zwischenspeichern. Sie müssen also nur die benutzerspezifischen Teile und nicht die gesamte Seite für angemeldete Benutzer erstellen oder Edge-Side-Includes für Websites mit hohem Datenverkehr verwenden.
googletorp
Mike, du bist ein Biest! Überall, wo ich auf diese Seite gehe, finde ich Ihre Antworten und sie sind alle großartig!
dgw
@googletorp : Das kannst du definitiv, es braucht nur handgefertigten Code. Ich würde gerne sehen, ob ein Framework entwickelt werden könnte, um es einfacher zu machen, aber ich konzentriere mich derzeit darauf, robuste und funktionsreiche benutzerdefinierte Postfelder zu implementieren. Vielleicht irgendwann bald. :) @ Voyagerfan5761 : Danke. :)
MikeSchinkel
kiragiannis.com/cloud-computing/… Dies könnte einige Messdaten in die Konversation einbringen.
Geo
4
  1. Erwarten Sie nicht viel von Shared Hosting - machen Sie WordPress nicht für Langsamkeit verantwortlich, wenn Sie sich auf einem Shared Host befinden. Freigegebene Hosts können Tausende von Konten auf einem Server speichern. Sie können also den ganzen Tag damit verbringen, ein Konto für 10 US-Dollar pro Monat zu optimieren, und das spielt keine Rolle. Achten Sie auch auf Marketing-Schlagworte - nur weil dort "Cloud" steht, heißt das noch lange nicht, dass Sie nicht einen Server mit 100 oder 1000 Leuten teilen.

  2. Ich denke nicht, dass Cache-Plugins an dieser Stelle notwendig sind. Wenn Sie sich den WP-Quellcode ansehen, gibt es bereits fortgeschrittenes Caching, das in den Kern eingebrannt ist. Ein Cache des Cache des Cache des Cache - aufgepasst, das kann kontraproduktiv sein.

  3. Die Hauptsache, die Sie bremst, sind langsame MySQL-Abfragen, und sofort einsatzbereites WordPress sollte Ihnen hier keine Probleme bereiten. Allerdings musste ich meine Kommentarabfragen "BEGRENZEN", da ich mehr als 50.000 Kommentare hatte. (Ist das schon behoben?) Auch wenn Sie etwas Atypisches tun (wie 1000 Kategorien?), Könnte dies ebenfalls ein Problem sein.

  4. Ich benutze eine Linode 512 mit NginX und "top" zeigt, wie PHP und NginX ihre Arbeit in weniger als einer Hundertstel Sekunde pro Anfrage erledigen. Fast die gesamte CPU-Zeit ist mit MySQL verbunden. Sie könnten 1 Million Seiten pro Monat mit einem Linode für 20 US-Dollar liefern, aber wenn Sie mit dem Hinzufügen von Plugins und Fotos beginnen, benötigen Sie wahrscheinlich einen Linode für 1 GB. Aus meiner Sicht ist es ziemlich linear: Wenn sich die Seitenaufrufe verdoppeln, verdoppeln Sie einfach die Größe Ihres Linodes.

Haftungsausschluss: Ich arbeite nicht für Linode.


Update (~ 2 Jahre später), da Sie Teile einer Seite mit PHP zwischenspeichern möchten, ist hier eine einfache Lösung, die ich verwende und die überraschend schnell ist. Innerhalb von 1/100 Sekunde werden mehrere separate Teile / Teile pro Seite zwischengespeichert. Scheint, als ob eine Ramdisk dies noch schneller machen könnte, aber es ist für meine Bedürfnisse ausreichend schnell:

$cache_file = "./cache/portion-1". $since; // maybe round() this $since timestamp
$cache_life = 1000; // seconds to keep this cached
$filemtime = filemtime($cache_file);  // returns FALSE if file does not exist
if (!$filemtime or (time() - $filemtime >= $cache_life)) {

    // heavy lifting starts
    $output = 'Heavy!';
    // heavy lifting ends

    if (!file_put_contents($cache_file,$output,LOCK_EX)) { echo 'error'; } // save the cache    
    echo $output;

} else { 

    // load from cache
    $output = file_get_contents($cache_file); 
    echo $output;        
} 
PJ Brunet
quelle
0

Es gibt letztendlich drei Dinge, die WordPress im Maßstab verlangsamen und die sich auf diese reduzieren:

  • Hosting-Stack - Sie benötigen einen guten Host mit der neuesten Software - PHP 7, Nginx, Varnish, Redis, fail2ban und PerconaDB sind alle eine gute Wahl
  • Keine Tabellenscans - viele Plugins werden von Amateur-Programmierern geschrieben, die nicht einmal wissen, was ein Tabellenscan ist. Zwei Dinge sind erforderlich, um Tabellenscans zu vermeiden - ein verwendbarer Index und eine Abfrage, die so geschrieben sind, dass sie den Index verwenden können
  • Keine oder nur wenige SQL-Abfragen innerhalb von PHP-Schleifen - ein Teil des Plugin-Codes wurde eindeutig nur auf winzigen Websites getestet und durchläuft aus dem einen oder anderen Grund jedes Produkt in Ihrer Datenbank und führt für jedes Produkt / jeden Beitrag einen neuen SQL-Aufruf durch. Sie möchten im Idealfall weniger als 100 SQL-Abfragen pro Seite - hört sich nach viel an, ist es aber nicht wirklich und mit <100 erhalten Sie eine TTFB von ca. 200 ms ohne Cache.

Sobald Sie das oben Gesagte eingerichtet haben, können Sie Caching hinzufügen - z. B. Lack, CDNs, Seiten-Caching usw.

Wenn Sie skalieren müssen, können Sie einen Cluster mit PerconaDB XtraDB für die Datenbank und Unison für die Dateien erstellen. Auf diese Weise können Sie einen Knoten als wp-admin und cron runner und die anderen Knoten, die den Webverkehr bedienen, hinter einem Load Balancer haben.

Dave Hilditch
quelle