Har du någonsin velat visualisera hur det går för dina Resque-köer, arbetare och jobb? I den här artikeln ska vi lära oss hur man bygger några enkla grafer runt Resque-komponenterna.
Delegera jobb till en bakgrundskö
Delegeringen av långvariga, beräkningsmässigt dyra jobb med hög latens till en arbetskö i bakgrunden är ett vanligt mönster som används för att skapa skalbara webbapplikationer. Målet är att betjäna slutanvändarförfrågningar med snabbast möjliga svar genom att se till att alla dyra jobb hanteras utanför begäran/svarscykeln.
Beställ
Resque är ett Redis-stödt Ruby-bibliotek för att skapa bakgrundsjobb, placera dem i flera köer och bearbeta dem senare. Den är designad för användning i scenarier som kräver en stor mängd jobbanmälningar eftersom Resque tillhandahåller mekanismer för att säkerställa synlighet och tillförlitlighet för beteende samtidigt som statistik vidarebefordras via en webbinstrumentpanel.
Redis
Redis är en öppen källkod (BSD-licensierad), datastrukturlager i minnet, som används som en databas, cache och meddelandeförmedlare. Den stöder datastrukturer som strängar, hash, listor, uppsättningar, sorterade uppsättningar med intervallfrågor, bitmappar, hyperlogloggar och geospatiala index med radiefrågor.
Node.js
Node.js är en plattform byggd på Chromes JavaScript-runtime för att enkelt bygga snabba och skalbara nätverksapplikationer. Node.js använder en händelsedriven, icke-blockerande I/O-modell som gör den lätt och effektiv, och därmed perfekt för dataintensiva realtidsapplikationer som körs över distribuerade enheter.
Express.js
Express.js är ett Node.js-ramverk. Node.js är en plattform som gör att JavaScript kan användas utanför webbläsarna, för att skapa webb- och nätverksapplikationer. Det betyder att du kan skapa server- och serverkod för en applikation som de flesta andra webbspråk, men med JavaScript.
Socket.IO
Socket.IO är ett JavaScript-bibliotek för webbapplikationer i realtid. Det möjliggör dubbelriktad kommunikation i realtid mellan webbklienter och servrar. Den har två delar:ett bibliotek på klientsidan som körs på webbläsaren och ett bibliotek på serversidan för Node.js. Båda komponenterna har nästan identiska API:er.
Heroku
Heroku är en molnplattform som låter företag bygga, leverera, övervaka och skala appar – det är det snabbaste sättet att gå från idé till webbadress, och kringgår all denna infrastrukturhuvudvärk.
Den här artikeln förutsätter att du redan har Redis, Node.js och Heroku Toolbelt installerat på din maskin.
Inställningar:
- Ladda ned koden från ScaleGrids arkiv.
- Kör npm install för att installera de nödvändiga komponenterna.
- Slutligen kan du starta nodservern genom att göra "node index.js". Du kan också köra "nodemon" som tittar efter filändringar också.
Du kan också komma åt en värdversion av denna app här.
Vår applikation använder en port av Resque som kallas node-resque som låter oss titta på köer, arbetare och jobb som körs på ett Redis-kluster.
Förstå grunderna
Så snart du startar appen måste du ange dina Redis-klusteruppgifter. Observera att du måste ha Resque installerat och kört på ditt kluster för att detta ska fungera korrekt.
Lyckligtvis tillhandahåller fullt hanterad ScaleGrid for Redis™* en högpresterande värdlösning med ett klick för Redis™. Om du inte redan är medlem kan du registrera dig för en kostnadsfri 30-dagars provperiod här för att komma igång.
Annars loggar du in på din instrumentpanel och skapar ett nytt Redis™-kluster under Redis™-sektionen. När ditt kluster är igång kan du hämta de nödvändiga detaljerna från sidan med klusterdetaljer. Du behöver följande information:
- Värd
- Port
- Lösenord
Om anslutningen lyckas bör du se grafer som följande:
Låt oss diskutera var och en av dessa grafer i detalj. Observera att alla diagram uppdateras själv, så om arbetare bearbetar jobb i ditt kluster uppdateras diagrammen automatiskt.
Totalt antal uppgifter i alla köer
Ovanstående diagram visar det totala antalet Resque-köer i ditt kluster och antalet jobb som finns i varje kö. Resque lagrar en jobbkö i en Redis-lista med namnet "resque:queue:name", och varje element i listan är en hash serialiserad som en JSON-sträng. Redis har också sina egna ledningsstrukturer, inklusive en "misslyckad" jobblista. Resque namnrymmer sina data inom Redis med prefixet "resque:", så att de kan delas med andra användare.
Arbetare/jobbhistogram
En Resque-arbetare bearbetar jobb. På plattformar som stöder gaffel(2), kommer arbetaren att punga av ett barn för att bearbeta varje jobb. Detta säkerställer ett rent blad när du påbörjar nästa jobb och minskar den gradvisa minnestillväxten såväl som lågnivåfel.
Det säkerställer också att arbetarna alltid lyssnar på signaler från dig, deras mästare, och kan reagera därefter.
Grafen ovan visar alla arbetare i Redis-klustret. Tillståndet 1 indikerar att ett jobb har tilldelats arbetaren och pågår, och tillståndet 0 indikerar att arbetaren är ledig/ledig.
Jobbstatus
Ett Resque-jobb representerar en arbetsenhet. Varje jobb lever på en enda kö och har ett tillhörande nyttolastobjekt. Nyttolasten är en hash med två attribut:"class" och "args". `Klassen` är namnet på Ruby-klassen som ska användas för att köra jobbet. "Args" är en rad argument som ska skickas till Ruby-klassens "perform"-klassnivåmetod.
Grafen ovan visar status för jobb som bearbetade eller misslyckade. Ett jobb läggs till i det misslyckade tillståndet om arbetaren har misslyckats med att utföra det. Här är ett exempel på ett enkelt jobbobjekt.
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 värdversion finns tillgänglig här.
- För att distribuera det här programmet på Heroku, kolla in deras dokument.
- Hela källkoden är också tillgänglig på GitHub för dig att pussla och arbeta med här.
Som alltid, om du bygger något fantastiskt, twittra oss om det @scalegridio.