Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Cara Memvisualisasikan Penggunaan Resque dengan Node.js, WebSockets, dan Redis

Pernah ingin memvisualisasikan bagaimana kinerja antrian, pekerja, dan pekerjaan Resque Anda? Dalam artikel ini, kita akan mempelajari cara membuat beberapa grafik sederhana seputar komponen Resque.

Mendelegasikan tugas ke antrean latar belakang

Pendelegasian pekerjaan yang berjalan lama, mahal secara komputasi, dan latensi tinggi ke antrean pekerja latar belakang adalah pola umum yang digunakan untuk membuat aplikasi web yang dapat diskalakan. Tujuannya adalah untuk melayani permintaan pengguna akhir dengan respons secepat mungkin dengan memastikan bahwa semua pekerjaan yang mahal ditangani di luar siklus permintaan/respons.

Permintaan

Resque adalah library Ruby yang didukung Redis untuk membuat pekerjaan latar belakang, menempatkannya di beberapa antrean, dan memprosesnya nanti. Ini dirancang untuk digunakan dalam skenario yang memerlukan entri pekerjaan dalam jumlah besar karena Resque menyediakan mekanisme untuk memastikan visibilitas dan keandalan perilaku saat menyampaikan statistik melalui dasbor web.

Merah

Redis adalah open source (berlisensi BSD), penyimpanan struktur data dalam memori, digunakan sebagai database, cache, dan perantara pesan. Ini mendukung struktur data seperti string, hash, daftar, set, set yang diurutkan dengan kueri rentang, bitmap, hyperloglog, dan indeks geospasial dengan kueri radius.

Node.js

Node.js adalah platform yang dibangun di atas runtime JavaScript Chrome untuk dengan mudah membangun aplikasi jaringan yang cepat dan skalabel. Node.js menggunakan model I/O non-pemblokiran yang digerakkan oleh peristiwa yang membuatnya ringan dan efisien, sehingga sempurna untuk aplikasi waktu-nyata intensif data yang berjalan di seluruh perangkat terdistribusi.

Express.js

Express.js adalah kerangka kerja Node.js. Node.js adalah platform yang memungkinkan JavaScript digunakan di luar browser web, untuk membuat aplikasi web dan jaringan. Ini berarti Anda dapat membuat kode server dan sisi server untuk aplikasi seperti kebanyakan bahasa web lainnya, tetapi menggunakan JavaScript.

Socket.IO

Socket.IO adalah library JavaScript untuk aplikasi web real-time. Ini memungkinkan komunikasi dua arah secara real-time antara klien web dan server. Ini memiliki dua bagian:perpustakaan sisi klien yang berjalan di browser, dan perpustakaan sisi server untuk Node.js. Kedua komponen memiliki API yang hampir sama.

Heroku

Heroku adalah platform cloud yang memungkinkan perusahaan membangun, mengirimkan, memantau, dan menskalakan aplikasi — ini adalah cara tercepat untuk beralih dari ide ke URL, melewati semua masalah infrastruktur tersebut.

Artikel ini mengasumsikan bahwa Anda telah menginstal Redis, Node.js, dan Heroku Toolbelt di mesin Anda.

Penyiapan:

  1. Unduh kode dari repositori ScaleGrid.
  2. Jalankan npm install untuk menginstal komponen yang diperlukan.
  3. Akhirnya, Anda dapat memulai server node dengan melakukan “node index.js”. Anda juga dapat menjalankan “nodemon” yang juga mengawasi perubahan file.

Anda juga dapat mengakses versi aplikasi yang dihosting di sini.

Aplikasi kita menggunakan port Resque yang disebut node-resque yang memungkinkan kita untuk melihat antrian, pekerja, dan pekerjaan yang berjalan di cluster Redis.

Memahami dasar-dasarnya

Segera setelah Anda memulai aplikasi, Anda diminta untuk memasukkan kredensial cluster Redis Anda. Harap perhatikan bahwa Anda harus menginstal dan menjalankan Resque di cluster Anda agar ini berfungsi dengan benar.

