sql >> Database teknologi >  >> NoSQL >> Redis

Sådan visualiseres Resque-brug med Node.js, WebSockets og Redis

Har du nogensinde ønsket at visualisere, hvordan dine Resque-køer, arbejdere og job klarer sig? I denne artikel skal vi lære, hvordan man bygger nogle simple grafer omkring Resque-komponenterne.

Delegering af job til en baggrundskø

Delegeringen af ​​langvarige, beregningsmæssigt dyre jobs med høj latency til en arbejdskø i baggrunden er et almindeligt mønster, der bruges til at skabe skalerbare webapplikationer. Målet er at betjene slutbrugeranmodninger med det hurtigst mulige svar ved at sikre, at alle dyre opgaver håndteres uden for anmodnings-/svar-cyklussen.

Forespørgsel

Resque er et Redis-støttet Ruby-bibliotek til at skabe baggrundsjob, placere dem i flere køer og behandle dem senere. Det er designet til brug i scenarier, der kræver en stor mængde jobangivelser, da Resque leverer mekanismer til at sikre synlighed og pålidelighed af adfærd, mens statistik videresendes gennem et web-dashboard.

Redis

Redis er et open source (BSD-licenseret), datastrukturlager i hukommelsen, der bruges som database, cache og meddelelsesmægler. Det understøtter datastrukturer såsom strenge, hashes, lister, sæt, sorterede sæt med områdeforespørgsler, bitmaps, hyperloglogs og geospatiale indekser med radiusforespørgsler.

Node.js

Node.js er en platform bygget på Chromes JavaScript-runtime for nemt at bygge hurtige og skalerbare netværksapplikationer. Node.js bruger en begivenhedsdrevet, ikke-blokerende I/O-model, der gør den let og effektiv og dermed perfekt til dataintensive realtidsapplikationer, der kører på tværs af distribuerede enheder.

Express.js

Express.js er en Node.js-ramme. Node.js er en platform, der tillader JavaScript at blive brugt uden for webbrowsere til at skabe web- og netværksapplikationer. Det betyder, at du kan oprette server- og server-side-koden til en applikation ligesom de fleste andre websprog, men ved at bruge JavaScript.

Socket.IO

Socket.IO er et JavaScript-bibliotek til webapplikationer i realtid. Det muliggør tovejskommunikation i realtid mellem webklienter og servere. Det har to dele:et klientsidebibliotek, der kører på browseren, og et serversidebibliotek til Node.js. Begge komponenter har næsten identiske API'er.

Heroku

Heroku er en cloud-platform, der lader virksomheder bygge, levere, overvåge og skalere apps – det er den hurtigste måde at gå fra idé til URL-adresse og omgå al den infrastruktur-hovedpine.

Denne artikel antager, at du allerede har Redis, Node.js og Heroku Toolbelt installeret på din maskine.

Opsætning:

  1. Download koden fra ScaleGrids lager.
  2. Kør npm install for at installere de nødvendige komponenter.
  3. Til sidst kan du starte nodeserveren ved at lave "node index.js". Du kan også køre "nodemon", som også holder øje med filændringer.

Du kan også få adgang til en hostet version af denne app her.

Vores applikation bruger en port af Resque kaldet node-resque, der giver os mulighed for at se køer, arbejdere og job, der kører på en Redis-klynge.

Forstå det grundlæggende

Så snart du starter appen, skal du indtaste dine Redis-klyngeoplysninger. Bemærk venligst, at du skal have Resque installeret og køre på din klynge for at dette fungerer korrekt.

Heldigvis giver fuldt administreret ScaleGrid for Redis™* en højtydende hostingløsning med ét klik til Redis™. Hvis du ikke allerede er medlem, kan du tilmelde dig en gratis 30-dages prøveperiode her for at komme i gang.

Ellers skal du logge ind på dit dashboard og oprette en ny Redis™-klynge under Redis™-sektionen. Når din klynge er oppe at køre, kan du hente de nødvendige detaljer fra siden med klyngedetaljer. Du skal bruge følgende oplysninger:

  1. Vært
  2. Port
  3. Adgangskode

Hvis forbindelsen lykkes, bør du se grafer som følgende:

Lad os diskutere hver af disse grafer i detaljer. Bemærk, at alle graferne er selvopdaterende, så hvis arbejdere behandler job på din klynge, opdateres graferne automatisk.

Samlet antal opgaver på tværs af alle køer

Ovenstående grafer viser det samlede antal Resque-køer på din klynge og antallet af job i hver kø. Resque gemmer en jobkø i en Redis-liste med navnet "resque:queue:name", og hvert element på listen er en hash, der er serialiseret som en JSON-streng. Redis har også sine egne ledelsesstrukturer, herunder en "mislykket" jobliste. Resque navngiver sine data i Redis med præfikset "resque:", så det kan deles med andre brugere.

Histogram for arbejder/job

En Resque-medarbejder behandler opgaver. På platforme, der understøtter gaffel(2), vil arbejderen gaffel et barn af for at behandle hvert job. Dette sikrer en ren tavle, når du begynder på det næste job og skærer ned på gradvis hukommelsesvækst samt fejl på lavt niveau.

Det sikrer også, at arbejderne altid lytter til signaler fra dig, deres herre, og kan reagere i overensstemmelse hermed.

Ovenstående graf viser alle arbejderne på Redis-klyngen. En tilstand på 1 angiver, at et job er blevet tildelt til arbejderen og er i gang, og en tilstand på 0 angiver, at arbejderen er ledig/inaktiv.

Jobstatus

Et Resque-job repræsenterer en arbejdsenhed. Hvert job lever på en enkelt kø og har et tilknyttet nyttelastobjekt. Nyttelasten er en hash med to attributter:"klasse" og "args". 'Klassen' er navnet på Ruby-klassen, som skal bruges til at køre jobbet. "Args" er en række argumenter, som skal videregives til Ruby-klassens "perform"-metode på klasseniveau.

Ovenstående graf viser status for job som behandlet eller mislykket. Et job føjes til den mislykkede tilstand, hvis arbejderen har undladt at udføre det. Her er et eksempel på et simpelt jobobjekt.

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

  • En hostet version er tilgængelig her.
  • For at implementere denne applikation på Heroku, tjek deres dokumenter.
  • Hele kildekoden er også tilgængelig på GitHub, som du kan arbejde videre med her.

Som altid, hvis du bygger noget fantastisk, så tweet os om det @scalegridio.


  1. Hvordan bruger StackExchange.Redis flere endepunkter og forbindelser?

  2. Redis Vs RabbitMQ som datamægler/beskedsystem mellem Logstash og elasticsearch

  3. HBase prøvetabel

  4. Cloudera Replication Plugin muliggør x-platform replikering til Apache HBase