2009-04-06 8 views
38

Hàng đợi thư nào là những người sử dụng cho ứng dụng Rails của họ và động lực đằng sau quyết định chọn nó là gì. Liệu Twitter công khai mới nhất trên hàng đợi trong nhà của họ Starling rơi xuống ảnh hưởng đến bất kỳ quyết định thiết kế hiện có.Hàng đợi tin nhắn trong Ruby on Rails

Tôi đang làm việc trên một ứng dụng cần hàng đợi thông báo để xử lý một số tác vụ nền, tôi đã không thực hiện nhiều việc này, và hầu hết những thứ tôi đã thấy trong quá khứ là về Starling và Workling. Thành thật mà nói, ứng dụng không phải là rất lớn và giải pháp này có thể đủ, nhưng tôi muốn có được trải nghiệm tích hợp giải pháp tốt nhất có thể vì tôi chắc chắn rằng tôi sẽ tích hợp một ứng dụng vào một ứng dụng lớn hơn tại một thời điểm nào đó.

Hàng đợi thư nào bạn sẽ đề xuất cho ứng dụng Rails ???

EDIT: Cảm ơn bạn đã đề xuất, tôi sẽ xem xét một vài trong số họ vào cuối tuần này.

EDIT một lần nữa: Tôi đã có một cái nhìn xung quanh và một chút choáng ngợp cho sự lựa chọn. Tuy nhiên tôi sẽ đi về việc tích hợp RabbitMQ với Workling vào ứng dụng tôi đang xây dựng, sau đó nếu tôi cần một số kiến ​​thức về hàng đợi nhanh thì tôi sẽ có điều này và biết nó có phù hợp với nhu cầu của tôi hay không.

EDIT: Tìm kiếm nhiều hơn và nhiều hơn nữa DJ phù hợp với tôi tốt, nếu tôi bao giờ "phát triển" nó trên một trang web tôi muốn nói rằng Resque là nơi tôi sẽ đầu.

EDIT: (tháng 12 năm 2014) Vì vậy, đã lâu rồi tôi hỏi điều này, nhưng tôi thấy nó vẫn nhận được một số lượt xem hoặc một số phiếu bầu, vì vậy tôi nghĩ tôi sẽ cập nhật nó khi tiếp cận lựa chọn công nhân nền.

Theo tôi, cách tốt nhất để chạy các công việc nền trong Ruby là sử dụng Sidekiq. Rất nhiều người đã thực sự ca ngợi Sidekiq vì đó là công nhân có luồng hơn là xử lý cho mỗi công nhân có thể sử dụng ít bộ nhớ hơn nhiều so với những người như Resque, mà tôi đã sử dụng trước Sidekiq. Điều này là tốt nhưng đối với tôi đây không phải là tính năng sát thủ. Bằng cách sử dụng Sidetiq với Sidekiq, lịch trình công việc rất nhỏ nhặt và tôi không bao giờ nhìn lại nó, cho đến nay việc lập kế hoạch công việc dễ dàng nhất mà tôi đã sử dụng và đã làm cho Sidekiq dễ dàng sử dụng.

Trả lời

16

Như một bản cập nhật - GitHub đã chuyển sang Resque trên Redis thay vì công việc bị trì hoãn. Tuy nhiên họ vẫn khuyên bạn nên delayed_job cho các thiết lập nhỏ hơn:

https://github.com/resque/resque

4

Dưới đây là một vài giải pháp Ruby/Rails, một hoặc nhiều trong số này có thể là một phù hợp tốt tùy thuộc vào nhu cầu của bạn:

http://xph.us/software/beanstalkd

http://rubyforge.org/forum/forum.php?forum_id=19781

http://backgroundrb.rubyforge.org

Và, một giải pháp lưu trữ từ Amazon sẽ tạo một hàng đợi tuyệt vời để chia sẻ giữa Ruby/Rails và các thành phần khác của một hệ thống lớn hơn:

