Magento gegen Situationen mit hohem Datenverkehr absichern

Magento gegen Situationen mit hohem Datenverkehr absichern

Hallo, ich habe einen Apache-Server 2.2 mit PHP-Skripten (Magento).

Normalerweise wird eine PHP-Seite in 1–2 Sekunden gerendert, was in Ordnung ist.

Manchmal sind bei hohem Datenverkehr oder grobschlächtigen Spider-Bots alle Apache-Slots blockiert.

Die einzelnen Anfragen laufen sehr langsam und verbrauchen immer mehr Speicher, bis MySQL den OOM-Killer aufruft, der meinen bedürftigen Tomcat tötet.

Zuerst habe ich mod_evasive ausprobiert. Aber wenn ich es zu streng konfiguriere, kann ich nicht schnell surfen, wenn ich es zu locker konfiguriere, können die Anfragen schneller kommen, als sie verarbeitet werden können.

Das Problem sind die PHP-Dateien. Andere Ressourcen wie Bilder usw. blockieren die Slots nicht.

Zweitens habe ich versucht, es durch Senkung von MaxClients einzuschränken. Aber jetzt kann ein Client alle Slots blockieren.

Irgendeine Idee, wie man die maximale Anzahl an Verbindungen pro Client oder besser noch die Anzahl gleichzeitiger PHP-Skripte pro IP begrenzen kann ...

Wie werden andere Apache-Clients konfiguriert, um mehr Anfragen zu vermeiden, als sie verarbeiten können, ohne einen Client zu bevorzugen?

Antwort1

Platzieren Sie Ihre Site hinter einem Origin-Pull-CDN (Cloudflarefällt mir als eine Möglichkeit ein, es gibt noch andere.)

Normalerweise wird eine PHP-Seite in 1–2 Sekunden gerendert, was in Ordnung ist.

Nein, ist es nicht.

Optimieren Sie Ihren Code, damit er nicht zu viel Zeit in Anspruch nimmt.zweiSekunden, um die Seite zu generieren.

Dann zwischenspeichernalledie Sachen.

  • Zwischenspeichern von Seitenanforderungen mitLack
  • Zwischenspeichern Sie Datenbanksuchen mit Memcached.
  • Bilder auf einem CDN zwischenspeichern.
  • PHP-Ebene mit APC oder eAccelerator (oder einem ähnlichen Opcode-Cache) zwischenspeichern
  • Zwischenspeichern Sie außerdem ganze Seiten auf einem CDN.

Wenn Sie das noch nicht getan haben, lagern Sie Ihren Datenbankserver auf einen separaten Server aus, statten Sie ihn mit einer metrischen Menge Speicher und superschnellen Festplatten aus und speichern Sie Ihre Tabellen dann so gut es geht im Cache. Magento ist eine Schlampe, wenn es um Verknüpfungen usw. geht, also muss Ihr Datenbankserver rasend schnell sein.

Wenn ein Benutzer Ihre Website aufruft, wird der Inhalt aus einem Cache gezogen.irgendwound müssen nicht generiert werdenjedenZeit.


Ich habe mir die Freiheit genommen, Yslow auf Ihrer Site laufen zu lassen. Hier ist eine Zusammenfassung der Ergebnisse (das sollten Sie allerdings selbst tun.)

  1. Stellen Sie weniger HTTP-Anfragen. Grundsätzlich sollten Sie Ihre JavaScript- und CSS-Dateien zu einer zusammenfassen, um den Aufwand für mehrere Anfragen zu reduzieren.
  2. Verwenden Sie ein Content Delivery Network (CDN). Ich habe das bereits ^^oben^^ gesagt, aber Yslow sagt mir, dass es60statische Komponenten, die sich nicht auf einem CDN befinden. 1,4 MB davon stammen von www.brainyoo.de. Was mich zu folgendem bringt …
  3. Verschieben Sie Assets in mehrere cookiefreie Domänen.60 Assets werden von derselben Domäne geladen wie der Rest der Site. Das bedeutet, dass der Browser warten muss, bis jedes Asset geladen ist, bevor das nächste geladen werden kann. Eine gängige Methode, dies zu umgehen, besteht darin, statische Assets auf separaten Domänen ohne Cookies abzulegen (damit die Anfrage kleiner und schneller ist und keine Cookie-Informationen enthält).
  4. Verschieben Sie Javascript an das Ende des Dokuments. Gilt als bewährte Methode für skalierbare, schnelle Websites.
  5. Minimieren Sie Javascript und CSS. Ernsthaft. Sie senden fast ein Megabyte an JS und CSS, das minimiert werden kann und ...
  6. Komprimieren Sie Komponenten mit Gzip.Es gibt 39 Klartextkomponenten, die mit gzip komprimiert werden könnten.
  7. Expires-Header hinzufügen. Es gibt 63 statische Dateien ohne Ablaufdatum in ferner Zukunft, sodass sie vom Browser nicht effektiv zwischengespeichert werden.

Gesamtnote D für YSlow. Ich frage mich langsam, ob Ihre Probleme nicht ausschließlich serverseitig sind, aber Sie könnten ein bisschen daran herumbasteln und Ihre YSlow-Bewertung verbessern. Denn auf diese Weise a) wird weniger Verkehr von Ihrem Apache-Server bereitgestellt. b) Es wird schneller geladen, sodass Ihre Besucher einen Apache-Prozess nicht so lange blockieren.

Antwort2

Wenn Magento langsam läuft oder Ihren Server hin und wieder abstürzt, würde Ihr Server im Allgemeinen mit mehr RAM/CPU-Leistung besser laufen. Sie können Ihren Server so optimieren, dass Magento reibungslos läuft, aber das dauert a) einige Zeit und erfordert b) die notwendigen (serverseitigen) Ressourcen.

wie viel DB-Tuning haben Sie durchgeführt? Magento ist PITA, kann aber so konfiguriert werden, dass es schnell ist, sofern genügend RAM vorhanden ist.

verwenden Sie ein Werkzeug wiemysql_tuneroderEinführung in die MySQL-Optimierungum Ihre Datenbank abzustimmen.

und verwenden Sie so viel Cache wie möglich. Ich weiß nicht mehr, ob APC unterstützt wird; Memcache ist besser.

Sie sollten auch IOWAIT im Auge behalten, da dies ein Hinweis auf eine sehr schlechte Festplattenleistung ist, die verschiedene Gründe haben kann.


BEARBEITEN:

Wie werden andere Apache-Clients konfiguriert, um mehr Anfragen zu vermeiden, als sie verarbeiten können, ohne einen Client zu bevorzugen? / Ich möchte wissen, wie andere Apaches mit der Situation umgehen, wenn sie mehr Anfragen erhalten, als sie verarbeiten können

Normalerweise skalieren Sie Ihr Setup je nach erwartetem Datenverkehr. Wenn Ihr Server ausfällt, während Spider und Crawler auf ihn zugreifen, verfügen Sie entweder über einige Skripte mit sehr schlechter Leistung oder Ihr Server ist zu klein.

Wenn ich 1000 Benutzer auf meinem Server erwarte, verwende ich einen Server, der 5000 Clients verarbeiten kann (und ich überwache error.log auf das Erreichen der maximalen Anzahl an Clients).

Eine Ratenbegrenzung ist möglich, aber Sie werden die gleiche Erfahrung machen wie mit mod_evasive. Es hilft wirklich in Fällen wie DDOS, aber NICHT, wenn Sie Ihr Setup optimieren müssen.

verwandte Informationen