Wie berechne ich den Serverbedarf für eine Webanwendung?

9

Ich entwickle ein Backend, in dem ich APIs für meine mobile Anwendung verfügbar machen werde. Benutzer können sich registrieren, Produkte hinzufügen, die Links von Produkten per E-Mail / SMS / überall teilen und andere können darauf klicken und das Produkt kaufen. Dies ist der einfache Workflow der mobilen Anwendung. Die App ist eine bildintensive App, bei der Bilder hochgeladen und abgerufen werden, die vom Cloud-Dienst eines Drittanbieters ausgeführt werden. SO wird der Bildteil nicht von meinem Backend bearbeitet.

Jetzt bin ich vom Entwicklungsteam und habe wenig Erfahrung auf der Hardware-Serverseite. Als ich die Anforderung für die Infrastruktur gab, haben sie mir die folgenden Fragen gestellt.

  1. Anwendungs- / Speicherdurchsatz
  2. Anwendungsdurchsatz (Anzahl gleichzeitiger Verbindungen in 3 Monaten, 6 Monaten und 1 Jahr)
  3. Speicherdurchsatz (Datenwachstum in 3 Monaten, 6 Monaten und 1 Jahr)
  4. HA-Anforderung
  5. DR-Anforderung

Ich bin mir nicht sicher, wie ich die oben genannten 3 Punkte prognostizieren soll. Wie werden Durchsätze berechnet? Ich gehe davon aus, dass sich im ersten Monat 10000 Benutzer in meiner Bewerbung registrieren werden, von denen 5000 aktive Benutzer sein werden. Bei einer durchschnittlichen Anmeldung bei der Anwendung gibt es 10 API-Treffer pro Benutzer, was zu 5000 * 10 = 50.000 Treffern pro Monat führt, was 1 API-Treffer pro Minute entspricht, dh ~ 2 gleichzeitige Verbindungen im ersten Monat.

Geht die Berechnung so? und wie berechne ich das Datenwachstum? Bedeutet dies, dass ein Benutzer ein Produkt registriert, erstellt und wenn ich die dafür verbrauchte Datenbankgröße zusammenzähle, wird dies als Datenwachstum bezeichnet?

Diese Frage scheint erbärmlich, aber ich brauche wirklich Hilfe, um herauszufinden, wie die Durchsätze für die Serveranforderungen berechnet werden.

Ajeesh
quelle

Antworten:

7

Die ersten drei Punkte sind die Kapazitätsplanung. Die Organisation versucht, die Zukunft zu budgetieren und vorherzusagen. Leider gibt es keine einfache oder akzeptierte Möglichkeit, Leistung und Skalierbarkeit vorherzusagen. Jede Anwendung und Umgebung ist anders. Daher ist der beste Weg , dies zu beantworten , ist zu messen.

Speziell:

  1. Besprechen Sie mit Ihrem Management oder Ihren Produktbesitzern, wie wahrscheinlich das Anwachsen der Benutzer und die Arten der verschiedenen Benutzer sein werden. Wenn sie es nicht wissen, raten Sie, aber dokumentieren Sie, dass dies Vermutungen sind.
  2. Erstellen Sie einen automatisierten Durchlauf allgemeiner Pfade Ihrer Anwendung. Sie können Aktivitäten aufzeichnen oder Ihre eigenen in Lasttestanwendungen wie JMeter eingeben .
  3. Erstellen Sie eine Testumgebung, die Ihrer aktuellen oder geplanten Hardware entspricht. Achten Sie genau auf Dinge wie Bandbreite, Speicher, SSL, Protokollierung oder andere häufig vergessene Aspekte, die die Leistung beeinträchtigen können. Verspotten Sie den Bilddienst eines Drittanbieters, wenn Sie können, indem Sie kleinere oder repräsentative Bilder verwenden.
  4. Verwenden Sie die Lasttestanwendung, um den Vorschlag für die projizierte Anzahl von Benutzern zu unterschiedlichen Zeiten zu erstellen.
  5. Verwenden Sie ein Tool zur Verwaltung der Anwendungsleistung wie AppDynamics oder DynaTrace , um die Leistung zu messen und Engpässe zu identifizieren.

Zusätzlich zu den oben genannten Anforderungen kann dies Ihnen helfen:

  1. Stellen Sie sicher, dass Ihre Umgebung die angeforderte Last unterstützt.
  2. Finden Sie die maximale Last, die Ihre Umgebung unterstützt.
  3. Finden Sie die Engpässe, die Ihre Leistung oder Skalierbarkeit einschränken.
  4. Experimentieren Sie mit verschiedenen Konfigurationen, um zu sehen, wie die Leistung oder Skalierung ist.
  5. Beobachten Sie, wie das System zurechtkommt, wenn Sie Fehler auslösen.

Die letzten beiden Punkte, HA-Anforderung (Hochverfügbarkeit) und DR (Disaster Recovery, vermutlich RPO (Recovery Point Objective) und RTO (Recovery Time Objective) ), sind schwerer vorherzusagen, da es sich tatsächlich um Geschäftsanforderungen handelt. Besprechen Sie mit Ihrem Management oder den Produktbesitzern die wahrscheinlichen Fehler und deren Kosten für die Minderung oder Behebung . Wenn Sie beide neu in diesem Bereich sind, erwarten Sie viele Vermutungen und späte Nächte von Ihrer Seite.

akton
quelle
2

Ich würde eine objektivere Grundlage vorschlagen. Wechseln Sie zu Ihren vorhandenen HTTP-Protokollen. Angenommen, dies ist eine Aktualisierung einer bereits in der Feld-App befindlichen App, ziehen Sie einfach die Protokolle und überprüfen Sie die enthaltenen HTTP-Anforderungen. Dies bietet eine absolut objektive Grundlage für Ihre Lastmodellierung anstelle eines benetzten Fingers in der Luft, um den Wind zu testen.