http://aws.amazon.com/sqs

Hy vọng điều này sẽ hữu ích!

9

Chris Wanstrath từ github đã ở buổi gặp mặt SF Ruby gần đây, nói về hàng đợi của họ. Họ đã thử Starling, beanstalk, và một số biến thể khác trước khi giải quyết trên delay_job của Shopify. Họ là khá tích cực với việc sử dụng của họ về nền.

Đây là số blog post from last year nói về việc chuyển sang DJ.

Bây giờ tôi đã thực hiện một vài năm trước đây, nhưng tôi đang lấy một số ý tưởng từ DJ để cải thiện việc xử lý.

+0

tôi đã chuyển sang công việc trì hoãn bây giờ, có vẻ như là tốt nhất cho những gì tôi đang làm, dễ cài đặt và sử dụng. Được khuyến nghị. – nitecoder

+2

Kể từ đó, họ đã chuyển sang Resque (http://github.com/blog/542-introducing-resque). Chris vẫn có nhiều điều tốt để nói về công việc bị trì hoãn, nhưng Resque đã đáp ứng tốt hơn nhu cầu của họ. Đối với tôi, công việc bị trì hoãn vẫn tốt hơn. –

2

Rany Keddo đã tặng useful presentation về Starling + Workling tại RailsConf Europe năm ngoái. Ông đã so sánh các giải pháp khác nhau có sẵn tại thời điểm đó.

Di chuyển mới nhất của Twitter từ Starling + Workling có thể không có ý nghĩa nhiều đối với ứng dụng đường ray thông thường. Họ có nhiều vấn đề về quy mô hơn và có thể có các vấn đề về di sản với kho dữ liệu của họ, ngăn cản họ vượt quá quy mô hiện tại của họ.

Beanstalkd là một lựa chọn tốt, đơn giản vì nó chạy dưới dạng daemon và có trình bao bọc trong các ngôn ngữ kịch bản khác (nếu bạn thay đổi hướng trong tương lai hoặc có các thành phần khác được viết bằng ngôn ngữ khác).

Điều này link cũng có so sánh tốt về ưu điểm của các giải pháp đường ray khác nhau có sẵn.

1

Tôi sử dụng background_job giống như delayed_job là hàng đợi dựa trên cơ sở dữ liệu.

Cơ sở dữ liệu tạo hàng đợi OK miễn là bạn không làm quá nhiều lưu lượng truy cập vào và ra.

Lý do tôi thích background_job (và delay_job) là họ không yêu cầu quy trình riêng biệt. Chúng có thể chạy qua cron. Đối với tôi, điều này là quan trọng bởi vì nhu cầu nhắn tin của tôi thậm chí còn đơn giản hơn các kỹ năng sysadmin ít ỏi của tôi.

9

Tôi muốn giới thiệu delayed-job là giải pháp đơn giản chết nếu bạn không mong đợi bất kỳ tải trọng nặng nào. Ưu điểm: dễ cài đặt, dễ giám sát, mã đơn giản, không có bất kỳ phụ thuộc bên ngoài nào. Trước đây chúng tôi đã sử dụng ActiveMessaging (với ActiveMQ và stomp), nhưng nó là quá mức cần thiết cho dự án của chúng tôi, vì vậy chúng tôi đã chuyển sang lazy_job vì sự đơn giản của nó.

Dù sao, nếu bạn cần giải pháp rất trưởng thành và nhanh chóng, ActiveMQ là lựa chọn rất tốt. Nếu bạn không muốn dành quá nhiều thời gian vào việc duy trì giải pháp xếp hàng đợi đầy đủ quy mô mà bạn không thực sự cần, delay_job là một cách để đi. Đây là một số good article về trải nghiệm Scribd với ActiveMQ.

+0

Tôi yêu delay_job! Rất đơn giản và dễ để sử dụng! – ep3static