Redis
 sql >> Datenbank >  >> NoSQL >> Redis

So visualisieren Sie die Resque-Nutzung mit Node.js, WebSockets und Redis

Wollten Sie schon immer visualisieren, wie sich Ihre Resque-Warteschlangen, Mitarbeiter und Jobs entwickeln? In diesem Artikel lernen wir, wie man einige einfache Diagramme um die Resque-Komponenten herum erstellt.

Jobs an eine Hintergrundwarteschlange delegieren

Das Delegieren lang andauernder, rechenintensiver Jobs mit hoher Latenz an eine Worker-Warteschlange im Hintergrund ist ein gängiges Muster, das zum Erstellen skalierbarer Webanwendungen verwendet wird. Das Ziel besteht darin, Endnutzeranfragen mit der schnellstmöglichen Antwort zu bearbeiten, indem sichergestellt wird, dass alle teuren Jobs außerhalb des Anfrage-/Antwortzyklus bearbeitet werden.

Anfrage

Resque ist eine von Redis unterstützte Ruby-Bibliothek zum Erstellen von Hintergrundjobs, zum Platzieren in mehreren Warteschlangen und zum späteren Verarbeiten. Es ist für den Einsatz in Szenarien konzipiert, die ein hohes Volumen an Jobeingaben erfordern, da Resque Mechanismen bereitstellt, um die Sichtbarkeit und Zuverlässigkeit des Verhaltens sicherzustellen, während Statistiken über ein Web-Dashboard weitergeleitet werden.

Redis

Redis ist ein Open Source (BSD-lizenzierter) In-Memory-Datenstrukturspeicher, der als Datenbank, Cache und Nachrichtenbroker verwendet wird. Es unterstützt Datenstrukturen wie Strings, Hashes, Listen, Mengen, sortierte Mengen mit Bereichsabfragen, Bitmaps, Hyperloglogs und Geoindizes mit Radiusabfragen.

Node.js

Node.js ist eine Plattform, die auf der JavaScript-Laufzeitumgebung von Chrome zum einfachen Erstellen schneller und skalierbarer Netzwerkanwendungen basiert. Node.js verwendet ein ereignisgesteuertes, nicht blockierendes E/A-Modell, das es leicht und effizient macht und sich somit perfekt für datenintensive Echtzeitanwendungen eignet, die auf verteilten Geräten ausgeführt werden.

Express.js

Express.js ist ein Node.js-Framework. Node.js ist eine Plattform, die es ermöglicht, JavaScript außerhalb der Webbrowser zu verwenden, um Web- und Netzwerkanwendungen zu erstellen. Das bedeutet, dass Sie den serverseitigen und serverseitigen Code für eine Anwendung wie die meisten anderen Websprachen erstellen können, jedoch mit JavaScript.

Socket.IO

Socket.IO ist eine JavaScript-Bibliothek für Echtzeit-Webanwendungen. Es ermöglicht eine bidirektionale Kommunikation in Echtzeit zwischen Webclients und Servern. Es besteht aus zwei Teilen:einer clientseitigen Bibliothek, die im Browser ausgeführt wird, und einer serverseitigen Bibliothek für Node.js. Beide Komponenten haben nahezu identische APIs.

Heroku

Heroku ist eine Cloud-Plattform, mit der Unternehmen Apps erstellen, bereitstellen, überwachen und skalieren können – es ist der schnellste Weg von der Idee zur URL und umgeht all diese Infrastrukturprobleme.

In diesem Artikel wird davon ausgegangen, dass Redis, Node.js und Heroku Toolbelt bereits auf Ihrem Computer installiert sind.

Einrichtung:

  1. Laden Sie den Code aus dem ScaleGrid-Repository herunter.
  2. Führen Sie npm install aus, um die erforderlichen Komponenten zu installieren.
  3. Schließlich können Sie den Node-Server starten, indem Sie „node index.js“ ausführen. Sie können auch „nodemon“ ausführen, das auch auf Dateiänderungen achtet.

Sie können auch hier auf eine gehostete Version dieser App zugreifen.

Unsere Anwendung verwendet einen Resque-Port namens node-resque, mit dem wir Warteschlangen, Worker und Jobs überwachen können, die auf einem Redis-Cluster ausgeführt werden.

Die Grundlagen verstehen

Sobald Sie die App starten, müssen Sie Ihre Redis-Cluster-Anmeldeinformationen eingeben. Bitte beachten Sie, dass Resque auf Ihrem Cluster installiert und ausgeführt werden muss, damit dies richtig funktioniert.

