2017-08-17 2 views
0

Ich schreibe einen Proof of Concept für unsere bestehende Anwendung.Knoten Js Reaktionszeit sinkt unter Last Test

Architektur der bestehenden Anwendung: Soap Web Service ist zu anderen Systemen ausgesetzt. Technologie-Stack unseres bestehenden Systems: - Java -> C++ -> Gespeicherte Prozeduren (Oracle Database). Der Großteil der Geschäftslogik ist in Stored Procedures geschrieben.

Die Frage ist, einen Beweis des Konzepts in Knoten js zu machen, der die vorhandene Java und C++ Schicht ersetzen wird. Vorgeschlagene Architektur ist Node Js -> Stored Procedures (Oracle-Datenbank).

Ich habe einige Fragen:

  1. Der Proof of Concept in Knoten js (mit Express) funktioniert gut bis 100 gleichzeitige Benutzer/Sekunde, wobei die Reaktionszeit unter einem 1s ist. Wenn die Anzahl der gleichzeitigen Benutzer steigt, erhöht sich auch die Antwortzeit und überschreitet 1s (die bestehende Anwendung hat eine SLA von weniger als 1 Sekunde). Die Anwendung wird auf einer EC2-Instanz implementiert (dasselbe Ergebnis mit t2.micro und m4.large, und die Datenbank ist ebenfalls eine RDS-Instanz). Ich habe versucht, auch Cluster zu verwenden, hatte aber keine signifikante Gewinnleistung.

    Wie kann ich dies so verbessern, dass bis zu 1000 Benutzer/Sekunde, die Reaktionszeit unter 1s bleibt.

  2. Gibt es eine andere Sprache/Framework, die für dieses Szenario geeignet ist?

+0

Die Frage ist: Was braucht Zeit? Finden Sie es heraus und stimmen Sie es ab. Vielleicht folgen Sie einem Standard "tun Sie die App, dann stimmen Sie die SQL, dann tune die DB" -Ansatz. Und tune das Netzwerk und OS und ... –

+0

Danke Christopher. Da die aktuelle Architektur bereits die gewünschte Reaktionszeit erreichen kann, scheint die DB Seite kein Problem zu haben. –

Antwort

0

Erzielen Sie mit der aktuellen Architektur die gewünschte Reaktionszeit? Wenn ja, dann wäre theoretisch die Datenbank in der neuen Architektur nicht das Problem.

Können Sie uns mehr über das Node.js-Server-Setup erzählen? Verwenden Sie Verbindungspooling? Wenn ja, wie viele Verbindungen? Was hast du UV_THREADPOOL_SIZE festgelegt?

Haben Sie in Betracht gezogen, vor mehreren Node.js-Instanzen einen Load Balancer zu stehen, um die Last zu verteilen?

+0

Danke Dan. Ich bin in der Lage, die gewünschte Reaktionszeit mit der aktuellen Architektur zu erreichen. Also ich denke auch, dass die Datenbank kein Problem ist. Ja, ich verwende Verbindung Pooling mit Pool-Größe von 30 (10-30 Pool-Größe gibt die gleichen Ergebnisse). Da ich neu zu Knoten weiß nicht viel über UV_THREADPOOL_SIZE wissen, wird es in Betracht ziehen. In Bezug auf LB, die Frage ist, um das Ergebnis ohne LB zunächst zu sehen, ob Knoten in der Lage ist, damit umzugehen. Ist es ein realistisches Ziel, das ich versuche zu erreichen oder Knoten allein ist nicht in der Lage, ohne Änderungen an der Architektur wie Einführung von LB usw.? –

+0

Node.js verwendet einen Thread-Pool für einige asynchrone IO-Vorgänge. node-oracledb verwendet diesen Thread-Pool sehr oft. UV_THREADPOOL_SIZE ist eine Umgebungsvariable, mit der die Anzahl der Threads im Pool festgelegt wird. Der Standardwert ist 4, da die meisten CPUs heutzutage 4 Kerne haben. Wenn Sie jedoch den Standardwert belassen, können maximal 4 Verbindungen gleichzeitig ausgeführt werden.Versuchen Sie es auf 30 zu setzen, die Anzahl der Verbindungen, die Sie im Pool haben, und sehen Sie, wie das funktioniert. Denken Sie daran, mehr ist nicht immer besser, also experimentieren Sie mit verschiedenen Einstellungen. –

+0

Sie könnten das Handbuch https://github.com/oracle/node-oracledb/blob/v1.13.1/doc/api.md#numberthreads lesen, das UV_THREADPOOL_SIZE behandelt. Überprüfen Sie es auch für andere Tuning-Tipps. –