5 Stimmen

Wie können Sie die Serverleistung maximieren?

Ich habe versucht, mir ein Bild von Leistung und Skalierbarkeit zu machen und würde gerne wissen, was Entwickler/Systemadministratoren tun, um ihre Systeme zu optimieren. Um die Antworten zu vereinheitlichen, wäre es hilfreich, wenn Sie auf eine der folgenden Fragen antworten könnten:

  1. Profil - Zeitschriftenveröffentlichung auf Joomla; Jobbörse auf CodeIgniter + OpenId + AJAX
    • Leistung - Maximale Anfragen pro Sekunde pro Server ?
    • Hardware - Server, Router, Festplatte, LAN?
    • Software - Lighttpd, Memcache, Varnish, Nginx, Squid, Pound, LVS, eAccelerator, usw.
    • Dienstleistungen - Amazon S3, Akamai, Google compute, usw.
    • Konfiguration - Statisches Hashing, Upstream-Modul, Memcache für x Minuten nach n Anfragen, Deaktivieren der Protokollierung von Bildanfragen, usw.
    • Andere - Sonst noch etwas? (Beispiel: normalisierte Tabellen sind schlecht für Websites mit vielen Lesungen)

Edit: Bitte überlegen Sie es sich noch einmal, bevor Sie diese Frage schließen als il es wichtig für Webentwickler, um diese Dinge herauszufinden. Ein Programmierer könnte die Semikolons aus seinem Code entfernen und trotzdem gegen einen schlechten Programmierer verlieren, der für Memcached schreibt oder es schafft, eine CDN über Google App Engine.

0 Stimmen

Es handelt sich um eine Dissertation und nicht um eine Frage.

0 Stimmen

Sieht für mich gut aus - ich bin wirklich sehr an diesem Thema interessiert.

3voto

MarkR Punkte 60862

Unser System: Ich kann Ihnen nicht viel darüber sagen, aber es ist eine große SaaS-Anwendung, die viele zahlende Kunden bedient.


Jede Leistungs-/Kapazitätsarbeit, die wir leisten, wird sehr sorgfältig durchgeführt - wir können nicht einfach Dinge ausprobieren, um zu sehen, ob sie funktionieren.

Zunächst würde eine Analyse der derzeitigen Leistung und Kapazität durchgeführt, um festzustellen, ob wir trotzdem weiterarbeiten können.

Wenn möglich, würden wir die Leistungsprobleme auf einem nicht produktiven System reproduzieren, wo wir ein Profil des Codes erstellen und experimentelle Änderungen vornehmen könnten. Wir können nicht immer genau die gleiche Hardware wie in der Produktion verwenden (die Produktion hat eine große Anzahl von sehr hochspezialisierten Servern; die Entwicklungsabteilung hat nur ein paar produktionsspezifische Leistungstestboxen).

Wenn das Problem in einer Nicht-Produktionsumgebung nicht sinnvoll analysiert werden kann, würden wir unseren Code in der Produktion mit Instrumenten ausstatten (nach sorgfältigen Tests, um sicherzustellen, dass die Instrumente keine Auswirkungen auf das System selbst haben). Diese Instrumentierung würde "ausgeschaltet" und selektiv eingeschaltet, um genügend Daten zu sammeln.

Sobald wir ein Problem genau analysiert haben, können wir uns mögliche Lösungen ansehen und eventuell Prototypen entwickeln, die dann auf ihre Funktionsfähigkeit hin getestet werden können.

Wenn es mehrere Möglichkeiten gibt, entscheiden wir uns normalerweise für die am wenigsten riskante.

Dann würde der normale Freigabeprozess folgen - viele Tests, Codeüberprüfungen usw.

Gegebenenfalls kann die Änderung mit einem "Revert-Schalter" ausgeliefert werden, der es ermöglicht, sie im Falle eines Problems in der Produktion schnell zu deaktivieren.

Es gibt viele potenzielle Leistungsverbesserungen, die wir identifiziert haben, von denen wir die meisten nicht weiterentwickeln werden, bis ein Problem auftritt (es sei denn, wir führen ohnehin eine damit nicht zusammenhängende Überarbeitung des betreffenden Softwareteils durch).

3voto

Karsten Punkte 14372

Es gibt keinen konkreten Masterplan für die Leistungsoptimierung (z. B. zuerst mit Software "xyz" beginnen).

Allgemeiner Ansatz:

  1. Identifizieren (messen!) Sie Ihre am meisten verbesserungsfähige Einheit anhand der Mittel zur Verbesserung/der investierten Zeit
  2. Optimieren Sie es
  3. Wiederholen Sie

2voto

PEZ Punkte 16398

Ich habe nicht die Zeit, Ihre Frage Punkt für Punkt zu beantworten =) Aber ich kann eine allgemeine Strategie empfehlen, die darauf abzielt, Belange zu trennen und keine Server-Ressourcen zu koppeln, wenn kein unmittelbarer Bedarf besteht. mod_proxy (und alle Äquivalente) sind Ihr Freund. Es macht es einfach, Hardware auf Leistungsprobleme zu werfen, die auftauchen. Natürlich müssen Sie das System nicht von Anfang an perfekt auslegen (da es wirklich schwer ist, vorherzusehen, wo sich die wirklichen Engpässe zeigen werden). Aber wenn Sie auf Probleme stoßen. Denken Sie an Ihren Freund.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X