Untungnya, ScaleGrid for Redis™* yang terkelola sepenuhnya memberikan solusi hosting satu-klik berkinerja tinggi untuk Redis™. Jika Anda belum menjadi anggota, Anda dapat mendaftar uji coba gratis selama 30 hari di sini untuk memulai.

Jika tidak, masuk ke dasbor Anda dan buat cluster Redis™ baru di bawah bagian Redis™. Setelah cluster Anda aktif dan berjalan, Anda dapat mengambil detail yang diperlukan dari Halaman Detail Cluster. Anda memerlukan info berikut:

  1. Tuan rumah
  2. Pelabuhan
  3. Sandi

Jika koneksi berhasil, Anda akan melihat grafik seperti berikut:

Mari kita bahas masing-masing grafik ini secara rinci. Harap perhatikan bahwa semua grafik diperbarui sendiri, jadi jika pekerja sedang memproses pekerjaan di cluster Anda, grafik akan diperbarui sendiri secara otomatis.

Total tugas di semua antrian

Grafik di atas menunjukkan jumlah total antrian Resque di cluster Anda, dan jumlah pekerjaan yang ada di setiap antrian. Resque menyimpan antrian pekerjaan dalam daftar Redis bernama "resque:queue:name", dan setiap elemen dalam daftar adalah serial hash sebagai string JSON. Redis juga memiliki struktur manajemennya sendiri, termasuk daftar pekerjaan yang “gagal”. Resque namespaces datanya dalam Redis dengan awalan “resque:”, sehingga dapat dibagikan dengan pengguna lain.

Histogram pekerja/pekerjaan

Pekerja Resque memproses tugas. Pada platform yang mendukung fork(2), pekerja akan memotong seorang anak untuk memproses setiap pekerjaan. Ini memastikan awal yang bersih saat memulai pekerjaan berikutnya dan mengurangi pertumbuhan memori bertahap serta kegagalan tingkat rendah.

Ini juga memastikan bahwa pekerja selalu mendengarkan sinyal dari Anda, majikan mereka, dan dapat bereaksi sesuai dengan itu.

Grafik di atas menunjukkan semua pekerja di cluster Redis. Status 1 menunjukkan bahwa pekerjaan telah diberikan kepada pekerja dan sedang berlangsung, dan status 0 menunjukkan bahwa pekerja bebas/menganggur.

Status pekerjaan

Pekerjaan Resque mewakili unit pekerjaan. Setiap pekerjaan hidup di antrian tunggal dan memiliki objek payload terkait. Payload adalah hash dengan dua atribut:`class` dan `args`. `Kelas` adalah nama kelas Ruby yang harus digunakan untuk menjalankan pekerjaan. `args` adalah larik argumen yang harus diteruskan ke metode tingkat kelas `perform` kelas Ruby.

Grafik di atas menunjukkan status pekerjaan sebagai diproses atau gagal. Pekerjaan ditambahkan ke status gagal jika pekerja gagal menjalankannya. Berikut adalah contoh Objek Pekerjaan sederhana.

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

  • Versi yang dihosting tersedia di sini.
  • Untuk menerapkan aplikasi ini di Heroku, lihat dokumen mereka.
  • Seluruh kode sumber juga tersedia di GitHub untuk Anda kerjakan dan kerjakan di sini.

Seperti biasa, jika Anda membuat sesuatu yang luar biasa, kirimkan tweet kepada kami tentangnya @scalegridio.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Integrasi perpustakaan Flask-Mail dan Redis Queue memberikan kesalahan

  2. Gandakan kunci di redis

  3. Apa akibat mematikan gosip, pergaulan dan detak jantung bagi pekerja seledri?

  4. Cara Memigrasikan Data Redis™ Menggunakan Redis-Shake

  5. Redis Cluster vs ZeroMQ di Pub/Sub, untuk sistem terdistribusi berskala horizontal