2009-06-16 3 views
6

Ich bin neugierig, wie alle die Frage der folgenden Natur nähern:Wie wird die erforderliche Hardware zur Unterstützung der X-Anzahl von Benutzern/Transaktionen geschätzt?

'wir müssen Anwendung A erstellen (zB E-Commerce-Site). Es wird Technologie B (z. B. Java) verwenden. Es muss C (zB 200) Anzahl der gleichzeitigen Benutzer unterstützen. Welche Art von Hardware brauchen wir? '

Die Hardwarespezifikation würde die erforderliche CPU-Anzahl und möglicherweise die Speichermenge für eine grundlegende Antwort beinhalten.

Um mein Beispiel zu vereinfachen, werde ich mich bei meiner Frage an die Java-Technologie halten, aber ich hätte gerne eine technologieneutrale Beratung.

Ich verstehe, dass eine solche Frage viele zusätzliche Faktoren beinhaltet. ZB ein anderes Framework (Wicket vs Struts vs Spring vs reine EJB J2EE-Architektur), Anzahl der verteilten Tiers (ein Box-Setup oder 3-Tier-Setup).

Aber vorausgesetzt, dass eine Person keine vorherige Erfahrung mit der gegebenen Technologie haben kann (oder vielleicht keine Gelegenheit, einen Belastungstest durchzuführen, um herauszufinden, welche Hardware benötigt wird), und eine solche Frage kommt immer während einer anfänglichen Projektdiskussion auf (Und eine Antwort ist essentiell als Grundlage, um voranzukommen), wie gehen Sie vor, eine Antwort zu geben?

Ich hatte über die Lösung des Speicherbedarfsproblems nachgedacht, indem ich die Speichermenge schätzte, die jede Benutzersitzung beanspruchen könnte, aber es wird definitiv Framework/VM-Overhead geben.

Aber im Allgemeinen kann ich einfach keine vernünftige Lösung für diese Frage finden, die immer wieder auftaucht. Ein Belastungstest würde definitiv helfen, es zu lösen, aber dann ist das Projekt bereits fertig, und das ist eine Frage, auf die ein Client normalerweise antworten möchte, bevor er sich an ein Projekt bindet.

Hoffe, dass die Community über gute Ansätze dazu beraten kann.

Danke.

Antwort

3

Sie müssen wirklich einige Annahmen über Ihre Benutzererfahrung machen, um eine erste nicht lastgeprüfte Schätzung der gleichzeitigen Benutzer zu erstellen. Beginnen Sie mit einigen Annahmen über eine Benutzersitzung. Decent Baseballstadion Annahmen könnten (dies von der Komplexität oder Einfachheit Ihrer Website abhängig nicht halten kann):

  • Jeder Benutzer trifft eine neue Seite oder Ressource alle 5 Sekunden (unter der Annahme AJAXy)
  • Jede Anfrage dauert durchschnittlich von 200ms zu verarbeiten.
  • Es ist im Allgemeinen gut, eine durchschnittliche Nutzung von 25% der Kapazität zu haben, um Spikes zuzulassen, sogar mehr für soziale Netzwerke, wo die Spikes größer sein könnten.

Dann würden Sie sagen:

200 Benutzer (200ms/5s) => 8 CPUs durchschnittlicher Bedarf * 4 (25% Last) => 32 CPUs.

Ich glaube nicht, dass dies besonders sprachzentriert ist. Speicher ist nicht teuer, habe genug.

1

Persönlich denke ich, dass jeder, der Ihnen sagt, dass es eine allgemeine Lösung für dieses Problem gibt, Ihnen belügt. Dies gilt insbesondere, wenn sie ein Hardware-Anbieter sind.

Sie können Schätzungen basierend auf ähnlichen Lasten nur auf die erwartete Last vornehmen. Sie werden später feststellen, dass Sie sich geirrt haben, weil die tatsächliche Last der "ähnlichen" Last, die Sie als Schätzung verwendet haben, nicht wirklich ähnlich ist.

Hoffentlich werden Sie daraus lernen und das nächste Mal eine bessere Schätzung machen.

1

Ehrlich gesagt, habe ich keinen guten Weg gesehen, um eine vernünftige Schätzung kurz vor einem Beispiellasttest zu erhalten. Es gibt einfach zu viele Variablen in einer Anwendung von nennenswerter Größe: Hardware (Speicherarchitektur, Anzahl der CPUs, Plattenarchitektur), Software (Implementierungsdetails, Betriebssystem, virtuelle Maschine [falls vorhanden], Datenbanksystem usw. usw.), Umwelt (Netzwerk, Kühlung) und andere.

Dies ist im Grunde eine spezielle Anwendung der Leistungsprüfung. Die weisesten Leute zu diesem Thema haben wiederholt und deutlich gesagt, dass Sie Zahlen bekommen müssen. Also der beste Rat, den ich geben kann, ist in den Plan die Notwendigkeit für die Arbeit Prototypen zum frühestmöglichen Zeitpunkt zu setzen, so dass Sie diese Zahlen und Plan für diese Zahlen im Laufe der Zeit bekommen können, so erhalten Sie Prototypen oder Arbeitsversionen an jedem Kontrollpunkt zu Wiederholen Sie den gesamten Projektverlauf.

Ihre ersten Schätzungen werden wahrscheinlich nicht viel Ähnlichkeit mit Ihren endgültigen Zahlen haben, aber zumindest können Sie an kritischen Stellen nach Bedarf korrigieren, anstatt zu Ende zu gehen, um festzustellen, dass keine Zeit für Fixes übrig ist.

0

Sie fragen, wie Sie Ihre Hardwareanforderungen quantitativ bestimmen können.

Ich würde jedoch aus einer anderen Perspektive nähern. Entwerfen Sie Ihre App so, dass sie skalierbar ist (für alle Ebenen). Implementieren Sie von dort aus Iteration 1 Ihrer Hardware. Führen Sie dazu eine öffentliche Betaversion aus. Sammeln Sie einige echte Lebenszahlen. Und konfigurieren Sie das System neu, um eine höhere Leistungsmetrik zu erfüllen. Wiederholen.

0

Die erforderliche Hardware unterliegt mehr der Komplexität und Qualität der Software als vielmehr der Anzahl der Benutzer oder der Transaktionslast. Die einzigen Leute, die etwas anderes behaupten, sind die Hardware-Anbieter.

Verwandte Themen