Delayed_job để xử lý job bất đồng bộ trong rails
TIL
498
Rails
30
White

Bùi Hồng Hà viết ngày 06/05/2016

Vấn đề

Mình có 1 webapp viết bằng rails 4 có một số phần xử lý đồng bộ dẫn tới thời gian xử lý một request khá chậm. Các xử lý này hoàn toàn có thể xử lý bất đồng bộ để giảm thời gian trả lời request, vì vậy mình thử chuyển các phần này sang bất đồng bộ.

Thư viện

Sau khi hỏi bạn rành rails, phát hiện ra có 2 thư viện (tool?) cho phép làm việc này

  1. Sidekiq
  2. Delayed_Job

Mình thử Sidekiq thì gặp vấn đề là đối số để của xử lý bị thư viện serialized trước khi được cho vào queue để worker xử lý. Interface của các hàm hiện tại không cho phép làm như vậy vì vậy mình đã thử Delayed_job

Kết quả

Delayed_job thực sự khá tiện lợi. Thư viện này inject một phương pháp delay vào model object giúp các đối tượng chỉ cần gọi .delay.[tên hàm cũ] là xử lý trong tên hàm cũ sẽ được xử lý bất đồng bộ.

Ví dụ thư viện như sau:

# without delayed_job
Notifier.signup(@user).deliver

# with delayed_job
Notifier.delay.signup(@user)

# with delayed_job running at a specific time
Notifier.delay(run_at: 5.minutes.from_now).signup(@user)

Chỉ cần gọi Notifier.delay.signupsignup sẽ được gọi bất đồng bộ. Queue trong Delayed_job có thể là mysql, mongo, hoặc redis (dù rằng redis vẫn trong beta).

Ngay lập tức mình đã thử dùng delayed_job để giải quyết vấn đề của mình.

06-05-2016

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Bùi Hồng Hà

59 bài viết.
262 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
74 8
Bài viết tổng hợp cơ chế hoạt động của https Chút ít về chữ ký điện tử Chữ ký điện tử là cơ chế bao gồm 3 thuật toán: Thuật toán chọn một khóa...
Bùi Hồng Hà viết gần 3 năm trước
74 8
White
43 7
Giới thiệu Gần đây thấy bản thân chém gió rất nhiều về MapReduce, Hadoop v.v nhưng chưa thấy có bài viết nào tổng hợp + giải thích cụ thể về MapRe...
Bùi Hồng Hà viết 2 năm trước
43 7
White
33 0
Giới thiệu Google là một công ty dẫn đầu về phần mềm xử lý Big Data. Hầu hết các phần mềm xử lý dữ liệu như Hadoop đều có nguồn gốc ý tưởng từ Goo...
Bùi Hồng Hà viết 2 năm trước
33 0
Bài viết liên quan
White
18 1
Toán tử XOR có tính chất: + A XOR A = 0 + 0 XOR A = A Với tính chất này, có thể cài đặt bài toán sau với độ phức tạp O(N) về runtime, và với O(1)...
kiennt viết hơn 1 năm trước
18 1
White
1 1
Chào mọi người, hôm nay mình viết một bài TIL nhỏ về cách lấy độ phân giải của màn hình hiện tại đang sử dụng. xdpyinfo | grep dimensions Kết quả...
namtx viết 7 tháng trước
1 1
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
59 bài viết.
262 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!