Redis
 sql >> Base de données >  >> NoSQL >> Redis

Comment visualiser l'utilisation de Resque avec Node.js, WebSockets et Redis

Vous avez toujours voulu visualiser l'état de vos files d'attente, de vos travailleurs et de vos tâches Resque ? Dans cet article, nous allons apprendre à construire des graphiques simples autour des composants Resque.

Déléguer des tâches à une file d'attente en arrière-plan

La délégation de travaux de longue durée, coûteux en temps de calcul et à latence élevée à une file d'attente de travail en arrière-plan est un modèle courant utilisé pour créer des applications Web évolutives. L'objectif est de répondre aux demandes des utilisateurs finaux avec la réponse la plus rapide possible en s'assurant que toutes les tâches coûteuses sont traitées en dehors du cycle demande/réponse.

Requête

Resque est une bibliothèque Ruby basée sur Redis pour créer des tâches en arrière-plan, les placer sur plusieurs files d'attente et les traiter ultérieurement. Il est conçu pour être utilisé dans des scénarios nécessitant un volume élevé d'entrées d'emploi, car Resque fournit des mécanismes pour garantir la visibilité et la fiabilité du comportement tout en relayant les statistiques via un tableau de bord Web.

Redis

Redis est un magasin de structure de données en mémoire open source (sous licence BSD), utilisé comme base de données, cache et courtier de messages. Il prend en charge les structures de données telles que les chaînes, les hachages, les listes, les ensembles, les ensembles triés avec des requêtes de plage, les bitmaps, les hyperloglogs et les index géospatiaux avec des requêtes de rayon.

Node.js

Node.js est une plate-forme basée sur l'environnement d'exécution JavaScript de Chrome pour créer facilement des applications réseau rapides et évolutives. Node.js utilise un modèle d'E/S non bloquant piloté par les événements qui le rend léger et efficace, et donc parfait pour les applications en temps réel gourmandes en données qui s'exécutent sur des appareils distribués.

Express.js

Express.js est un framework Node.js. Node.js est une plate-forme qui permet d'utiliser JavaScript en dehors des navigateurs Web, pour créer des applications Web et réseau. Cela signifie que vous pouvez créer le code serveur et côté serveur pour une application comme la plupart des autres langages Web, mais en utilisant JavaScript.

Socket.IO

Socket.IO est une bibliothèque JavaScript pour les applications Web en temps réel. Il permet une communication bidirectionnelle en temps réel entre les clients Web et les serveurs. Il comporte deux parties :une bibliothèque côté client qui s'exécute sur le navigateur et une bibliothèque côté serveur pour Node.js. Les deux composants ont des API presque identiques.

Héroku

Heroku est une plate-forme cloud qui permet aux entreprises de créer, de diffuser, de surveiller et de faire évoluer des applications. C'est le moyen le plus rapide de passer de l'idée à l'URL, en évitant tous ces problèmes d'infrastructure.

Cet article suppose que Redis, Node.js et Heroku Toolbelt sont déjà installés sur votre machine.

Configuration :

  1. Téléchargez le code depuis le référentiel de ScaleGrid.
  2. Exécutez npm install pour installer les composants nécessaires.
  3. Enfin, vous pouvez démarrer le serveur de nœuds en faisant "node index.js". Vous pouvez également exécuter "nodemon" qui surveille également les modifications de fichiers.

Vous pouvez également accéder à une version hébergée de cette application ici.

Notre application utilise un port de Resque appelé node-resque qui nous permet de surveiller les files d'attente, les travailleurs et les travaux exécutés sur un cluster Redis.

Comprendre les bases

Dès que vous démarrez l'application, vous devez saisir les informations d'identification de votre cluster Redis. Veuillez noter que Resque doit être installé et en cours d'exécution sur votre cluster pour que cela fonctionne correctement.

Heureusement, ScaleGrid pour Redis™* entièrement géré fournit une solution d'hébergement hautes performances en un clic pour Redis™. Si vous n'êtes pas déjà membre, vous pouvez vous inscrire pour un essai gratuit de 30 jours ici pour commencer.

Sinon, connectez-vous à votre tableau de bord et créez un nouveau cluster Redis™ dans la section Redis™. Une fois que votre cluster est opérationnel, vous pouvez récupérer les détails nécessaires sur la page des détails du cluster. Vous aurez besoin des informations suivantes :

  1. Hébergeur
  2. Port
  3. Mot de passe

Si la connexion réussit, vous devriez voir des graphiques comme celui-ci :

Examinons chacun de ces graphiques en détail. Veuillez noter que tous les graphiques se mettent à jour automatiquement. Ainsi, si les travailleurs traitent des tâches sur votre cluster, les graphiques se mettront à jour automatiquement.

Tâches totales dans toutes les files d'attente

Les graphiques ci-dessus montrent le nombre total de files d'attente Resque sur votre cluster et le nombre de travaux contenus dans chaque file d'attente. Resque stocke une file d'attente de travaux dans une liste Redis nommée "resque:queue:name", et chaque élément de la liste est un hachage sérialisé en tant que chaîne JSON. Redis a également ses propres structures de gestion, y compris une liste de tâches "échouées". Resque place ses données dans Redis avec le préfixe "resque :", afin qu'elles puissent être partagées avec d'autres utilisateurs.

Histogramme des travailleurs/emplois

Un agent Resque traite les tâches. Sur les plates-formes prenant en charge fork(2), le travailleur débranchera un enfant pour traiter chaque tâche. Cela garantit une table rase au début de la tâche suivante et réduit la croissance progressive de la mémoire ainsi que les défaillances de bas niveau.

Cela garantit également que les travailleurs écoutent toujours les signaux de vous, leur maître, et peuvent réagir en conséquence.

Le graphique ci-dessus montre tous les travailleurs du cluster Redis. Un état de 1 indique qu'un travail a été attribué au travailleur et est en cours, et un état de 0 indique que le travailleur est libre/inactif.

Statut de la tâche

Une tâche Resque représente une unité de travail. Chaque travail vit sur une seule file d'attente et a un objet de charge utile associé. La charge utile est un hachage avec deux attributs :`class` et `args`. La `classe` est le nom de la classe Ruby qui doit être utilisée pour exécuter le travail. Les `args` sont un tableau d'arguments qui doivent être passés à la méthode de niveau classe `perform` de la classe Ruby.

Le graphique ci-dessus montre l'état des travaux comme étant traités ou ayant échoué. Un travail est ajouté à l'état d'échec si le travailleur n'a pas réussi à l'exécuter. Voici un exemple d'objet Jobs simple.

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

  • Une version hébergée est disponible ici.
  • Pour déployer cette application sur Heroku, consultez leur documentation.
  • L'intégralité du code source est également disponible sur GitHub pour que vous puissiez le bifurquer et travailler ici.

Comme toujours, si vous construisez quelque chose de génial, envoyez-nous un tweet @scalegridio.