Sollte ich die Redis-Verbindung zwischen Dateien / Modulen teilen?

9

Ich entwickle eine node.js-App und benötige eine starke Redis-Nutzung. Die App wird über 8 CPU-Kerne verteilt.

Momentan habe ich 100 gleichzeitige Verbindungen zu Redis, weil jeder Arbeiter pro CPU mehrere Module hat, auf denen cluster läuft.

Szenario A:

Datei1.js:

%Vor%

Datei2.js

%Vor%

SZENARIO B:

redis.js

%Vor%

Datei1.js

%Vor%

Datei2.js

%Vor%

Welcher Ansatz ist besser: Erstellen Sie eine neue Redis-Instanz in jeder neuen Datei, die ich einführe (Szenario A), oder erstellen Sie eine globale Redis-Verbindung (Szenario B) und teilen Sie diese Verbindung über alle Module hinweg. Was sind die Nachteile / Vorteile jeder Lösung?

Vielen Dank im Voraus!

    
Pono 17.05.2013, 19:18
quelle

2 Antworten

4

Wenn ich mit einer solchen Frage konfrontiert werde, denke ich generell an drei grundlegende Fragen.

  1. Was ist besser lesbar?
  2. Was ermöglicht eine bessere Wiederverwendung von Code?
  3. Was ist effizienter?

Nicht unbedingt in dieser Reihenfolge, da es vom Szenario abhängt, aber ich glaube, dass in diesem Fall alle drei Fragen für Option B sprechen. Wenn Sie jemals Optionen für createClient ändern müssen, müssen Sie sie in jeder Datei bearbeiten, die sie verwendet. In Option A ist jede Datei, die redis verwendet, und Option B ist nur redis.js. Auch wenn ein neueres oder anderes Produkt herauskommt und Sie redis ersetzen möchten, wäre es machbar, redis.js als Wrapper für ein anderes Paket oder sogar einen neueren Redis-Client zu verwenden, der die Konvertierungszeit erheblich verkürzt.

Globals sind generell eine schlechte Sache, aber in diesem Beispiel sollte redis.js keinen veränderlichen Zustand speichern, also gibt es kein Problem mit einem Global / Singleton in diesem Kontext.

    
Cody Gustafson 11.10.2014 23:02
quelle
1

Sowohl Node als auch Redis können ziemlich viele Verbindungen verarbeiten, also ist das kein Problem.

In Ihrer Situation erstellen Sie Redis-Verbindungen beim Start Ihrer Anwendung, sodass die Anzahl der Verbindungen, die Sie einrichten, begrenzt ist (in dem Sinne, dass nach dem Start Ihrer Anwendung die Anzahl der Verbindungen konstant ist ).

Situationen, in denen Sie die gleiche Verbindung wiederverwenden möchten, befinden sich in sehr dynamischen Situationen, zum Beispiel mit einem HTTP-Server, auf dem Sie Redis für jede Anfrage abfragen müssen. Das Erstellen einer neuen Verbindung für jede Anforderung wäre eine Verschwendung von Ressourcen (Verbindungen werden ständig erstellt und zerstört) und die Wiederverwendung einer Verbindung für jede Anforderung wäre vorzuziehen.

Was für eines der beiden Szenarios ich bevorzuge, ich lehne mich selbst Szenario A zu.

    
robertklep 17.05.2013 19:44
quelle

Tags und Links