2012-09-27 9 views
7

Ich habe eine Reihe von Seiten mit PHP und MySQL, insbesondere MediaWiki, und ich muss die Leistung verbessern. Ich habe jedoch nur einen begrenzten Prozentsatz der CPU, die ich verwenden darf.Verbessert Caching immer die Leistung?

Das Beste, was ich über die Verbesserung der Leistung denken kann, ist Caching aktivieren. Ich bin jedoch verwirrt: Erhöht das wirklich die Leistung insgesamt oder erhöht einfach die Geschwindigkeit?

Was ich darüber denken kann ist, wenn Caching Dateien verwenden wird, dann würde es mehr Verarbeitung benötigen, um den Inhalt dieser Dateien zu erhalten. Wenn SQL-Tabellen verwendet werden, wird es mehr Verarbeitung benötigen, um diese Tabellen ebenfalls abzufragen, vielleicht wird die Zeit kürzer sein, aber die CPU-Nutzung wird mehr sein.

Ist das korrekt oder nicht? Wird beim Caching mehr CPU verbraucht, um bessere Ergebnisse zu erzielen, oder wird die Leistung insgesamt verbessert?

+1

Nun, was haben Ihre Messungen gezeigt? – arkascha

+0

"besonders MediaWiki" bedeutet ja zu deinem Q, aber nur die richtige Art von Caching. Zum Beispiel verwendet MW standardmäßig innodb, so dass das MyISAM-Caching hier hilft. Lesen Sie die MW-Cache-Seiten. Sie können einige dateibasierte Caches konfigurieren, die einen großen Unterschied in der MW für Gäste (dh die meisten) Besucher ausmachen. – TerryE

+0

Sie sollten wahrscheinlich durch https://www.mediawiki.org/wiki/Manual:Performance_tuning gehen Mit MediaWiki, Ihr Hauptanliegen ist es, wikitext Parsing zu vermeiden, die langsam ist und viel CPU benötigt. – Nemo

Antwort

4

Auf der grundlegendsten Ebene sollte Caching verwendet werden, um das Ergebnis von CPU-intensiven Prozessen zu speichern. Wenn Sie beispielsweise einen serverseitigen Bild-Handler haben, der spontan ein Bild erstellt (etwa ein Thumbnail und eine größere Vorschau), möchten Sie nicht, dass dieser Vorgang bei jeder Anforderung ausgeführt wird - Sie möchten diesen Prozess ausführen einmal und speichern Sie die Ergebnisse; Dann erhält jede andere Anfrage das gespeicherte Ergebnis.

Dies ist offensichtlich eine sehr viel zu vereinfachte Beschreibung des grundlegenden Caching, und die Verwendung eines Bildes ist in diesem Fall gut, da Sie sich keine Gedanken über veraltete Daten machen müssen, d.h. wie oft ändert sich das tatsächliche Bild? In Ihrem Fall sind Datenbanken sehr unterschiedlich. Wenn Sie Daten zwischenspeichern, wie können Sie dann garantieren, dass zwischen Ihren echten Daten und Ihren zwischengespeicherten Daten keine sofortige Diskrepanz besteht? Das Abfragen einer Datenbank ist auch nicht immer eine CPU-intensive Aufgabe (vorausgesetzt, Sie müssen überlegen, wie die Datenbank in Bezug auf Indexierung, Tabellengröße usw. entworfen wird). In den meisten Fällen ist die Abfrage einer gut gestalteten Datenbank weitaus intensiver als die der Platten-I/O es ist CPU-Zyklen.

Zunächst müssen Sie sich Ihren Datenbankentwurf anschauen und zweitens Ihre Abfragen. Zum Beispiel sind Sie normalizing your database correctly, sind Ihre Abfragen Trawling durch riesige Mengen von Daten, wenn Sie nur archivieren konnten, sind Sie beitreten Tabellen auf nicht indizierte Felder, sind Ihre Where-Klauseln Abfrage Felder, die indiziert werden könnte (IN ist besonders schlecht in diesen Fällen) .

Ich empfehle Ihnen, einen query analyzer zu ergattern und einige Zeit zu verbringen, Ihre Tabellenstruktur und Abfragen zu optimieren, um diesen Flaschenhals zu finden, bevor Sie in drastischere Änderungen schauen.

0