Glücklicherweise bietet das vollständig verwaltete ScaleGrid for Redis™* eine hochleistungsfähige One-Click-Hosting-Lösung für Redis™. Wenn Sie noch kein Mitglied sind, können Sie sich hier für eine kostenlose 30-tägige Testversion anmelden, um loszulegen.

Melden Sie sich andernfalls bei Ihrem Dashboard an und erstellen Sie im Abschnitt „Redis™“ einen neuen Redis™-Cluster. Sobald Ihr Cluster betriebsbereit ist, können Sie die erforderlichen Details auf der Seite „Clusterdetails“ abrufen. Sie benötigen die folgenden Informationen:

  1. Host
  2. Hafen
  3. Passwort

Wenn die Verbindung erfolgreich ist, sollten Sie Diagramme wie die folgenden sehen:

Lassen Sie uns jede dieser Grafiken im Detail besprechen. Bitte beachten Sie, dass sich alle Diagramme selbst aktualisieren. Wenn Worker also Jobs in Ihrem Cluster verarbeiten, werden die Diagramme automatisch aktualisiert.

Gesamtaufgaben aller Warteschlangen

Die obigen Diagramme zeigen die Gesamtzahl der Resque-Warteschlangen in Ihrem Cluster und die Anzahl der Jobs, die in jeder Warteschlange enthalten sind. Resque speichert eine Jobwarteschlange in einer Redis-Liste namens „resque:queue:name“, und jedes Element in der Liste ist ein als JSON-String serialisierter Hash. Redis hat auch seine eigenen Verwaltungsstrukturen, einschließlich einer Liste „fehlgeschlagener“ Jobs. Resque-Namespaces versieht seine Daten innerhalb von Redis mit dem Präfix „resque:“, sodass sie mit anderen Benutzern geteilt werden können.

Worker/Jobs-Histogramm

Ein Resque-Worker verarbeitet Jobs. Auf Plattformen, die fork(2) unterstützen, wird der Worker ein Kind abzweigen, um jeden Job zu verarbeiten. Dies stellt sicher, dass beim Beginn des nächsten Auftrags eine saubere Weste vorhanden ist, und verringert das allmähliche Speicherwachstum sowie Ausfälle auf niedriger Ebene.

Es stellt auch sicher, dass Arbeiter immer auf Signale von Ihnen, ihrem Meister, hören und entsprechend reagieren können.

Das obige Diagramm zeigt alle Worker im Redis-Cluster. Ein Status von 1 zeigt an, dass dem Arbeiter ein Job zugewiesen wurde und in Bearbeitung ist, und ein Status von 0 zeigt an, dass der Arbeiter frei/inaktiv ist.

Jobstatus

Ein Resque-Job stellt eine Arbeitseinheit dar. Jeder Job befindet sich in einer einzelnen Warteschlange und hat ein zugeordnetes Nutzdatenobjekt. Die Payload ist ein Hash mit zwei Attributen:„class“ und „args“. Die `class` ist der Name der Ruby-Klasse, die verwendet werden soll, um den Job auszuführen. Die `args` sind ein Array von Argumenten, die an die `perform`-Methode auf Klassenebene der Ruby-Klasse übergeben werden sollten.

Das obige Diagramm zeigt den Status von Jobs als verarbeitet oder fehlgeschlagen. Ein Job wird dem fehlgeschlagenen Status hinzugefügt, wenn der Worker ihn nicht ausführen konnte. Hier ist ein Beispiel für ein einfaches Jobs-Objekt.

var jobs = {
  "add": {
    plugins: [ 'jobLock', 'retry' ],
    pluginOptions: {
      jobLock: {},
      retry: {
        retryLimit: 3,
        retryDelay: (1000 * 5),
      }
    },
    perform: function(a,b,callback){
      var answer = a + b;
      callback(null, answer);
    },
  },
  "subtract": {
    perform: function(a,b,callback){
      var answer = a - b;
      callback(null, answer);
    },
  },
};

  • Eine gehostete Version ist hier verfügbar.
  • Informationen zum Bereitstellen dieser Anwendung auf Heroku finden Sie in deren Dokumentation.
  • Der gesamte Quellcode ist auch auf GitHub verfügbar, damit Sie ihn forken und hier bearbeiten können.

Wie immer, wenn Sie etwas Großartiges bauen, twittern Sie uns darüber @scalegridio.