Wir arbeiten derzeit mit der Anforderung, dass die erste Antwort vom Webserver in Großbritannien unter 200 ms eingehen muss. Derzeit sind unter 2 dedizierten Webservern unter Load Balancer und 1 DB-Server, wir kommen bei 800ms.
Die Site hat im Moment weniger als 5 Kunden, 2 Produkte, 4 Kategorien, es gibt kein Frontend zur Site im Moment, es ist stilfrei und frei von Bildern.
Es wird auch mit Lack auf Nginx betrieben.
Kann mir jemand einen Rat zu Webserver-Setups geben? Warum kommen unsere langsam rein? Was können Sie empfehlen, um dies zu optimieren? Sie müssen 400% schneller sein!
configuration
performance
lukefowell
quelle
quelle
Antworten:
Ich werde beißen.
Sie werden diese Zahlen nicht ohne die Hilfe von Varnish oder FPC (oder beidem) erreichen. Ich würde mit Sicherheit hoffen, dass die Abbildung nicht auch statischen Inhalt enthalten muss (wenn Sie sich entscheiden, ihn hinzuzufügen) - da dies so gut wie unmöglich ist (es fehlen nur wenige bis gar keine Bilder / js / css).
Sie haben Varnish falsch konfiguriert.
Eine richtig konfigurierte Installation von Varnish führt zu Ladezeiten von <100 ms (näher an <10 ms).
In der Tat, für Magento sollten Sie so etwas erwarten,
Wenn ein Kunde nicht eingeloggt ist ...
Dh. Keine einmalige Sitzung erstellt (zum Warenkorb / Wunschzettel hinzufügen, einloggen usw.)
Wenn ein Kunde angemeldet ist ...
Dh. Eine einmalige Sitzung erstellt haben (angemeldet, Artikel im Warenkorb usw.). An diesem Punkt wird Varnish wahrscheinlich ausgeschaltet sein. Wenn Sie sich für die Verwendung von ESIs entschieden haben - abhängig von den umgekehrten Aufrufen -, kann diese entweder eine ähnliche Seitenladezeit beibehalten wie der FPC-Cache (aufgrund des Bootstrap-Overheads) - oder die Seitenladezeiten erhöhen, ohne dass sie zwischengespeichert werden.
Es geht nicht darum, den Lack abzustimmen - es geht darum, "dass Sie überhaupt nichts zwischenspeichern" .
Die idealen Magento Server Konfigurationsdateien
Es gibt keinen, na ja, nicht ganz.
Wir betreiben über 400 Server, allesamt reine Magento-Stores - unterschiedlicher Größe und Kapazität. Und es ist selten, dass die Konfigurationsdateien, die wir auf einer haben, mit denen einer anderen übereinstimmen. Das liegt daran, dass nicht alle Unternehmen gleich sind.
Engpässe können sich aus vielen verschiedenen Gründen bilden:
Bei Geschäften in allen Bereichen dieses Spektrums hat jeder eine andere Herangehensweise, um eine optimale Leistung zu erzielen.
Um die oben beschriebenen Probleme zu lösen; Wir werden absichtlich vermeiden, nur "mehr / bessere Hardware" anzugeben.
Aus diesem Grund werden Sie wahrscheinlich feststellen, dass es keine Nginx-Konfigurationsdatei, PHP-FCGI-Pool-Konfigurationsdatei, MySQL-Konfigurationsdatei oder Lack-Konfigurationsdatei geben wird, die gleich sein werden. Verbinden Sie dies mit der Hardware, die sich selbst ändert. Verfügbarer Arbeitsspeicher, E / A-Leistung (Festplatte und Netzwerk) und CPU - und Sie werden feststellen, dass es geringfügige Unterschiede gibt, die zu dem gewünschten Leistungsgewinn von 400% führen -, aber keine schnelle Antwort, die Sie direkt online finden.
Sie können das von Peer 1 gesponserte Magento- Whitepaper zu Performance kopieren und einfügen (wir würden es nicht empfehlen). Ich hoffe, dass die Einstellungen den verfügbaren Speicher, die Thread-Limits, die TCP / IP-Zustände und die E / A-Kapazität nicht überschreiten und zu einer geringeren Leistung führen als eine Vanille-Apache / mod_php-Konfiguration.
Also lasst uns weitermachen.
Der ideale Magento Server Stack
Dies ist wahrscheinlicher, um Sie näher an die Realität zu bringen. Ein gutes Beispiel, um dies zu demonstrieren, ist die Konfiguration eines speziellen Magento-Betriebssystems, MageStack
Nehmen Sie die separaten Unterkomponenten und Sie haben eine Liste der optimalsten / kritischsten Software, wenn sie richtig konfiguriert ist , um einen Magento-Store zu betreiben. Vor allem:
Firewall, DOS-Filter, Load Balancer, Firnis, Nginx, PHP, Redis, Memcached, MySQL
Wenn Sie also fragen:
Was genau ist dein Ziel?
Genug Vorlesungen, wie würden wir das machen?
Um die Antwort auf einen Serverfehler teilweise widerzuspiegeln , gehen Sie ähnlich vor. Sie haben 3 Server zur Verfügung - orientieren Sie diese also zuerst so optimal wie möglich. Wir werden eine hochverfügbare Lösung vermeiden, da dies den Rahmen dieser Antwort sprengt.
Die für eine Konfiguration mit mehreren Servern erforderlichen Unterkomponenten sind:
Deshalb werden wir einige Systeme für verschiedene Zwecke einsetzen. Die PCI-DSS-Konformität schreibt für jeden Server eine Rolle vor. Mit 5 Rollen und 3 Servern sind Sie sofort in Gefahr. MageStack umgeht dies mithilfe der Virtualisierung - Sie könnten das Gleiche tun.
Server 1: Load Balancer + Webserver
Server 2: Webserver
Server 3: Datenbankserver
Ohne geringe Latenz und erhebliche Netzwerkbandbreite (> 1 Gbit / s, <125 µs) anstelle eines gemeinsamen Speichers ist es besser, das Stammverzeichnis des Speichers auf jedem Computer zu speichern und die Daten entweder in Echtzeit zu replizieren
ionotify
oder zu verwenden eincron
Job. Auch hier vermeiden wir Netzwerkdateisysteme wie NFS oder replizierte Blockgeräte wie Gluster oder DRBD, da eine umfassende Optimierung und eine angemessene Netzwerkbandbreite erforderlich sind.Lack muss so nah wie möglich vorne sitzen. Varnish kann SSL jedoch nicht entschlüsseln. Kombinieren Sie es also mit einem SSL-Terminator. Nginx, Pound, Stunnel, Stud usw. Der eingebaute Load Balancer in Varnish ist nicht besonders gut - aber für eine Einrichtung mit zwei Servern ausreichend.
Nginx + PHP-FPM ist in Ordnung, aber trinken Sie nicht zu viel von der Nginx Kool-Hilfe. Es wird fast identisch mit einer traditionellen Apache / mod_php-Konfiguration ablaufen. Hier ist eine gute Lektüre, warum man Nginx nicht verwenden sollte . Nginx ist gut, sehr gut, aber es ist sicherlich kein Engpass in einem Magento-Geschäft - und angesichts seiner Komplexität und des Mangels an nativem Magento-Support. Die meisten unerfahrenen Systemadministratoren würden von der Verwendung von Apache / mod_php über alles andere profitieren. Dies scheint eine archaische Empfehlung für die Verwendung von PHP-FPM zu sein - aber unsere Leistungstests haben gezeigt, dass die Leistung mit der Nginx-Lösung nur ~ 7% schneller ist - wenn sie richtig konfiguriert ist. Das Tuning und die Erfahrung, die für ein leistungsstarkes, zuverlässiges Nginx / PHP-FPM-Setup erforderlich sind, sind ziemlich umfangreich, um Apache / mod_php zu übertreffen. Was auch immer Sie verwenden, ist Ihr Anruf.
Der Datenbankserver ist einfach, MySQL. Wie bereits erwähnt, wird jedoch eine Master / Slave-Konfiguration empfohlen, wenn Sie eine hochgradig konvertierende Site haben. Ob Sie diesem Ansatz folgen sollten, erfahren Sie in diesem Artikel .
Dann werden Ihre peripheren Back-End-Caches, Memcached und Redis. In kleineren Geschäften führt das Speichern von Sitzungen in einer Memcache-Instanz und des schnellen Back-End-Caches in einer anderen zu guten Leistungsvorteilen. Wir raten davon ab, die Cache-Tags in einem langsamen Backend zu speichern, da dies mehr Probleme verursacht als es gibt. Bei einer Memcached-Konfiguration müssen Sie also auf das Cache-Tagging verzichten . Stattdessen verwenden wir eine Konfiguration wie diese .
Redis ist nicht in Magento integriert, aber mit der Erweiterung von Colin Mollenhour - eine bessere Lösung als Memcache - werden Cache-Tags, Sitzungsspeicher und sogar permanenter Cache-Speicher unterstützt - dies ist nicht ganz so flüchtig wie Memcache . Aber es hat seine Nachteile. Wir haben in großen Produktionsgeschäften (> 500 Bestellungen / Stunde,> 30.000 Unikate / Stunde) festgestellt, dass sich der Cache (und die Tags) sehr schnell füllen können und der LRU-Mechanismus nach Erreichen des Sättigungspunkts etwas ausfällt ( trotz unterschiedlicher Einstellungen) und verursacht einen massiven unmittelbaren Engpass. Es ist daher ratsam, alte Datensätze regelmäßig manuell zu bereinigen.
Also, welche Hardware sollte für was verwendet werden?
Webserver: Schnellste CPU, die meisten CPU-Kerne, Verhältnis von 2 GB RAM / Core
DB-Server: Schnelle CPU, schnellste Festplatten-E / A, die meisten RAM
Wenn Sie also Ihre 3 Maschinen für mehrere Zwecke einsetzen, ist das beste Layout:
Server 1: SSL Terminator -> Lack -> Nginx / Apache> PHP
Server 2: Nginx / Apache> PHP, Redis, (MySQL Slave)
Server 3: MySQL
Bezüglich der spezifischen Konfiguration jeder Anwendung. Das hängt von Ihren Hardwarespezifikationen, der Komplexität Ihres Geschäfts, Ihrem Besuchertyp und der Art des Besuchers sowie dem enormen Besucheraufkommen ab.
quelle
Mit dieser Cluster-Konfiguration sind Sie auf einem guten Weg. Ich empfehle, einen dedizierten Cache-Host für Redis hinzuzufügen. Wählen Sie eine mit hoher CPU-Leistung und viel RAM (~ 64 GB).
Hier ist die vollständige Liste der Konfigurationen, die ich für einen hochverfügbaren, fehlertoleranten, verteilten und lastausgeglichenen LEMP-Cluster verwendet habe. Es enthält
app/etc/local.xml
diecore_config_data
Tabelle und Konfigurationen für MySQL, php-fpm, nginx und Redis. Alle laufen unter Ubuntu 12.04 LTS 64-Bit. Die Konfigurationen beinhalten viele Optimierungen ohne Nachteile.Höhepunkte
August 2013 Verkehr:
Web-Hosts
Hinter redundanten, hochverfügbaren Hardware-Firewalls und Hardware-Load-Balancern stehen 10 Hosts. Die meisten statischen Assets werden auf einen CDN ausgelagert.
Module
Hosts zwischenspeichern
Es gibt zwei Hosts, auf denen Redis in einer Master-Slave-Konfiguration mit automatischem Failover ausgeführt wird. Drei Redis-Instanzen (Sitzungen, Backend und FPC) werden verwendet, um den Durchsatz zu erhöhen und das Persistenzverhalten zu optimieren.
Datenbank-Hosts
Es gibt zwei Hosts, auf denen MySQL 5.6.11 in einer Master-Slave-Konfiguration mit warmem Failover ausgeführt wird.
quelle
Ein weiterer wichtiger Server-Tipp für Magento ist die Installation von PHP 5.4 oder 5.5 mit OPcache . PHP 5.4 ist viel schneller als 5.3 ( http://www.eschrade.com/page/magento-performance-on-php-5-3-5-4-and-5-5rc3/ ).
quelle
Ich möchte einen weiteren wichtigen Tipp hinzufügen, der die Geschwindigkeit der Magento-Seite verbessert, wenn sie nicht mit Lack zwischengespeichert und standardmäßig nicht aktiviert ist (die Ladezeit der Warenkorbseite wurde von 6 auf 1,5 Sekunden geändert).
Aktivieren Sie den Mysql-Abfrage-Cache in /etc/mysql/my.conf
Bei aktiviertem Cache-Typ ist die Cache-Größe der Wert, der vom Cache im Speicher verwendet wird, und das Cache-Limit ist die maximale Größe des Abfrageergebnisses, das zwischengespeichert werden soll
quelle
Mit unserer aktuellen Konfiguration erhalten wir eine erste Antwort in 400 ms und das Dokument ist in 2 Sekunden fertig (unter Verwendung einer Standardverbindung von 5 MBit / s). Unsere Homepage hat eine Größe von 1 MB.
Unser Setup basiert auf AWS wie folgt: Wir haben eine ec2-Instanz mit einem Load Balancer, der mit einer RDS-Datenbank verbunden ist (mit Failover). Wir haben auch einen Ganzseiten-Cache mit einem Redis-Cache-Backend sowohl für den Cache-Speicher als auch für den Sitzungsspeicher implementiert.
Im Durchschnitt haben wir 300 - 400 Besucher pro Tag, aber mit Redis-Caching konnten wir den Ressourcenverbrauch für Ec2 auf ein Minimum reduzieren und gleichzeitig die Geschwindigkeit und die Kosten senken.
Der Grund für den Load Balancer ist, dass der ec2 so konfiguriert ist, dass er automatisch eine neue Instanz startet, wenn die seltene Möglichkeit besteht, dass Datenverkehrsspitzen auftreten, die das aktuelle Setup nicht verarbeiten kann.
quelle