Sie müssen Ihr Aussehen profilieren und herausfinden, wo die Flaschenhalsbildung stattfindet. Cache ist die beste Art der Seitenladung, die den Server überhaupt nicht trifft. Sie können ein sehr einfaches Caching-System erstellen, das die Informationen nur 15 Minuten neu lädt. Wenn die Seite also in den letzten 15 Minuten zwischengespeichert wurde, erhalten sie eine vorgerenderte Seite. Die einmal geladene Seite erstellt eine temporäre Datei. alle 15 Minuten erstellen Sie ein neues on (wenn jemand diese Seite lädt).

Caching speichert nur eine Datei, für die der Server bereits gearbeitet hat. Die Arbeit zum Erstellen der Datei ist bereits erledigt und Sie speichern sie einfach.

1

Referenz: http://msdn.microsoft.com/en-us/library/ee817646.aspx

Performance: Caching-Techniken werden häufig verwendet, die Anwendungsleistung zu verbessern, indem sie relevante Daten so nah wie möglich an die Daten der Verbraucher zu speichern, damit sich wiederholende Datenerstellung, Verarbeitung und Transport zu vermeiden. Zum Beispiel kann das Speichern von Daten, die sich nicht ändern, z. B. eine Liste von Ländern, in einem Cache die Leistung verbessern, indem Datenzugriffsoperationen minimiert werden und die Notwendigkeit entfällt, dieselben Daten für jede Anforderung neu zu erstellen.

Skalierbarkeit: Die gleichen Daten, Geschäftsfunktionen und Benutzeroberflächenfragmente werden oft von vielen Benutzern und Prozessen in einer Anwendung benötigt. Wenn diese Information für jede Anfrage verarbeitet wird, werden wertvolle Ressourcen verschwendet, die dieselbe Ausgabe wieder erzeugen. Stattdessen können Sie die Ergebnisse in einem Cache speichern und für jede Anforderung erneut verwenden. Dies verbessert die Skalierbarkeit Ihrer Anwendung, da die Nachfrage nach Serverressourcen für diese Aufgaben bei steigender Benutzerbasis konstant bleibt. In einer Webanwendung muss der Webserver beispielsweise die Benutzeroberfläche für jede Benutzeranforderung rendern. Sie können die gerenderte Seite im ASP.NET-Ausgabecache zwischenspeichern, um sie für zukünftige Anforderungen zu verwenden, wodurch Ressourcen für andere Zwecke freigegeben werden.

Die Zwischenspeicherung von Daten kann auch dazu beitragen, die Ressourcen Ihres Datenbankservers zu skalieren. Durch das Speichern häufig verwendeter Daten in einem Cache werden weniger Datenbankanforderungen gestellt, was bedeutet, dass mehr Benutzer bedient werden können.

Verfügbarkeit: Gelegentlich sind die Dienste, die Informationen für Ihre Anwendung bereitstellen, möglicherweise nicht verfügbar. Wenn Sie diese Daten an einem anderen Ort speichern, kann Ihre Anwendung Systemausfälle wie Netzwerklatenz, Webdienstprobleme oder Hardwarefehler überstehen. Jedes Mal, wenn ein Benutzer Informationen aus Ihrem Datenspeicher anfordert, können Sie beispielsweise die Informationen zurückgeben und die Ergebnisse zwischenspeichern, wobei der Cache bei jeder Anforderung aktualisiert wird. Wenn der Datenspeicher dann nicht mehr verfügbar ist, können Sie mithilfe der zwischengespeicherten Daten weiterhin Anforderungen bearbeiten, bis der Datenspeicher wieder online ist.

+3

Mit allem Respekt, ist dies nicht nur eine Kopie-und-Einfügen-Antwort von hier: http://books.google.co.uk/books?id=MEOmjpKLmqYC&pg=PA414&lpg=PA414&dq=%22Performance+:+Caching+techniques + sind + häufig + verwendet% 22 & source = bl & ots = nqFchRBGQH & sig = jdQfh6sIm17he94PhxlattcXeeM & hl = en & sa = X & ei = yR9kUO-jGefW0QWekoH4DQ & ved = 0CB4Q6AEwAA # v = einseitige & q =% 22Performance% 20% 3A% 20Caching% 20techniques% 20are% 20commonly% 20used% 22 & f = false - Wenn Sie das tun, verweisen Sie zumindest auf Ihre Quelle, um Kredit zu geben. –

+0