Denken Sie auch aus Sicht der Qualitätssicherung daran. Sie können nicht sowohl die Anforderung als auch die Validierung besitzen. Sie können also die objektiven Daten aus den Protokollen verwenden, um die Lastmodellinformationen zu erstellen, aber jemand im Unternehmen muss die tatsächliche Definition abzeichnen. Warum? Da Sie eine Anforderung in den Stream einfügen, die den Entwicklern, Architekten, Plattformmanagern usw. bisher nicht zur Verfügung stand, möchten Sie, dass die Zahlen korrekt sind, wenn Sie die App nicht bestehen.

Was können Sie die Protokolle ziehen?

  • Höchste Transaktionsrate pro Stunde (Anzahl der Anfragen pro Stunde blockiert)
  • Höchste Benutzer pro Stunde (Anzahl der pro Stunde blockierten IP-Adressen)
  • Benutzerdatenflüsse (Siehe Referer-Tag zu Anforderungen zum Erstellen eines Baums früherer Anforderungen)
  • Bestehende Antwortzeiten (wenn Sie das Zeitfenster w3c für Ihre Webdienstanrufe aktiviert haben). Dies kann verwendet werden, um Erwartungen für zukünftige Versionen objektiv festzulegen, um das aktuelle Modell zu erreichen oder zu übertreffen
  • Denken Sie mal an die Verzögerungen zwischen IP-Anfragen. Sie können die Beispielpunkte in der Zeit zwischen zwei beliebigen Anforderungen tatsächlich modellieren, indem Sie das Referer-Tag abrufen und nach IP-Adresse blockieren, um einen Beispielsatz zu erstellen. Sie können dann Statistiken für diese Stichproben für minimale, maximale, durchschnittliche und 90-prozentige Denkzeiten abrufen. Heck, einige Statistikpakete bieten Ihnen sogar eine Funktion, in die Sie eine Zufallszahl einfügen können, um eine für die Produktion geeignete Verteilung zu erhalten
  • Wenn Sie Protokolle für frühere Zeiträume haben, können Sie Wachstumsmodelle für beobachtete oder gewünschte (Projektions- oder Verwendungsprojektionen) projizieren.

Ich bevorzuge Splunk für diese Art von Arbeit. Für die meisten Unternehmen sollten Sie in der Lage sein, Protokolle im Wert von 30 Tagen in die kostenlose Ebene zu ziehen, ohne sich darum kümmern zu müssen, ein halbes Dutzend verschiedener Apps zusammen einzurichten, wie Sie es mit dem ELK-Stack tun.

Wenn Sie die Anforderungen falsch verstehen, jagen Sie möglicherweise technischen Geistern nach, die in der Produktion niemals auftreten würden, und verringern tatsächlich kein Risiko. Stellen Sie sicher, dass sich jemand auf der Unternehmensseite von Ihren Anforderungen abmeldet, da Sie sonst möglicherweise individuelle Budgetüberschreitungen für die Verfolgung von Mängeln besitzen.

James Pulley
quelle
1

Ihre Frage gefällt mir sehr gut. Das ist ein guter. Ich glaube nicht, dass es eine echte Antwort darauf gibt, aber ich werde es versuchen. Beim Erstellen / Entwerfen eines neuen Servers ist es am wichtigsten, die richtige
Umgebung und die richtigen Methoden auszuwählen. Nicht alle Umgebungen sind skalabale, die meisten nur in begrenztem Umfang. Das Hardware-Team versucht zu berechnen, welche Art von Dateisystemen und Schnittstellen sie verwenden können. Einige Dateisysteme sind einfach einzurichten, aber schwer zu erweitern. Andere sind schwer einzurichten, aber einfach zu verwalten und zu erweitern.

Meiner Meinung nach ist es am besten, sich mit denjenigen in Verbindung zu setzen, die Ihnen diese Fragen stellen, und ihnen zu erklären, warum Sie diese Fragen derzeit nicht beantworten können. Beim Starten einer neuen Anwendung oder eines neuen Systems kann niemand sagen, wie sich dies alles entwickelt, insbesondere wenn es kein anderes System gibt, mit dem Sie vergleichen können. Aber Sie haben das Wissen über die API, die Sie entworfen haben, und der "Hardware-Man" hat das Wissen, wie seine Umgebungen / Server funktionieren. Gemeinsam können Sie diese Fragen sicher herausfinden.

Hoffe das hilft dir.

Valentin Bauer
quelle
1
Was genau meinst du mit "Umgebungen und Methoden"? Können Sie ein Beispiel für eine skalierbare Umgebung geben? Und mit "Methoden" meinen Sie die Sicherungsmethode, die Authentifizierungsmethode usw. oder etwas anderes?
Jay Elston
@ JayElston Mit Umgebung und Methoden meine ich die richtige Wahl der Serverarchitektur. Einige kleinere Anwendungen verwenden einen Server, um die Anwendung auszuführen und Daten zu speichern. Einige größere Anwendungen können dies nicht, da sie mehr Speicherplatz für Daten benötigen. Nach Methoden muss man über all diese Dinge nachdenken. Über Skalierbarkeit sprechen Virtual Server sind eine gute Sache. Aber denken Sie daran: Das Hinzufügen von RAM oder mehr Speicherplatz löst Probleme für kurze Zeit, ist jedoch keine allgemeine Lösung. Außerdem müssen Sie unterschiedliche horizontale und vertikale Skalierungen vornehmen. Siehe hier: en.wikipedia.org/wiki/Scalability
Valentin Bauer