sql >> Databáze >  >> NoSQL >> Redis

Jak vizualizovat použití Resque pomocí Node.js, WebSockets a Redis

Chtěli jste si někdy představit, jak si vedou vaše fronty Resque, pracovníci a úlohy? V tomto článku se naučíme, jak vytvořit několik jednoduchých grafů kolem komponent Resque.

Delegování úloh do fronty na pozadí

Delegování dlouhotrvajících, výpočetně nákladných úloh s vysokou latencí do fronty pracovníků na pozadí je běžný vzor používaný k vytváření škálovatelných webových aplikací. Cílem je obsluhovat požadavky koncových uživatelů s co nejrychlejší odezvou a zajistit, aby všechny drahé úlohy byly zpracovány mimo cyklus žádost/odpověď.

Zrušit žádost

Resque je knihovna Ruby podporovaná Redis pro vytváření úloh na pozadí, jejich umístění do více front a pozdější zpracování. Je navržen pro použití ve scénářích, které vyžadují velký objem zadání úkolů, protože Resque poskytuje mechanismy pro zajištění viditelnosti a spolehlivosti chování při předávání statistik přes webový panel.

Redis

Redis je open source (licencovaný BSD), úložiště datových struktur v paměti, používané jako databáze, mezipaměť a zprostředkovatel zpráv. Podporuje datové struktury, jako jsou řetězce, hash, seznamy, sady, seřazené sady s dotazy na rozsah, bitmapy, hyperlogy a geoprostorové indexy s poloměrovými dotazy.

Node.js

Node.js je platforma postavená na běhovém prostředí JavaScriptu Chrome pro snadné vytváření rychlých a škálovatelných síťových aplikací. Node.js používá událostmi řízený, neblokující I/O model, díky kterému je lehký a efektivní, a proto je ideální pro datově náročné aplikace v reálném čase, které běží napříč distribuovanými zařízeními.

Express.js

Express.js je framework Node.js. Node.js je platforma, která umožňuje použití JavaScriptu mimo webové prohlížeče pro vytváření webových a síťových aplikací. To znamená, že můžete vytvořit server a kód na straně serveru pro aplikaci jako většina ostatních webových jazyků, ale pomocí JavaScriptu.

Socket.IO

Socket.IO je JavaScriptová knihovna pro webové aplikace v reálném čase. Umožňuje obousměrnou komunikaci mezi webovými klienty a servery v reálném čase. Má dvě části:knihovnu na straně klienta, která běží v prohlížeči, a knihovnu na straně serveru pro Node.js. Obě součásti mají téměř identická rozhraní API.

Heroku

Heroku je cloudová platforma, která společnostem umožňuje vytvářet, dodávat, monitorovat a škálovat aplikace – je to nejrychlejší způsob, jak přejít od nápadu k adrese URL a obejít všechny ty problémy s infrastrukturou.

Tento článek předpokládá, že již máte na svém počítači nainstalované Redis, Node.js a Heroku Toolbelt.

Nastavení:

  1. Stáhněte si kód z úložiště ScaleGrid.
  2. Spusťte npm install a nainstalujte potřebné součásti.
  3. Nakonec můžete spustit uzlový server zadáním „node index.js“. Můžete také spustit „nodemon“, který také sleduje změny souborů.

Zde také můžete přistupovat k hostované verzi této aplikace.

Naše aplikace používá port Resque zvaný node-resque, který nám umožňuje sledovat fronty, pracovníky a úlohy běžící na clusteru Redis.

Porozumění základům

Jakmile aplikaci spustíte, musíte zadat přihlašovací údaje ke clusteru Redis. Pamatujte, že musíte mít na svém clusteru nainstalovaný a spuštěný Resque, aby to fungovalo správně.

Naštěstí plně spravovaná ScaleGrid pro Redis™* poskytuje vysoce výkonné řešení pro hosting jediným kliknutím pro Redis™. Pokud ještě nejste členem, můžete se zaregistrovat k bezplatné 30denní zkušební verzi zde a začít.

V opačném případě se přihlaste na svůj řídicí panel a vytvořte nový cluster Redis™ v části Redis™. Jakmile bude váš cluster spuštěn a spuštěn, můžete si potřebné podrobnosti vyzvednout na stránce Podrobnosti clusteru. Budete potřebovat následující informace:

  1. Hostitel
  2. Port
  3. Heslo

Pokud je připojení úspěšné, měli byste vidět grafy jako je tento:

Pojďme diskutovat o každém z těchto grafů podrobně. Upozorňujeme, že všechny grafy se samy aktualizují, takže pokud pracovníci zpracovávají úlohy ve vašem clusteru, grafy se automaticky aktualizují.

Celkový počet úkolů ve všech frontách

Výše uvedené grafy ukazují celkový počet front Resque ve vašem clusteru a počet úloh obsažených v každé frontě. Resque ukládá frontu úloh do seznamu Redis s názvem „resque:queue:name“ a každý prvek v seznamu je hash serializovaný jako řetězec JSON. Redis má také své vlastní struktury řízení, včetně seznamu „neúspěšných“ úloh. Resque umisťuje svá data v Redis do předpony „resque:“, takže je lze sdílet s ostatními uživateli.

Histogram pracovníků/pracovních míst

Pracovník Resque zpracovává úlohy. Na platformách, které podporují fork(2), pracovník oddělí dítě, aby zpracoval každou úlohu. To zajišťuje čistý štít při zahájení další úlohy a omezuje postupný růst paměti a také nízkoúrovňová selhání.

Zajišťuje také, že pracovníci vždy poslouchají signály od vás, svého pána, a mohou podle toho reagovat.

Výše uvedený graf ukazuje všechny pracovníky v clusteru Redis. Stav 1 znamená, že úloha byla přidělena pracovníkovi a probíhá, a stav 0 znamená, že pracovník je volný/nečinný.

Stav úlohy

Úloha Resque představuje jednotku práce. Každá úloha žije v jedné frontě a má přidružený objekt užitečného zatížení. Užitná zátěž je hash se dvěma atributy:`class` a `args`. ,třída` je název třídy Ruby, která by měla být použita ke spuštění úlohy. Argumenty jsou polem argumentů, které by měly být předány metodě třídy Ruby ,perform` na úrovni třídy.

Výše uvedený graf ukazuje stav úloh jako zpracovaných nebo neúspěšných. Úloha je přidána do neúspěšného stavu, pokud se ji pracovníkovi nepodařilo provést. Zde je příklad jednoduchého objektu Jobs.

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

  • Hostovaná verze je k dispozici zde.
  • Pokud chcete tuto aplikaci nasadit na Heroku, podívejte se na jejich dokumenty.
  • Celý zdrojový kód je také dostupný na GitHubu, kde si ho můžete rozdělit a pracovat.

Jako vždy, pokud postavíte něco úžasného, ​​napište nám o tom tweet @scalegridio.


  1. Je možné vytvořit více cache obchodů pomocí Spring's abstrakce mezipaměti s redis?

  2. Jak mohu v MongoDB mapreduce sloučit objekt hodnot?

  3. Aktualizujte pole s více podmínkami v mongodb

  4. MongoDB .NET negeneruje _id na upsert