Ich möchte die beste Lösung bieten. Also surfe ich im Internet und biete hier die beste Lösung. Ist das nicht sinnvoll? was denkst du ? –

+0

Ja, ungefähr 35% der Paste sind relevant für die Beantwortung der ursprünglichen Frage. – user989056

0

Sie verwenden die Begriffe "Leistung" und "Geschwindigkeit". Ich nehme an, "Leistung" bezieht sich auf CPU-Zyklen auf Ihrem Webserver und diese "Geschwindigkeit" bezieht sich auf die Zeit, die benötigt wird, um die Seite an den Benutzer zu liefern. Sie möchten die Leistung des Webservers maximieren (indem Sie die Gesamtzahl der CPU-Zyklen reduzieren, die für die Bereitstellung der Seiten benötigt werden) und gleichzeitig die Geschwindigkeit maximieren (wodurch die für die Bereitstellung einer Webseite benötigte Zeit verkürzt wird).

Die gute Nachricht für Sie ist, dass Caching diese beiden Metriken gleichzeitig verbessern kann. Durch das Zwischenspeichern von Inhalt erstellen Sie eine Ausgabeseite, die im Cache gespeichert ist und Benutzern wiederholt direkt bereitgestellt werden kann, ohne den PHP-Code erneut ausführen zu müssen, der diese Ausgabeseite ursprünglich erstellt hat (wodurch die CPU-Zyklen verringert werden). Das Abrufen einer zwischengespeicherten Seite aus dem Cache verbraucht weniger CPU-Zyklen als das erneute Ausführen von PHP-Code.

Caching ist besonders gut für Web-Seiten, die im Allgemeinen der für alle Benutzer gleich sind, die die Seite anfordern - zum Beispiel in einem Wiki, und für Seiten, die im Allgemeinen auch nicht allzu oft ändern - wieder ein Wiki.

0

„Leistung steigern“ klingt wie einige der E-Mail erhalte ich ...

Es zwei sind miteinander Dinge, die hier passieren. Eine davon ist "wie lange dauert es, eine bestimmte Anfrage zu erfüllen?" Und die andere ist "wie viele Anfragen kann ich gleichzeitig mit meinen begrenzten Ressourcen erfüllen?". Menschen neigen dazu, eines oder beide dieser Konzepte zu verwenden, wenn sie über Leistung sprechen.

Caching kann mit diesen beiden Dingen helfen.

Die effektivste Caching-Strategie verwendet Ressourcen außerhalb Ihrer Maschinen, um Ihre Daten zwischenzuspeichern - die offensichtlichsten Beispiele sind der Browser des Benutzers oder ein CDN. Ich gehe davon aus, dass Sie kein CDN verwenden können, aber durch ein wenig Aufwand beim Setzen der HTTP-Cache-Header können Sie die Anzahl der Anforderungen an Ihren Server für statische oder langsame Ressourcen drastisch reduzieren.

Für dynamischen Inhalt - normalerweise die Webseite, die Sie durch Abfragen Ihrer Datenbank generieren - besteht die nächste effektive Caching-Strategie darin, den von (Teilen) Ihrer Seite erzeugten HTML-Code zwischenzuspeichern. Zum Beispiel, wenn Sie eine "beliebtesten Artikel" Box auf Ihrer Homepage haben, wird dies in der Regel ein paar mäßig komplexe Datenbankabfragen und dann einige "Turn-to-HTML" Back-End-Code. Wenn Sie den HTML-Code zwischenspeichern können, speichern Sie sowohl die Datenbankabfragen als auch den CPU-Aufwand, die Daten in HTML umzuwandeln.

Wenn dies nicht möglich ist, können Sie möglicherweise das Ergebnis einiger Datenbankabfragen zwischenspeichern. Dies hilft bei der Reduzierung der Datenbanklast und reduziert normalerweise auch die Belastung Ihres Webservers - der Code, der für die Ausführung der Datenbankabfrage und die Bearbeitung der Ergebnisse erforderlich ist, ist normalerweise aufwändiger als das Abrufen des Elements aus dem Cache. weil es schneller ist, kann Ihre Anfrage schneller bearbeitet werden, wodurch Ressourcen schneller freigesetzt werden. Dies reduziert die Belastung Ihrer Server für eine individuelle Anfrage und ermöglicht Ihnen so, mehr gleichzeitige Anfragen zu bedienen.

Verwandte Themen