javascript future - Wie viele gleichzeitige Benutzer kann eine in Meteor.js erstellte Webanwendung verarbeiten?




github is (4)

https://github.com/alanning/meteor-load-test

Wenn Sie die App schnell mockten, sollte es ziemlich einfach sein, einen Test für 4000 Verbindungen über einen Zeitraum von 15 Minuten einzurichten. Ich habe es nicht persönlich benutzt, aber ich plane es, sobald ich meine eigene Bewerbung fertiggestellt habe.

Wir bauen eine Web-App auf, die während eines Wettbewerbs verwendet wird, um Teilnehmer zu bewerten und Echtzeit-Wahlstatistiken auf einem zentralen Display anzuzeigen.

Der Wettbewerb dauert 15 Minuten und rund 4000 Nutzer werden sich in diesem Zeitraum mit der Web-App verbinden und Abstimmungen senden, die jedoch für jedes Nutzergerät einzigartig sind.

Wir denken daran, eine solche Web-App mit Meteor.js zu entwickeln. Aufgrund unserer geringen Erfahrung in der Entwicklung von Diensten für eine große Anzahl gleichzeitiger Benutzer und des Beta-Status von Meteor.js haben wir jedoch Bedenken hinsichtlich der tatsächlichen Durchführbarkeit des Projekts.

Die folgenden Fragen beschäftigen wir uns:

  1. Gibt es einen Anhaltspunkt dafür, wie viele gleichzeitige Benutzer Meteor handhaben kann? Ich gehe davon aus, dass dies von der Komplexität der Web-App selbst abhängt. In unserem Fall wäre es eher unkompliziert, nur der Client, der für das zentrale Display verwendet wird, wird für die Live-Mongo-Abfrage votes.find({}) , der Rest der Benutzer sieht nur die Schaltfläche vote / schon gewählt .

Einige Daten aus einem realen Fall oder Testszenario würden uns sehr helfen.

  1. Würde die Infrastruktur von Meteor 4000 Benutzern zur Verfügung stehen? Oder sollten wir uns für eine andere Hosting-Lösung entscheiden, die in dieser gelöschten Frage aufgelistet ist (Sie benötigen 10k + rep, um sie zu sehen)?

  2. Gibt es spezielle Leistungsaspekte für Meteor.js, die wir beachten sollten?

Wir haben bereits ähnliche Beiträge gesehen, aber keiner von ihnen hat in so kurzer Zeit so viele Nutzer erreicht:

Außerdem könnten wir das Cluster-Smart-Paket verwenden . Hat jemand damit Erfahrung?


Ich denke, die ehrliche Antwort ist, dass jeder Fall anders ist, und es gibt keine festen Regeln, die Menschen Ihnen hinsichtlich der Leistung Ihres Systems unter verschiedenen Lasten geben können.

Am besten ist es, einen einfachen Prototyp Ihres Systems mit ein oder zwei Funktionen zu erstellen und anschließend einige Leistungstests mit mehreren gleichzeitigen Benutzern durchzuführen, um festzustellen, welche Einschränkungen bestehen. Dies sollte Ihnen eine gute Grundlage geben, um dann Ihren Prototyp zu iterieren und herauszufinden, ob / wie Sie die Anzahl der benötigten Benutzer unterstützen können.


UPDATE ClassCraft meldet einen Meteor-Server, der 6400 gleichzeitige Benutzer behandelt. Lesen Sie mehr im Abschnitt "Skalierbarkeit" meines Artikels "Warum Meteor" .

Siehe auch den Forenbeitrag
Wie viele gleichzeitige Benutzer unterstützt die größte aktuelle Meteor App?

Hier ist ein Benchmark, der sich nicht genau mit gleichzeitigen Benutzern beschäftigt, sondern eher mit dem Einrichten von Abonnements (möglicherweise ein stressigerer Test).

Arunoda hat kürzlich die Ergebnisse eines Tests mit meteor-down (ein Lasttest-Tool ähnlich dem Meteor-Last-Test von @ alanning ) und Cluster , einem Meteor-Lastausgleichswerkzeug, veröffentlicht.

Der Test wurde auf den billigsten Digital Ocean Servern (512 MB RAM, 5 $ / Monat) durchgeführt, und die Ergebnisse waren ziemlich beeindruckend:

Für alle oben genannten Szenarien beträgt die Antwortzeit des Servers weniger als 8 ms.

Im Wesentlichen kann eine Standardmaschine 2500 Meteorabonnements pro Minute verarbeiten und innerhalb von 8 Millisekunden reagieren. Horizontale Skalierung benötigt weniger als 5% Overhead.

Sie können mehr über den Test bei Meteor Cluster Performance Test lesen : Beeindruckende Ergebnisse .


Sie können Down-stepping verwenden, um bessere Ergebnisse zu erzielen. Die meisten Browser scheinen bei der Größenänderung von Bildern lineare Interpolation anstelle von bi-kubisch zu verwenden.

( Update Es wurde eine Qualitätseigenschaft zu den Spezifikationen hinzugefügt, imageSmoothingQuality die derzeit nur in Chrome verfügbar ist.)

Wenn man keine Glättung oder den nächsten Nachbarn wählt, interpoliert der Browser das Bild immer nach der Skalierung als Funktion als Tiefpassfilter, um Aliasing zu vermeiden.

Bi-Linear verwendet 2x2 Pixel, um die Interpolation durchzuführen, während Bi-Cubic 4x4 verwendet, so dass Sie es in Schritten erreichen können, wenn Sie eine bi-lineare Interpolation verwenden, wie in den resultierenden Bildern zu sehen ist.

var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var img = new Image();

img.onload = function () {

    // set size proportional to image
    canvas.height = canvas.width * (img.height / img.width);

    // step 1 - resize to 50%
    var oc = document.createElement('canvas'),
        octx = oc.getContext('2d');

    oc.width = img.width * 0.5;
    oc.height = img.height * 0.5;
    octx.drawImage(img, 0, 0, oc.width, oc.height);

    // step 2
    octx.drawImage(oc, 0, 0, oc.width * 0.5, oc.height * 0.5);

    // step 3, resize to final size
    ctx.drawImage(oc, 0, 0, oc.width * 0.5, oc.height * 0.5,
    0, 0, canvas.width, canvas.height);
}
img.src = "//i.imgur.com/SHo6Fub.jpg";
<img src="//i.imgur.com/SHo6Fub.jpg" width="300" height="234">
<canvas id="canvas" width=300></canvas>

Abhängig davon, wie drastisch Ihre Größenänderung ist, können Sie Schritt 2 überspringen, wenn die Differenz geringer ist.

In der Demo sehen Sie, dass das neue Ergebnis dem Bildelement sehr ähnlich ist.







javascript meteor scalability