ruby-on-rails sidekiq - It costs 3 mins to read

Sidekiq là một trong những Background Processing Libraries được nhiều người sử dụng nhất trong Ruby. So với các lão làng như Delayed Job, Resque hay Active Job vốn có sẵn kể từ Rails 4.2 thì Sidekiq được nhiều người tin dùng bởi tính lightweight (Do sử dụng Redis thay vì ActiveRecord và Performance, Memory Efficient cũng tốt hơn Resque). Tuy vậy, Sidekiq cũng khó sử dụng hơn so với Delayed Job và Active Job nên nếu bạn chưa quen với Sidekiq, bạn có thể sẽ mau nản.

Trước đây, khi nhận dự án UBrand về thì Team Develop trước đã dùng Delayed Job, nhưng sau khi go live thì mình thấy Delayed Job khá chậm, lại tốn nhiều resource của hệ thống nên đã tìm giải pháp khác thay thế, và do đó đã tìm đến Sidekiq.

Sidekiq có 3 phiên bản là Sidekiq OSS, Sidekiq Pro, Sidekiq Enterprise, bạn có thể tham khảo chi tiết tại trang chủ của Sidekiq tại http://sidekiq.org. Riêng với cá nhân mình thì thấy rằng phiên bản OpenSource của Sidekiq là khá đủ dùng, nếu cần thêm các chức năng Advanced mà Sidekiq OSS không có thì hoàn toàn có thể cài thêm một số gem khác phụ trợ (Ví dụ dùng Sidetiq cho Recurring Job).

Bài viết này nhằm ghi lại một số kinh nghiệm khi dùng Sidekiq cho dự án.


Sidekiq Web UI

Theo dõi và quản trị các Jobs/Worker trên Sidekiq bằng giao diện Web.

Link: Sidekiq Monitoring

Cài đặt Sidekiq Web UI cho dự án Rails:

gem 'sinatra', :require => nil
require 'sidekiq/web'
authenticate :user, lambda { |u| u.admin? } do
  mount Sidekiq::Web => '/sidekiq'
end


Một số Gem hữu ích để bổ sung cho Sidekiq

Sidekiq Throttler

Sidekiq-throttler, một middleware cho sidekiq để thêm chức năng giới hạn số lượng job thực thi trên mỗi worker tại một thời điểm.

Link: https://github.com/gevans/sidekiq-throttler (đã lâu không cập nhật nhưng mình vẫn dùng tốt ở thSidetiqời điểm hiện tại - (Ruby 2.2, Rails 4.2 và Sidekiq 3.4)

Sidekiq Failures

Link: https://github.com/mhfs/sidekiq-failures

Sidekiq Statistic

Link: https://github.com/davydovanton/sidekiq-statistic

Sidekiq Statistic

Sidetiq

Nếu bạn có một hay vài Job cần chạy recurring thì không thể bỏ qua Sidetiq

Link: https://github.com/tobiassvn/sidetiq


Một số lệnh Sidekiq ít gặp nhưng đôi lúc sẽ cần đến

require 'sidekiq/api'
Sidekiq::Queue.new("infinity").clear
Sidekiq::RetrySet.new.clear
Sidekiq::ScheduledSet.new.clear
Sidekiq.redis {|c| c.del('stat:failed') }
Sidekiq.redis {|c| c.del('stat:processed:2015-07-02') }
Sidekiq.redis {|c| c.del('stat:failed:2015-07-02') }