Serverkonfiguration für 100 Benutzer

Serverkonfiguration für 100 Benutzer

Ich habe ein Problem damit, welcher Server für das folgende Szenario (eine reale Situation) angenähert werden soll:

Ich habe einen Server, auf dem einige Videos gespeichert werden, auf die über eine auf diesem Server laufende Webanwendung zugegriffen werden kann. Es wird ungefähr 100 (gleichzeitige) Benutzer geben, die ihn verwenden (normalerweise über Tablets oder Telefone, aber auch PCs sind eingeschlossen).

Können Sie mir einige Gedanken zum Aufbau der Hardwarekonfiguration für diesen Server geben? Das darauf laufende Betriebssystem wird Linux sein.

Dank im Voraus.


BEARBEITEN I:

Der von mir verwendete Webserver ist Apache HTTP, aber es ist sehr wahrscheinlich, dass er als Proxy für einen JavaServer fungiert (der natürlich auf diesem Computer installiert ist).

Weitere Anwendungen, die auf diesem Server ausgeführt werden, sind:

  • ein Antrag auf Authentifizierung
  • einen Antrag auf Verwaltung.

Dieser Server wird auch dauerhaft (24/7) laufen.

Antwort1

Ihrer Beschreibung zufolge besteht der Hauptanwendungsfall für den Server darin, Videos an 100 Clients zu streamen.

Vor diesem Hintergrund sind die beiden wichtigsten Subsysteme für den Server:

  1. Die Netzwerkverbindung
  2. Das Speichersystem

Um diese Leistung zu bemessen, müssen Sie wissen, wie viel Bandbreite Sie benötigen – dies hängt von der Qualität des Videos ab, das Sie bereitstellen. Angenommen, das Video ist 1 MB/s groß, müssen sowohl das Netzwerk als auch die Speichersysteme für 100 Benutzer in der Lage sein, 100 MB/s (800 MB/s für das Netzwerk) Daten zu liefern.

Wenn die Bandbreite der Netzwerkverbindung größer ist als eine einzelne Verbindung und Sie es sich nicht leisten können, die Verbindungsgeschwindigkeit zu erhöhen (z. B. von 1 GbE auf 10 GbE/40 GbE zu migrieren), können Sie weitere Verbindungen hinzufügen und diese entweder auf Schicht 2 aggregieren oder mehrere IP-Adressen (eine pro Verbindung) verwenden und die Verbindungen über die Anwendung verteilen. Außerdem müssen Sie sicherstellen, dass der Datenpfad vom Server zu den Clients die Kapazität bewältigen kann. Es macht keinen Sinn, wenn der Server 10 Gbps liefern kann, wenn es anderswo im Netzwerk einen Engpass gibt!

Beim Speichersystem müssen Sie sicherstellen, dass es sowohl die Bandbreite als auch die Anzahl der IOPS (IOs pro Sekunde) verarbeiten kann, um die Daten bereitzustellen. Aus unserer obigen Berechnung geht hervor, dass Sie 100 MB/s Streaming-Lesevorgänge benötigen, aber da Sie 100 Benutzer haben, muss das Speichersystem mindestens 100 IOPS verarbeiten können. Wenn Sie erwarten, dass die Benutzer durch die Videos navigieren, benötigen Sie viel mehr, um die Leistung aufrechtzuerhalten. Obwohl Festplatten eine gute Streaming-Leistung liefern können, wenn sie nicht überlastet sind, würde ich SSDs in Betracht ziehen, wenn die Anzahl gleichzeitiger Zugriffe zunimmt.

Über diese grundlegenden Leistungsmerkmalen hinaus müssen Sie auch die Zuverlässigkeit der Netzwerkverbindungen und Speichersysteme berücksichtigen. Was passiert bei Verbindungsausfällen oder Festplattenfehlern? Wenn Sie Ihren Dienst weiterhin bereitstellen möchten, müssen Sie über mehrere Verbindungen und eine stabile Speicherkonfiguration verfügen (durch RAID oder Datenreplikation auf Anwendungs-/Dateisystemebene).

