2014-07-14 28 views
5

Tôi cần một bộ lập lịch biểu cho các bộ sưu tập động lớn. Hiện tại, tôi đang xem resque-scheduler, rufus-schedulerclockwork. Tôi sẽ rất biết ơn về lời khuyên về việc lựa chọn cái nào (hoặc cái gì thay thế) để sử dụng.Lập kế hoạch lớn trong Ruby

Một số chi tiết:

  • Có một bộ sưu tập lớn các nhiệm vụ (lên đến 100K) được thực hiện theo định kỳ.
  • Thời gian thực hiện ngắn nhất là 1h.
  • Các tác vụ mới có thể xuất hiện theo thời gian. Các tác vụ hiện tại có thể bị thay đổi hoặc bị xóa.
  • Giảm thiểu độ trễ theo lịch trình không phải là nhiệm vụ quan trọng ở đây (khả năng mở rộng và tính bền vững là quan trọng nhất).
  • Thực hiện tác vụ không phải là thao tác nặng và có thể dễ dàng song song.

Tóm tắt, Tôi cần một thứ như cron cho dự án Ruby có thể xử lý một bộ sưu tập lớn, thay đổi động.

Cập nhật: Tôi đã dành một ngày thử nghiệm với các thư viện lập lịch và giờ tôi muốn tóm tắt ngắn gọn trải nghiệm mới thu được.

Tôi đã dừng sự chú ý của mình tại các thư viện Clockwork và resque-scheduler, vì đây là các dự án trưởng thành hơn với tài liệu chi tiết hơn. Resque-scheduler dựa trên rufus-scheduler trong khi Clockwork được lấy cảm hứng từ nó, cả hai đều có thể được sử dụng cho giải pháp mà tôi đang tìm kiếm.

Cả hai đều là các dịch vụ độc lập được cho là đang chạy trong quá trình riêng biệt, có thể xử lý số lượng công việc hầu như không giới hạn được lên lịch để thực thi đơn hoặc lặp lại. Các tác vụ được thực hiện trong các chuỗi.

ưu Clockwork:

  • Nó có một khả năng tải các nhiệm vụ theo lịch trình từ cơ sở dữ liệu (thông qua ActiveRecord hoặc bất cứ nguồn nào tùy ý).
  • Ngoài ra, nó có thể tự động cập nhật các tác vụ theo lịch biểu bằng cách bỏ phiếu cập nhật dữ liệu từ DB.

khuyết điểm Clockwork:

  • DB bỏ phiếu là một nút cổ chai tiềm năng ở đây.
  • Khoảng thời gian bỏ phiếu là 1 phút (cộng với thời gian lên lịch lại tất cả các tác vụ), hơi chậm quá.
  • Các tác vụ được lên lịch biểu diễn (để lên lịch hoặc thay đổi) là không có giấy tờ, đó là lý do tại sao sử dụng tính năng này trông giống như một hack với tôi.

Tôi đã triển khai lớp Quản lý thay thế cho Clockwork (đây là phần cốt lõi của đá quý điều khiển lập lịch) để cho phép kiểm soát lập lịch thông qua các thông báo ZeroMQ. Vì vậy, dịch vụ chính trong dự án của tôi có thể gửi các lệnh tới trình lên lịch, như "chạy mỗi ngày", hoặc "nhiệm vụ không công bố # 10" và trình lập lịch biểu thực hiện từng yêu cầu ngay lập tức.

Tôi có ít kinh nghiệm hơn với công cụ lập lịch biểu, nhưng tại thời điểm này, nó trông giống như một giải pháp tốt hơn.

ưu resque-scheduler:

  • Redis dựa trên sự kiên trì. Hướng dẫn này khẳng định rằng các tác vụ đã lên lịch có thể được giải cứu sau khi khởi động lại dịch vụ.
  • Lập lịch động bằng API sạch. Bạn chỉ cần gọi Resque.remove_schedule(name) để thả một tác vụ cụ thể.
  • Giao diện người dùng web. Không quá quan trọng, nhưng tốt đẹp để có.

resque-scheduler:

  • Nó đòi hỏi Redis được cài đặt.

Có thể một thứ khác sẽ xuất hiện, sau khi nhìn kỹ hơn, nhưng hiện tại không có gì khác.

Đó là những gì tôi có bây giờ. BTW, tôi đã xuất bản một số liên kết đến các gem Ruby liên quan đến lịch trình on GitHub.

+0

Xin chào, có bất kỳ điều gì giống như Resque.list_all_schedule không? –

Trả lời

4

là bằng cách nào đó schedulers tinh khiết. Bất cứ khi nào được hỗ trợ bởi Crond, do đó, nó vững chắc (nhưng công việc sẽ được thực hiện trong các quy trình riêng biệt). Rufus-scheduler và Clockwork là tương tự, trong quá trình Ruby, schedulers (Clockwork được lấy cảm hứng từ rufus-scheduler).

Công cụ lập lịch biểu lại (https://github.com/resque/resque-scheduler) được xây dựng trên đầu trang của Resque (quản lý tác vụ) và rufus-scheduler (quản lý lịch biểu).

Bạn cũng nên xem Sidekiq (http://sidekiq.org/). Hãy xem https://www.google.com/?q=sidekiq%20scheduler#q=sidekiq+scheduler

Vì vậy hãy tìm hiểu về Resque và Sidekiq, sau đó xem lịch trình có sẵn cho chúng. Nếu không có gì phù hợp với bạn, hãy nhìn vào lịch trình (Bất cứ khi nào, rufus-scheduler, Clockwork, ...), có lẽ bạn có thể xây dựng lên trên chúng.

+0

[RabbitMQ] (http://www.rabbitmq.com/) cũng đáng để kiểm tra. – tadman

Các vấn đề liên quan