2013-08-16 36 views
9

Tôi muốn thiết lập sidekiq để nó chạy trên một máy chủ riêng biệt từ ứng dụng đường ray của tôi, để tránh giảm cân máy chủ web khi chạy các tác vụ nền chuyên sâu bộ nhớ.Có thể chạy sidekiq trên một máy chủ riêng biệt từ máy chủ lưu trữ đường ray không?

Chi tiết cấu hình mà tôi cần xem là gì?

Có các cấu hình hoặc thực tiễn tốt nhất đã biết cho điều này không?

EDIT:

Để làm rõ, những gì tôi có nghĩa là để hỏi là, làm thế nào để cấu hình đường ray để cuộc gọi sidekiq API (MyWorker.perform_async) sẽ chạy nếu quá trình sidekiq không chạy tại địa phương?

+0

Bạn đã trải qua [wiki này trên trang Github của Sidekiq] (https://github.com/mperham/sidekiq/wiki/Advanced-Options) chưa? – Kashyap

+0

Có, nhưng tôi không thể tìm thấy bất cứ điều gì liên quan đến những gì tôi yêu cầu. Nêu tôi sai vui long chân chỉnh tôi. – Ovesh

Trả lời

13

Chỉnh sửa để làm rõ

Trước khi mọi thứ khác, bạn nên hiểu rằng khi bạn chạy perform_async, nó chỉ đơn giản gậy Jobs vào một hàng đợi Redis. Sidekiq xem hàng đợi này và chạy các công việc khi họ vào. Vì vậy, miễn là ứng dụng của bạn và Sidekiq của bạn đang xem cùng một máy chủ Redis (và cùng một cơ sở dữ liệu), mọi thứ sẽ hoạt động.

Original câu trả lời

Thứ nhất, như bạn có thể đoán, nó sẽ cần một thanh toán trùng lặp của mã của bạn để nó có thể chạy. Không phải vấn đề lớn.

Thứ hai, nó sẽ cần quyền truy cập vào cơ sở dữ liệu của bạn và máy chủ redis trên hộp khác. Điều đó có nghĩa là đảm bảo các cổng đó đang mở trên máy chủ khác. Điều đó có thể phức tạp, b/c bạn lý tưởng không muốn những người tiếp xúc với Internet mở. Thông thường, đối với thiết lập nhiều hộp, bạn sẽ chỉ có một hộp được hiển thị với Internet mở. Nó giao tiếp với phần còn lại của hộp qua IP riêng:

Công Web server

Chạy Apache/Nginx và có lẽ các máy chủ ứng dụng của bạn.

App Private Server (s) (không bắt buộc)

Chạy máy chủ ứng dụng của bạn, nếu chúng không được chạy trên máy chủ công cộng. Kết nối với cơ sở dữ liệu của bạn và máy chủ Redis.

Private Sidekiq Server (s) (không bắt buộc)

Chạy Sidekiq. Kết nối với cơ sở dữ liệu của bạn và máy chủ Redis.

Private Database/Redis server

Chạy cơ sở dữ liệu và Redis. Tất nhiên họ có thể chia ra các máy chủ khác nhau nếu cần thiết.

+0

Tôi đoán câu hỏi của tôi là, khi bạn gọi 'MyWorker.perform_async', nó sẽ hoạt động như thế nào nếu sidekiq không chạy cục bộ? Cấu hình được định cấu hình như thế nào? – Ovesh

+0

Nó được cấu hình như tôi đã nói ở trên. Point Sidekiq đến bất kỳ máy chủ Redis nào đang chạy (thay vì "localhost: 6379").Có thực sự không có gì khác nhau về nó. – bioneuralnet

+2

Nói cách khác: Thay vì khởi động Sidekiq cục bộ bạn đã tạo một máy chủ lưu trữ khác, cài đặt ứng dụng Rails của bạn, hãy chỉ định cấu hình DB và Redis cho máy chủ gốc của bạn, sau đó khởi động Sidekiq. Xong, đó là tất cả những gì đã thay đổi. – bioneuralnet

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