RAM für das Speichersystem hilft Ihnen, die Videos zwischenzuspeichern und das Speichersystem zu entlasten. Wenn Sie also erwarten, dass viele Leute dasselbe Video ansehen, ist mehr RAM im Allgemeinen hilfreich. Wenn jedoch die Größe des Arbeitssatzes (die häufig aufgerufenen Daten) größer ist als die RAM-Menge des Systems, wundern Sie sich nicht, wenn Sie keine große Verbesserung feststellen.

Da der Großteil des Systems Daten über IO liefert, benötigen Sie wahrscheinlich nicht viel CPU-Leistung und daher sollte jede moderne Multi-Core-CPU ausreichen. Sie sollten jedoch darauf achten, dass Sie die CPU-Verbindung nicht überlasten, wenn Sie mehrere CPUs in einer NUMA-Architektur haben.

Sobald Sie die Hardware haben, sollten Sie sie benchmarken, um sicherzustellen, dass sie leistungsmäßig überzeugt. Für das Speichersystem empfehle ich dasfioMit diesem Tool können Sie Szenarien wie Streaming-Lesevorgänge mit 100 gleichzeitigen Lesern gezielt testen.

Angesichts all dessen, was ich oben gesagt habe, sollten Sie mit Ihrem bevorzugten Anbieter sprechen und sehen, welche Konfiguration er empfiehlt. Wenn Sie Ihre Anforderungen in die RFP aufnehmen (insbesondere wenn Sie harte Anforderungen wie die Fähigkeit zur Bereitstellung eines bestimmten IO-Profils einschließen), kann dies die spätere Behebung eventueller Leistungsmängel erleichtern.

Denken Sie beim Entwurf dieser Systeme daran, wie sich die Daten durch das System bewegen und wo es Einschränkungen geben wird.

Stellen Sie abschließend sicher, dass Sie das System mit Überkapazitäten auslegen, damit Sie sowohl Wachstum als auch Verkehrsspitzen bewältigen können.

Antwort2

Es ist schwierig, eine genaue Serverkonfiguration abhängig von der Anzahl gleichzeitiger Benutzer bereitzustellen, da diese auch von Ihrem Code und der Datenbankoptimierung abhängt. Grundsätzlich müssen Sie Benchmarking für Ihre Anwendung und Ihren Server durchführen. Dafür stehen viele Open-Source-Tools zur Verfügung, wie z. B.

Sie können sowohl ein vollständiges Benchmarking als auch ein Stack-Benchmarking durchführen

Tools wie

  1. ab
  2. http_laden
  3. Sysbench
  4. Unixbenchmark

usw. sind vorhanden.

Antwort3

Können Sie mir einige Gedanken zum Aufbau der Hardwarekonfiguration für diesen Server geben? Das darauf laufende Betriebssystem wird Linux sein.

ja. Verwenden Sie die doppelte Größe.</irony>

nein, ab diesem Stadium unmöglich. Sie könnten sich für eine 4-Core-Maschine mit 4 GB RAM oder mehr entscheiden, es hängt wirklich davon ab, was Sie damit vorhaben. Wenn Sie nur Downloads vom Dateisystem bereitstellen, wäre eine kleine Maschine ok, aber wenn es um Java usw. geht ... Benchmark!


um spezifischer zu sein, sollten Sie auch selbst spezifischer sein.

  • welcher Webserver?
  • ist der Server nur zum Downloaden gedacht?
  • zusätzliche webbasierte Software wie CMS usw.?
  • vollständiger LAMP-Stapel?
  • 24/7 erforderlich?

ich würde Nginx vorschlagen, wenn der Hauptzweck darin besteht, Videos bereitzustellen und als Reverse-Proxy für Ihre Java-Anwendung zu fungieren. Es ist viel leichter als Apache und verarbeitet mehr gleichzeitige Verbindungen bei geringerem Bedarf an Systemressourcen.

Versuchen Sie für Ihren Download-Bereich die Webanwendungen zu vermeiden und Ihre Dateien direkt von Ihrem Reverse-Proxy bereitzustellen. Dadurch verringert sich die insgesamt erforderliche Leistung.

Bitte beachten Sie, dass Nginx einige gute Module hat, um als statischer Server für Videos zu fungieren


zum Thema 24/7: Müssen SiesicherstellenBetrieb rund um die Uhr? Dann benötigen Sie ein Failover-Setup.

verwandte Informationen