Mục lục

Sidekiq là một hệ thống xử lý công việc nền (background) cho các ứng dụng Ruby. Nó giúp chạy các tác vụ ở background, làm cho các ứng dụng của bạn nhanh hơn và hiệu quả hơn.
Sidekiq sử dụng các luồng để xử lý nhiều công việc cùng lúc trong cùng một quy trình. Nó không yêu cầu Rails nhưng sẽ tích hợp chặt chẽ với Rails để làm cho việc xử lý ở background trở nên đơn giản.

Xem trang wiki https://github.com/sidekiq/sidekiq/wiki/Getting-Started và làm theo hướng dẫn hoặc bạn có thể xem playlist YouTube này https://www.youtube.com/playlist?list=PLjeHh2LSCFrWGT5uVjUuFKAcrcj5kSai1 để tìm hiểu tất cả về Sidekiq và xem các tính năng của nó trong thực tế.

Để biết thêm thông tin, truy cập https://github.com/sidekiq/sidekiq

Lý do chọn Sidekiq

  • Hiệu suất: Nhanh, sử dụng luồng đồng thời (ví dụ: xử lý 1000 email song song). Sidekiq sử dụng các luồng, thường nhanh hơn các backend mặc định của ActiveJob
  • Khả năng mở rộng: Dễ dàng mở rộng bằng cách thêm nhiều worker (ví dụ: thêm worker để xử lý lưu lượng tăng cao vào ngày Black Friday)
  • Backend Redis: Lưu trữ và truy xuất công việc hiệu quả hơn so với một số adapter của ActiveJob
  • API đơn giản: Dễ dàng triển khai và sử dụng
  • Nhóm công việc: Khả năng nhóm các công việc liên quan và theo dõi tiến trình của chúng
  • Công cụ giám sát: Xem thống kê công việc theo thời gian thực trong bảng điều khiển web
  • Độ tin cậy: Tự động thử lại cho các công việc thất bại (ví dụ: tự động thử lại các công việc xử lý thanh toán thất bại), cơ chế thử lại có thể cấu hình nhiều hơn so với ActiveJob
  • Miễn phí và mã nguồn mở: Phiên bản cộng đồng có sẵn (sử dụng Sidekiq với những startup có ngân sách hạn chế)
  • Hệ sinh thái phong phú: Có nhiều add-on và plugin
  • Tính linh hoạt: Hỗ trợ các loại công việc và mức độ ưu tiên khác nhau (ví dụ: SomeJob.set(queue: 'high_priority').perform_async(args))
  • Được chấp nhận rộng rãi: Đã được chứng minh trong các môi trường sản xuất, danh sách các công ty sử dụng Sidekiq có sẵn tại https://stackshare.io/sidekiq
  • Tích hợp Rails: Hoạt động liền mạch với Ruby on Rails

Các trường hợp mà Sidekiq có thể không phải là lựa chọn tốt nhất

  • Giới hạn bộ nhớ: RAM hạn chế trên VPS nhỏ hoặc shared hosting
  • Nhu cầu đơn giản: Các công việc nền cơ bản trong một ứng dụng Rails nhỏ
  • Hàng đợi dựa trên cơ sở dữ liệu được ưu tiên: Cần xử lý công việc theo giao dịch (transaction)
  • Không phù hợp ngôn ngữ: Ứng dụng chính không phải là Ruby
  • Yêu cầu một luồng
  • Xem xét chi phí: Các giải pháp miễn phí được ưu tiên cho các dự án nhỏ
  • Xử lý ngoại tuyến: Cần chạy công việc mà không có kết nối mạng

Ví dụ về Sidekiq trong thực tế

Gửi email:

class WelcomeEmailJob
  include Sidekiq::Job

  def perform(user_id)
    user = User.find(user_id)
    UserMailer.welcome_email(user).deliver_now
  end
end

# Enqueue the job
WelcomeEmailJob.perform_async(new_user.id)

Thay đổi kích thước hình ảnh:

class ResizeImageJob
  include Sidekiq::Job

  def perform(image_id)
    image = Image.find(image_id)
    image.resize(800, 600)
    image.save
  end
end

# Enqueue the job
ResizeImageJob.perform_async(uploaded_image.id)

Nhập dữ liệu:

class ImportDataJob
  include Sidekiq::Job

  def perform(file_path)
    CSV.foreach(file_path, headers: true) do |row|
      Product.create(row.to_hash)
    end
  end
end

# Enqueue the job
ImportDataJob.perform_async('products.csv')

 

Xin chào! Cám ơn bạn đã đọc bài viết có tiêu đề Tăng tốc ứng dụng Ruby của bạn: Xử lý nền với Sidekiq của tác giả Vũ Lê Huân. Trong trường hợp bạn muốn tìm hiểu thêm thông tin về tác giả, bạn có thể truy cập .