sql >> Database >  >> NoSQL >> Redis

Resque-gebruik visualiseren met Node.js, WebSockets en Redis

Altijd al willen visualiseren hoe uw Resque-wachtrijen, werknemers en taken het doen? In dit artikel gaan we leren hoe u enkele eenvoudige grafieken kunt bouwen rond de Resque-componenten.

Taken delegeren naar een wachtrij op de achtergrond

Het delegeren van langlopende, rekenkundig dure en hoge latentietaken naar een wachtrij van een achtergrondwerknemer is een veelvoorkomend patroon dat wordt gebruikt om schaalbare webapplicaties te maken. Het doel is om verzoeken van eindgebruikers zo snel mogelijk te beantwoorden door ervoor te zorgen dat alle dure taken buiten de verzoek-/antwoordcyclus worden afgehandeld.

Resque

Resque is een door Redis ondersteunde Ruby-bibliotheek voor het maken van achtergrondtaken, deze in meerdere wachtrijen te plaatsen en later te verwerken. Het is ontworpen voor gebruik in scenario's die een groot aantal taakinvoeringen vereisen, aangezien Resque mechanismen biedt om zichtbaarheid en betrouwbaarheid van gedrag te garanderen terwijl statistieken worden doorgestuurd via een webdashboard.

Opnieuw

Redis is een open source (BSD-licentie), in-memory datastructuuropslag, die wordt gebruikt als database, cache en berichtenmakelaar. Het ondersteunt datastructuren zoals strings, hashes, lijsten, sets, gesorteerde sets met bereikquery's, bitmaps, hyperloglogs en georuimtelijke indexen met radiusquery's.

Node.js

Node.js is een platform gebouwd op Chrome's JavaScript-runtime voor het eenvoudig bouwen van snelle en schaalbare netwerkapplicaties. Node.js gebruikt een gebeurtenisgestuurd, niet-blokkerend I/O-model dat het lichtgewicht en efficiënt maakt, en dus perfect voor data-intensieve realtime-applicaties die op gedistribueerde apparaten worden uitgevoerd.

Express.js

Express.js is een Node.js-framework. Node.js is een platform waarmee JavaScript buiten de webbrowser kan worden gebruikt voor het maken van web- en netwerkapplicaties. Dit betekent dat u de server en server-side code kunt maken voor een toepassing zoals de meeste andere webtalen, maar dan met JavaScript.

Socket.IO

Socket.IO is een JavaScript-bibliotheek voor realtime webapplicaties. Het maakt realtime, bidirectionele communicatie tussen webclients en servers mogelijk. Het bestaat uit twee delen:een bibliotheek aan de clientzijde die in de browser wordt uitgevoerd en een bibliotheek aan de serverzijde voor Node.js. Beide componenten hebben bijna identieke API's.

Heroku

Heroku is een cloudplatform waarmee bedrijven apps kunnen bouwen, leveren, monitoren en schalen - het is de snelste manier om van idee naar URL te gaan, waarbij al die infrastructuurproblemen worden omzeild.

In dit artikel wordt ervan uitgegaan dat Redis, Node.js en de Heroku Toolbelt al op uw computer zijn geïnstalleerd.

Instellen:

  1. Download de code uit de repository van ScaleGrid.
  2. Voer npm install uit om de benodigde componenten te installeren.
  3. Ten slotte kunt u de node-server starten door "node index.js" uit te voeren. U kunt ook een "nodemon" uitvoeren die ook let op bestandswijzigingen.

Je kunt hier ook toegang krijgen tot een gehoste versie van deze app.

Onze applicatie gebruikt een poort van Resque, node-resque genaamd, waarmee we wachtrijen, werknemers en taken kunnen bekijken die op een Redis-cluster worden uitgevoerd.

De basis begrijpen

Zodra u de app start, moet u uw Redis-clusterreferenties invoeren. Houd er rekening mee dat Resque op uw cluster moet zijn geïnstalleerd en actief is om dit correct te laten werken.

Gelukkig biedt de volledig beheerde ScaleGrid voor Redis™* een hoogwaardige hostingoplossing met één klik voor Redis™. Als je nog geen lid bent, kun je je hier aanmelden voor een gratis proefperiode van 30 dagen om aan de slag te gaan.

Log anders in op uw dashboard en maak een nieuw Redis™-cluster aan onder het gedeelte Redis™. Zodra uw cluster actief is, kunt u de benodigde details ophalen op de pagina met clusterdetails. Je hebt de volgende informatie nodig:

  1. Gastheer
  2. Poort
  3. Wachtwoord

Als de verbinding succesvol is, ziet u grafieken zoals de volgende:

Laten we elk van deze grafieken in detail bespreken. Houd er rekening mee dat alle grafieken zichzelf bijwerken, dus als werknemers taken op uw cluster verwerken, worden de grafieken automatisch bijgewerkt.

Totaal aantal taken in alle wachtrijen

De bovenstaande grafieken tonen het totale aantal Resque-wachtrijen op uw cluster en het aantal taken in elke wachtrij. Resque slaat een taakwachtrij op in een Redis-lijst met de naam "resque:queue:name", en elk element in de lijst is een hash die is geserialiseerd als een JSON-tekenreeks. Redis heeft ook zijn eigen managementstructuren, waaronder een "mislukte" banenlijst. Resque-naamruimten zijn gegevens binnen Redis met het voorvoegsel "resque:", zodat het kan worden gedeeld met andere gebruikers.

Histogram werknemer/taken

Een Resque-medewerker verwerkt taken. Op platforms die vork (2) ondersteunen, zal de werknemer een kind afsplitsen om elke taak te verwerken. Dit zorgt voor een schone lei bij het begin van de volgende taak en vermindert de geleidelijke geheugengroei en storingen op laag niveau.

Het zorgt er ook voor dat werknemers altijd luisteren naar signalen van u, hun meester, en dienovereenkomstig kunnen reageren.

De bovenstaande grafiek toont alle werknemers in het Redis-cluster. De status 1 geeft aan dat een taak aan de werknemer is toegewezen en in uitvoering is, en de status 0 geeft aan dat de werknemer vrij/inactief is.

Taakstatus

Een Resque-taak vertegenwoordigt een werkeenheid. Elke taak staat op een enkele wachtrij en heeft een bijbehorend payload-object. De payload is een hash met twee attributen:`class` en `args`. De `class` is de naam van de Ruby-klasse die moet worden gebruikt om de taak uit te voeren. De `args` zijn een reeks argumenten die moeten worden doorgegeven aan de `perform`-methode op klasseniveau van de Ruby-klasse.

De bovenstaande grafiek toont de status van taken als verwerkt of mislukt. Een taak wordt toegevoegd aan de mislukte status als de werknemer deze niet heeft uitgevoerd. Hier is een voorbeeld van een eenvoudig Jobs-object.

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);
    },
  },
};

  • Een gehoste versie is hier beschikbaar.
  • Bekijk hun documenten voor het implementeren van deze applicatie op Heroku.
  • De volledige broncode is ook beschikbaar op GitHub zodat je hier kunt forken en aan kunt werken.

Zoals altijd, als je iets geweldigs bouwt, tweet ons erover @scalegridio.


  1. Proactieve MongoDB Monitoring (Developer Studio/Advisors-hoek)

  2. Redis vs. MongoDB:databases in het geheugen vergelijken met Percona Memory Engine

  3. Algoritme voor gebruikersovereenkomst

  4. Kan geen verbinding maken met Redis vanuit Docker