Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Jak wizualizować użycie resque za pomocą Node.js, WebSockets i Redis

Czy kiedykolwiek chciałeś wyobrazić sobie, jak radzą sobie kolejki Resque, pracownicy i zadania? W tym artykule dowiemy się, jak zbudować proste wykresy wokół komponentów Resque.

Przekazywanie zadań do kolejki w tle

Delegowanie długotrwałych, kosztownych obliczeniowo zadań o dużych opóźnieniach do kolejki roboczej w tle jest powszechnym wzorcem używanym do tworzenia skalowalnych aplikacji internetowych. Celem jest obsługa żądań użytkowników końcowych z najszybszą możliwą odpowiedzią, zapewniając, że wszystkie kosztowne zadania są obsługiwane poza cyklem żądania/odpowiedzi.

Resque

Resque to wspierana przez Redis biblioteka Ruby do tworzenia zadań w tle, umieszczania ich w wielu kolejkach i późniejszego przetwarzania. Jest przeznaczony do użytku w scenariuszach, które wymagają dużej liczby wpisów o pracę, ponieważ Resque zapewnia mechanizmy zapewniające widoczność i niezawodność zachowania przy jednoczesnym przekazywaniu statystyk za pośrednictwem pulpitu internetowego.

Ponownie

Redis to magazyn struktury danych typu open source (na licencji BSD), używany jako baza danych, pamięć podręczna i broker komunikatów. Obsługuje struktury danych, takie jak ciągi, skróty, listy, zestawy, posortowane zestawy z zapytaniami o zakres, mapy bitowe, hiperloglogi i indeksy geoprzestrzenne z zapytaniami o promień.

Node.js

Node.js to platforma oparta na środowisku wykonawczym JavaScript Chrome do łatwego tworzenia szybkich i skalowalnych aplikacji sieciowych. Node.js wykorzystuje sterowany zdarzeniami, nieblokujący model we/wy, który sprawia, że ​​jest lekki i wydajny, a tym samym idealny do aplikacji czasu rzeczywistego z dużą ilością danych, które działają na urządzeniach rozproszonych.

Express.js

Express.js to framework Node.js. Node.js to platforma umożliwiająca używanie JavaScript poza przeglądarkami internetowymi do tworzenia aplikacji internetowych i sieciowych. Oznacza to, że możesz utworzyć serwer i kod po stronie serwera dla aplikacji, podobnie jak większość innych języków internetowych, ale przy użyciu JavaScript.

Gniazdo.IO

Socket.IO to biblioteka JavaScript dla aplikacji internetowych działających w czasie rzeczywistym. Umożliwia dwukierunkową komunikację w czasie rzeczywistym między klientami sieciowymi a serwerami. Składa się z dwóch części:biblioteki po stronie klienta, która działa w przeglądarce oraz biblioteki po stronie serwera dla Node.js. Oba komponenty mają prawie identyczne interfejsy API.

Heroku

Heroku to platforma w chmurze, która pozwala firmom tworzyć, dostarczać, monitorować i skalować aplikacje — jest to najszybszy sposób na przejście od pomysłu do adresu URL, omijając wszystkie problemy związane z infrastrukturą.

W tym artykule założono, że masz już zainstalowane Redis, Node.js i Heroku Toolbelt na swoim komputerze.

Konfiguracja:

  1. Pobierz kod z repozytorium ScaleGrid.
  2. Uruchom instalację npm, aby zainstalować niezbędne komponenty.
  3. Na koniec możesz uruchomić serwer węzłów, wykonując „node index.js”. Możesz także uruchomić „nodemona”, który również obserwuje zmiany w plikach.

Możesz również uzyskać dostęp do hostowanej wersji tej aplikacji tutaj.

Nasza aplikacja używa portu Resque o nazwie node-resque, który pozwala nam obserwować kolejki, procesy robocze i zadania działające w klastrze Redis.

Zrozumienie podstaw

Zaraz po uruchomieniu aplikacji musisz wprowadzić poświadczenia klastra Redis. Pamiętaj, że musisz mieć zainstalowany i uruchomiony Resque w swoim klastrze, aby to działało poprawnie.

