Ich schreibe einen Geschäftsplan und muss die Kosten simulieren, wenn meine Website von 500.000 einzelnen Besuchern erreicht wird.
- Besucher: 500.000
- Seitenaufrufe: 1.500.000
- Spinnen-Seitenaufrufe: 500.000
- Gesamtseitenaufrufe: 2.000.000
Jede Seite führt 50 Abfragen aus + -
- Anfragen pro Tag: 100 Millionen
- pro Stunde: 4 Millionen
- pro Minute: 70.000
- pro Sekunde: 1.200
- Höchststand: 3.000
Für diese Berechnung benötige ich 3.000 Abfragen pro Sekunde. Welche Art von Server kann damit umgehen?
Das Problem ist, dass meine Website 2.000 Besuche pro Tag durchführt und - + 150/200 Abfragen pro Sekunde hat. Ab diesem Zeitpunkt erwarte ich 50.000 Abfragen pro Sekunde.
Wie viele Server im Cluster oder in der Replikation werden für diesen Job benötigt?
Antworten:
Ich habe für ein E-Commerce-Unternehmen mit einer Website gearbeitet, die mehrere Millionen Seitenaufrufe pro Tag hatte. Wir hatten einen einzelnen DELL PE 1750 mit 2 Single-Core-CPUs und 2 GB RAM, Datenbankgröße ca. 4GB. Zu Spitzenzeiten wurden auf diesem Server bis zu 50.000 Abfragen pro Sekunde verarbeitet.
Trotzdem: Die Datenbank war gut strukturiert, alle Abfragen wurden optimiert (wir hatten wöchentliche Sitzungen, in denen die langsamen Abfrageprotokolle analysiert und Abfragen und Indizes repariert wurden) und die Serverkonfiguration wurde ebenfalls optimiert. Zwischenspeichern ist auf jeden Fall eine gute Idee, aber MySQL tut dies trotzdem. Sie müssen nur die Leistung analysieren und dann die Speicherauslastung genau einstellen (Abfragecache im Vergleich zu anderen Optionen).
Aus dieser Erfahrung kann ich Ihnen sagen, dass die größte Auswirkung auf fehlende Indizes, falsche Indizes und ein schlechtes Datenbankdesign (z. B. lange Zeichenfolgenfelder als Primärschlüssel und ähnlicher Unsinn) zurückzuführen ist.
quelle
Alles hängt davon ab, wie komplex die Abfrage ist, wie viel Arbeitsspeicher die Server haben und wie schnell die Festplatten sind.
Wenn die Abfragen sehr einfach oder sehr gut abgestimmt sind, kann ein einzelner großer Datenbankserver dies erledigen. Wenn die Abfragen jedoch sehr komplex (oder einfach, aber schlecht abgestimmt) sind, benötigen Sie mehrere Server.
quelle
Dies kann wirklich nicht geschätzt werden, ohne etwas über die spezifischen Abfragen zu wissen, die Sie ausführen, das Datenbankschema und seine Größe.
Ein einfaches SELECT für eine indizierte Spalte ist ein ganz anderes Biest als ein paar JOINs, die auf nicht indizierten basieren ... und natürlich ändern sich die Dinge sehr, wenn die beteiligten Tabellen 1K-Datensätze oder 1M enthalten.
Ebenfalls:
quelle
Wie Ignacio bemerkte, sollten Sie sich mit Caching befassen. In den Zentimetern oder vielleicht sogar vor dem Stapel. Über 50 Abfragen für jede (jede!) Seite sind wirklich eine Menge.
quelle
Gemessen an Ihren Kommentaren ist der größte Faktor die Größe Ihres Datensatzes oder zumindest die Größe des "heißen" Datensatzes. 3.000 oder sogar 8.000 Qps auf einem 16-Core-Server sind überhaupt kein Problem, solange der Server selten auf die Festplatte muss, um die Abfrage zu erfüllen. Sobald der aktive Datensatz die Menge an Speicher überschreitet, die InnoDB zum Zwischenspeichern verwendet, sinkt Ihre Leistung rapide.
quelle
Für große "Hot" -Datensätze lohnt sich wahrscheinlich die Investition in die Umstellung auf ein "Big Data" -Schema. Wenn Sie beispielsweise eine große Datenmenge abrufen müssen, aber nie neu schreiben, sondern nur neue Daten anhängen, sehen Sie sich Apache Hive an. Stöbern Sie herum, es ist normalerweise eine Variante, die Sie leicht genug mit vorhandenem Code verknüpfen können, um zu verhindern, dass das Sodbrennen den Cache-Speicherplatz erschöpft.
quelle
Es gibt zu viele Dinge, die Ihre Anfragen pro Sekunde beeinflussen können. Vertrauen Sie meinen Daten nicht, ohne sich selbst zu testen. Ich poste hier mein Geschwindigkeitstestergebnis, um jemandem zu helfen, das QPS mit der aktuellen (2018-09) MySQL-Datenbank und dem aktuellen Computer abzuschätzen. In meinem Test ist die Datengröße geringer als der Serverspeicher (was die E / A-Leistung drastisch reduziert und die Leistung erheblich verbessert).
Ich benutze eine CPU 3,75 GB Speicher, 100 GB SSD, GCP Cloud MySQL Server Instanz und bekomme:
quelle