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

Come visualizzare l'utilizzo di Resque con Node.js, WebSockets e Redis

Hai mai desiderato visualizzare come stanno andando le tue code, i tuoi dipendenti e i tuoi lavori Resque? In questo articolo impareremo come costruire alcuni semplici grafici attorno ai componenti di Resque.

Delega dei lavori a una coda in background

La delega di lavori di lunga durata, computazionalmente costosi e ad alta latenza a una coda di lavoro in background è un modello comune utilizzato per creare applicazioni Web scalabili. L'obiettivo è soddisfare le richieste degli utenti finali con la risposta più rapida possibile, garantendo che tutti i lavori costosi vengano gestiti al di fuori del ciclo di richiesta/risposta.

Richiedi

Resque è una libreria Ruby supportata da Redis per creare lavori in background, posizionarli su più code ed elaborarli in un secondo momento. È progettato per l'uso in scenari che richiedono un volume elevato di voci di lavoro poiché Resque fornisce meccanismi per garantire visibilità e affidabilità del comportamento durante la trasmissione di statistiche tramite una dashboard web.

Redis

Redis è un archivio di strutture dati in memoria open source (con licenza BSD), utilizzato come database, cache e broker di messaggi. Supporta strutture di dati come stringhe, hash, elenchi, set, set ordinati con query di intervallo, bitmap, hyperloglog e indici geospaziali con query di raggio.

Node.js

Node.js è una piattaforma basata sul runtime JavaScript di Chrome per creare facilmente applicazioni di rete veloci e scalabili. Node.js utilizza un modello I/O non bloccante basato su eventi che lo rende leggero ed efficiente e quindi perfetto per applicazioni in tempo reale ad alta intensità di dati che funzionano su dispositivi distribuiti.

Express.js

Express.js è un framework Node.js. Node.js è una piattaforma che consente di utilizzare JavaScript al di fuori dei browser Web, per la creazione di applicazioni Web e di rete. Ciò significa che puoi creare il server e il codice lato server per un'applicazione come la maggior parte degli altri linguaggi web, ma utilizzando JavaScript.

Socket.IO

Socket.IO è una libreria JavaScript per applicazioni Web in tempo reale. Consente la comunicazione bidirezionale in tempo reale tra client Web e server. Ha due parti:una libreria lato client che viene eseguita sul browser e una libreria lato server per Node.js. Entrambi i componenti hanno API quasi identiche.

Heroku

Heroku è una piattaforma cloud che consente alle aziende di creare, distribuire, monitorare e ridimensionare le app:è il modo più veloce per passare dall'idea all'URL, aggirando tutti quei grattacapi dell'infrastruttura.

Questo articolo presuppone che tu abbia già Redis, Node.js e Heroku Toolbelt installati sul tuo computer.

Configurazione:

  1. Scarica il codice dal repository di ScaleGrid.
  2. Esegui npm install per installare i componenti necessari.
  3. Infine, puoi avviare il server del nodo eseguendo "node index.js". Puoi anche eseguire "nodemon" che controlla anche le modifiche ai file.

Puoi anche accedere a una versione ospitata di questa app qui.

La nostra applicazione utilizza una porta di Resque chiamata node-resque che ci consente di controllare le code, i lavoratori e i lavori in esecuzione su un cluster Redis.

Capire le basi

Non appena avvii l'app, devi inserire le credenziali del tuo cluster Redis. Tieni presente che devi avere Resque installato e in esecuzione sul tuo cluster affinché funzioni correttamente.

Fortunatamente, ScaleGrid per Redis™* completamente gestito fornisce una soluzione di hosting ad alte prestazioni con un clic per Redis™. Se non sei già un membro, puoi registrarti per una prova gratuita di 30 giorni qui per iniziare.

Altrimenti, accedi alla tua dashboard e crea un nuovo cluster Redis™ nella sezione Redis™. Una volta che il tuo cluster è attivo e funzionante, puoi raccogliere i dettagli necessari dalla pagina dei dettagli del cluster. Avrai bisogno delle seguenti informazioni:

  1. Ospite
  2. Porto
  3. Password

Se la connessione ha esito positivo, dovresti visualizzare grafici come i seguenti:

Discutiamo ciascuno di questi grafici in dettaglio. Tieni presente che tutti i grafici si aggiornano automaticamente, quindi se i lavoratori stanno elaborando lavori nel tuo cluster, i grafici si aggiorneranno automaticamente.

Attività totali su tutte le code

I grafici sopra mostrano il numero totale di code Resque sul tuo cluster e il numero di lavori contenuti in ciascuna coda. Resque archivia una coda di lavoro in un elenco Redis denominato "resque:queue:name" e ogni elemento nell'elenco è un hash serializzato come stringa JSON. Redis ha anche proprie strutture di gestione, inclusa una lista di lavori "falliti". Resque inserisce i suoi dati all'interno di Redis con il prefisso "resque:", in modo che possano essere condivisi con altri utenti.

Istogramma lavoratore/lavori

Un lavoratore Resque elabora i lavori. Sulle piattaforme che supportano fork(2), il lavoratore sborserà un figlio per elaborare ogni lavoro. Ciò garantisce una tabula rasa all'inizio del lavoro successivo e riduce la crescita graduale della memoria e gli errori di basso livello.

Garantisce inoltre che i lavoratori ascoltino sempre i segnali da te, il loro padrone, e possano reagire di conseguenza.

Il grafico sopra mostra tutti i lavoratori del cluster Redis. Lo stato 1 indica che un lavoro è stato assegnato al lavoratore ed è in corso, mentre lo stato 0 indica che il lavoratore è libero/inattivo.

Stato del lavoro

Un lavoro Resque rappresenta un'unità di lavoro. Ogni lavoro risiede su una singola coda e ha un oggetto payload associato. Il payload è un hash con due attributi:`class` e `args`. La `classe` è il nome della classe Ruby che dovrebbe essere usata per eseguire il lavoro. Gli `args` sono un array di argomenti che dovrebbero essere passati al metodo a livello di classe `perform` della classe Ruby.

Il grafico sopra mostra lo stato dei lavori come elaborati o non riusciti. Un lavoro viene aggiunto allo stato non riuscito se il lavoratore non è riuscito a eseguirlo. Ecco un esempio di un semplice oggetto 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);
    },
  },
};

  • Qui è disponibile una versione in hosting.
  • Per distribuire questa applicazione su Heroku, dai un'occhiata ai loro documenti.
  • L'intero codice sorgente è disponibile anche su GitHub per il fork e il lavoro qui.

Come sempre, se costruisci qualcosa di fantastico, scrivici un tweet su @scalegridio.