Na szczęście w pełni zarządzany ScaleGrid for Redis™* zapewnia wydajne rozwiązanie hostingowe dla Redis™ za jednym kliknięciem. Jeśli nie jesteś jeszcze członkiem, możesz zarejestrować się na bezpłatny 30-dniowy okres próbny tutaj, aby rozpocząć.

W przeciwnym razie zaloguj się do pulpitu nawigacyjnego i utwórz nowy klaster Redis™ w sekcji Redis™. Po skonfigurowaniu i uruchomieniu klastra możesz pobrać niezbędne szczegóły ze strony Szczegóły klastra. Będziesz potrzebować następujących informacji:

  1. Gospodarz
  2. Port
  3. Hasło

Jeśli połączenie się powiedzie, powinieneś zobaczyć wykresy podobne do następujących:

Omówmy szczegółowo każdy z tych wykresów. Pamiętaj, że wszystkie wykresy aktualizują się automatycznie, więc jeśli pracownicy przetwarzają zadania w Twoim klastrze, wykresy zaktualizują się automatycznie.

Łączna liczba zadań we wszystkich kolejkach

Powyższe wykresy pokazują całkowitą liczbę kolejek Resque w klastrze oraz liczbę zadań zawartych w każdej kolejce. Resque przechowuje kolejkę zadań na liście Redis o nazwie „resque:queue:name”, a każdy element na liście jest serializowanym hashem jako ciąg JSON. Redis ma również własne struktury zarządzania, w tym listę „nieudanych” zadań. Resque umieszcza swoje dane w Redis z prefiksem „resque:”, dzięki czemu można je udostępniać innym użytkownikom.

Histogram pracownika/miejsc pracy

Pracownik odpowiedzialny za żądania przetwarza zadania. Na platformach, które podtrzymują widelec(2), pracownik odczepi dziecko, aby wykonać każdą pracę. Zapewnia to czyste konto podczas rozpoczynania następnego zadania i zmniejsza stopniowy wzrost pamięci, a także awarie niskiego poziomu.

Zapewnia również, że pracownicy zawsze słuchają sygnałów od Ciebie, swojego mistrza, i mogą odpowiednio reagować.

Powyższy wykres przedstawia wszystkich pracowników w klastrze Redis. Stan 1 oznacza, że ​​zadanie zostało przydzielone pracownikowi i jest w toku, a stan 0 oznacza, że ​​pracownik jest wolny/bezczynny.

Stan pracy

Zadanie Resque reprezentuje jednostkę pracy. Każde zadanie znajduje się w jednej kolejce i ma skojarzony obiekt ładunku. Ładunek to skrót z dwoma atrybutami:„klasa” i „argumenty”. `Klasa` to nazwa klasy Ruby, której należy użyć do uruchomienia zadania. „Argumenty” to tablica argumentów, które powinny zostać przekazane do metody klasy „perform” klasy Ruby.

Powyższy wykres przedstawia status zadań jako przetworzonych lub nieudanych. Zadanie jest dodawane do stanu niepowodzenia, jeśli pracownikowi nie udało się go wykonać. Oto przykład prostego obiektu 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);
    },
  },
};

  • Wersja hostowana jest dostępna tutaj.
  • Aby wdrożyć tę aplikację w Heroku, zapoznaj się z ich dokumentacją.
  • Cały kod źródłowy jest również dostępny na GitHub, abyś mógł tutaj rozwidlić i pracować.

Jak zawsze, jeśli zbudujesz coś niesamowitego, tweetuj nam o tym @scalegridio.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Czy redis na Heroku jest możliwy bez dodatku?

  2. Dlaczego Redis SortedSet używa listy pomijania zamiast zrównoważonego drzewa?

  3. Uzyskaj dostęp do zadokowanego redis z hosta systemu Windows

  4. dlaczego użycie pamięci Redis nie zmniejsza się, gdy dela się połowę kluczy?

  5. Sesje współdzielone między aplikacjami węzłowymi?